扫描仪在while循环中,循环不会退出

时间:2014-09-28 11:16:02

标签: java loops while-loop java.util.scanner

我想从用户那里得到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。

2 个答案:

答案 0 :(得分:2)

players != 1 || players != 2

这种情况总是如此。 ||表示or。因此,如果两个操作数中至少有一个为真,则表达式为真

  • 如果玩家为1,那么players != 2为真,那么整个表达式为真
  • 如果玩家为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,这是不可能的。