使用while循环验证输入

时间:2014-10-17 17:19:19

标签: java validation input

我想让用户只输入" y" " Y" " N"或" N"。生成的代码要求用户在输入正确的输入时输入Y或N,这与我预期的放置相反!在input.equalscaseignore(输入)前面。


import java.util.Scanner;


class inputVal {

    public static void main(String[] args) {
        String Input;
        Scanner keyboard = new Scanner(System.in);

        System.out.println("Please enter Y or N. ");
        Input = keyboard.nextLine();

        while (!Input.equalsIgnoreCase("Y") || !Input.equalsIgnoreCase("N"))
        {
            System.out.println("Please enter Y or N");
            Input = keyboard.nextLine();

        }


        keyboard.close();
    }

}

5 个答案:

答案 0 :(得分:6)

这是or条件,您必须将其更改为and

while (!Input.equalsIgnoreCase("Y") && !Input.equalsIgnoreCase("N"))

大声读出来有助于理解逻辑:

WHILE输入不相等(忽略大小写)“Y” AND 输入不等于(忽略大小写)“N”

答案 1 :(得分:2)

详细说明@ gtgaxiola的回答:

!Input.equalsIgnoreCase("Y") || !Input.equalsIgnoreCase("N")

假设Input"Y"||的左操作数为false,因为Input等于"Y"。但右侧操作数为true,因为Input不等于"N"false || truetrue,因为只要任一操作数为||true的结果为true。实际上,无论true是什么,此表达式始终为Input

这就是你需要使用&&

的原因
!Input.equalsIgnoreCase("Y") && !Input.equalsIgnoreCase("N")

因为只有当 true来电都返回equalsIgnoreCase时,您才希望结果为false

或者,你可以说

! (Input.equalsIgnoreCase("Y") || Input.equalsIgnoreCase("N"))

另见DeMorgan's Laws上的这篇文章。

(顺便说一句,Java中的约定是使用以小写字母开头的变量名称,即input。)

答案 2 :(得分:1)

你的布尔逻辑是什么在这里杀了你

while (!Input.equalsIgnoreCase("Y") || !Input.equalsIgnoreCase("N"))

当输入不是Y而不是N时,您希望处于循环中,因此需要将其更改为

while (!Input.equalsIgnoreCase("Y") && !Input.equalsIgnoreCase("N"))

答案 3 :(得分:0)

我的代码逻辑很生疏,但我相信问题出在||中操作数。

其中一个答案总是假的,因为它不会正确进入循环。

答案 4 :(得分:0)

以下是使用以下内容跟踪代码的绝佳工具: http://cscircles.cemc.uwaterloo.ca/java_visualize/#