我想在用户输入的字母不等于所需字母(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方面的技能是有限的,但这应该可以工作,除非我遗漏了一些明显的东西。任何帮助都将是惊人的!
答案 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]字符都不匹配。通过将检查作为循环的条件,这是最短的方法。如果失败,则将调用循环。