如何使“当字符串不相等时”的循环条件

时间:2019-06-15 18:17:33

标签: java do-loops

我想在用户输入的字母不等于所需字母(a-i)的情况下运行do循环,由于某种原因,即使我输入正确的字母,它也会永远循环。

我尝试在比较中使用切换用例以及!=。

这是我的代码:

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 :(得分:0)

如果您有否定词,则需要AND才能加入条件,而不是OR。

答案 1 :(得分:0)

那是因为,如果您一些 not-ed 值,它们会形成一个。 让我更好地解释。

如果输入a,则第一个为false(因为不是),其他则为true,因此条件使结果为 true

您应该将所有ors分组,然后不进行分组。

例如

!(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"))

答案 2 :(得分:0)

您可能不想创建用于每种输入情况的运算符,而是要创建一个已接受答案的列表,然后您的情况将如下所示:

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);

答案 3 :(得分:0)

请尝试以下操作:


    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]字符都不匹配。通过将检查作为循环的条件,这是最短的方法。如果失败,则将调用循环。