Неверный лог c в Java - PullRequest
       7

Неверный лог c в Java

0 голосов
/ 13 апреля 2020

Я пытаюсь написать оператор logi c, который гласит: «ЕСЛИ newID не имеет 6 символов ИЛИ newID не начинается с EITHER M, P, T, O, то ошибка.

Это заявление, которое я до сих пор использовал java:

if ((newID.length() != 6) || !(newID.charAt(0)!='M'&& newID.charAt(0)!='P'&& newID.charAt(0)!='T'&& newID.charAt(0)!='O'))

Допустимый код newID будет:

M44521
PU2212

Недопустимый код будет:

6
P32
R55553

Ответы [ 4 ]

1 голос
/ 13 апреля 2020

В вашем состоянии вы используете && (и) вместе с !, который необходимо удалить, как указано @Pankaj в его answer. Так это будет выглядеть так:

if (newID.length() != 6 || newID.charAt(0)!='M' && newID.charAt(0)!='P' && newID.charAt(0)!='T' && newID.charAt(0)!='O')

В качестве альтернативы вы также можете использовать || (или) условие. Итак, ваше окончательное состояние будет:

if (newID.length() != 6 || 
    !(newID.charAt(0) == 'M' ||
      newID.charAt(0) =='P' || 
      newID.charAt(0) == 'T' ||
      newID.charAt(0) =='O')
    ){
    // throw your exception
}

Вы можете сделать это более аккуратным с

if (newID.length() != 6 || "MPTO".indexOf(newID.charAt(0)) == -1){
    // throw your exception
}
1 голос
/ 13 апреля 2020

Я написал тестовую программу, которую вы можете использовать для непрерывного тестирования, добавив значения:

public class TestProgram {

    public static void main(String[] args) {
        String newID = "";
        test(newID);
        newID = "M44521";
        test(newID);
        newID = "PU2212";
        test(newID);
        newID = "6";
        test(newID);
        newID = "P32";
        test(newID);
        newID = "R55553";
        test(newID);
        newID="P12345";
        test(newID);
    }

    private static void test(String newID) {
        int leng = newID.length();
        if (leng > 0) {
            char c = newID.charAt(0);
            if (c != 'M' && c != 'P' && c != 'T' && c != 'O' || leng != 6) {
                System.out.println("Problem!");
            }
            else {
                System.out.println("No Problem");
            }
        }
    }

}

Вывод:

Нет проблем

Нет проблем

Проблема!

Проблема!

Проблема!

Нет проблем

0 голосов
/ 13 апреля 2020

Правильный вывод не приходит из-за !. В вашем коде

if ((newID.length() != 6) || !(newID.charAt(0)!='M'&& newID.charAt(0)!='P'&& newID.charAt(0)!='T'&& newID.charAt(0)!='O'))

После || есть !, что делает неправильными целые логи c.

0 голосов
/ 13 апреля 2020

Попробуйте

if ((newID.length() == 6) && !( newID.charAt(0)=='M' || newID.charAt(0)=='P' || newID.charAt(0)=='T' ||  newID.charAt(0)=='O')){

// do stuff with valid newID
}
...