输入验证的布尔逻辑

Boolean logic for input validation

我有一种方法会继续循环,直到用户输入设定范围内的数字。基本上它读取 arraylist 上的大小,并验证用户输入是否大于 -1 且小于 arraylist 大小。但是,我似乎无法正确理解布尔逻辑,它仍然接受错误的数字或只有范围的一侧有效。这是代码

public void Verify()
{
    
    do {
        System.out.printf("Enter the number\n");
        while (!input.hasNextInt()) 
        {
            System.out.printf("Enter the number\n");
                            input.next();
        }
        choice = input.nextInt();
    } while (choice < 0 && choice >  mov.getArrayListSize());//<--- this part
    
}

问题来了

while (choice < 0 && choice >  mov.getArrayListSize());

这句话的意思是:一直循环直到 choice 的值既小于零又同时大于数组的大小。让我们看一些数字行:

xxxxxxxxxx
----------+---------+------------>   ... this shows a solution for choice < 0
          0         len

                     xxxxxxxxxxxx
----------+---------+------------>   ... this shows a solution for choice > len
          0         len


----------+---------+------------>   ... this shows a solution for the logical AND
          0         len

没有可能既小于零又大于数组长度的选择解。您几乎肯定要使用的是逻辑或,而不是与:

while (choice < 0 || choice >  mov.getArrayListSize());

数轴上的解是

xxxxxxxxxx           xxxxxxxxxxxx
----------+---------+------------>   ... this shows a solution for choice > len
          0         len

循环将继续,直到值落入 0-len 范围内,这似乎是您在这里需要的。