Как сделать условия цикла «когда строка не равна» - PullRequest
0 голосов
/ 15 июня 2019

Я хочу, чтобы мой цикл do выполнялся, пока введенные пользователем данные не равны требуемым буквам (a-i) По какой-то причине, даже когда я ввожу правильные буквы, он зацикливается вечно.

Я пытался использовать переключатели, а также! = Внутри сравнения.

Вот мой код:

do {
            System.out.println("Please enter the location of your battleship, starting with the first letter value. Make sure it is from the letters a-i.");
            lL1=in.nextLine();
            if (!lL1.equals("a")||!lL1.equals("b")||!lL1.equals("c")||!lL1.equals("d")||!lL1.equals("e")||!lL1.equals("f")||!lL1.equals("g")||!lL1.equals("h")||!lL1.equals("i")){
                System.out.println("Invalid Input. Try again.");
            }//End if statement
}while(!lL1.equals("a") || !lL1.equals("b") || !lL1.equals("c") || !lL1.equals("d") || !lL1.equals("e") || !lL1.equals("f") || !lL1.equals("g") || !lL1.equals("h") || !lL1.equals("i"));

Мои навыки в Java ограничены, но это должно работать, если я не пропускаю что-то очевидное. Любая помощь будет потрясающей!

Ответы [ 4 ]

0 голосов
/ 15 июня 2019

Пожалуйста, попробуйте это:


    char lL1;
    Scanner scanner = new Scanner(System.in);
    do {
        System.out.println("Please enter the location of your battleship, starting with the first letter value. Make sure it is from the letters a-i.");
        lL1=scanner.next().charAt(0);

    }while(lL1!='a' && lL1!='b' && lL1!='c' && lL1!='d' && lL1!='e' && lL1!='f' && lL1!='g' && lL1!='h' && lL1!='i');

Поскольку вы получаете только один символ, вы можете убедиться, что он не совпадает ни с одним символом [от a до i], как показано выше.Это самый короткий способ сделать это, выполнив проверку как условие цикла.Если это не удастся, тогда будет вызван цикл.

0 голосов
/ 15 июня 2019

Это потому, что если вы или некоторые нередактированные значения, они образуют и . Позвольте мне объяснить лучше.

Если вы введете a, то первое будет false (потому что вы не это), а остальные верны, поэтому условие или делает результат true .

Вместо этого вы должны сгруппировать все «ор», а потом - нет.

, например

!(lL1.equals("a") || lL1.equals("b") || lL1.equals("c") || lL1.equals("d") || lL1.equals("e") || lL1.equals("f") || lL1.equals("g") || lL1.equals("h") || lL1.equals("i"))
0 голосов
/ 15 июня 2019

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

while answer is not in accepted answers, ask another input

Примером может быть:

Scanner scanner = new Scanner(System.in);
List<String> acceptedAnswers = Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h", "i");
String input;
do {
    System.out.println(
            "Please enter the location of your battleship, starting with the first letter value. Make sure it is from the letters a-i.");
    input = scanner.nextLine();
} while (!acceptedAnswers.contains(input));
scanner.close();
System.out.println("Got correct input: " + input);
0 голосов
/ 15 июня 2019

Если у вас есть отрицание, вам нужно И, чтобы присоединиться к условиям, а не ИЛИ.

...