我想从用户那里得到1或2的输入,如果他不符合正确的答案,则再次提示用户输入答案。
我尝试使用while循环:
int players = 0;
players = sc.nextInt();
while (players != 1 || players != 2)
{
System.out.println("Wrong input, choose again:");
players = sc.nextInt();
System.out.println(players);
}
和do-while:
do
{
players = sc.nextInt();
}
while (players != 1 || players!= 2);
但即使输入正确的数字,循环也不会退出。
这个逻辑过去常用于C中的scanf。
答案 0 :(得分:2)
players != 1 || players != 2
这种情况总是如此。 ||
表示or
。因此,如果两个操作数中至少有一个为真,则表达式为真
players != 2
为真,那么整个表达式为真players != 1
为真,那么整个表达式为真您需要&&
,而不是||
。
答案 1 :(得分:1)
players != 1 || players!= 2
始终为true,应为players != 1 && players!= 2
。我严重怀疑这个错误的逻辑与C一起工作!
如果您对布尔代数有所了解,则必须知道not(not(A) or not(B)) <=> A and B
。在你的情况下,这意味着你的条件的否定(对于循环退出必须是真的)是players == 1 && players == 2
,这是不可能的。