Java 使用while循环验证输入

Java 使用while循环验证输入,java,validation,input,Java,Validation,Input,我想让用户只输入“y”、“y”、“n”或“n”。结果代码要求用户在输入正确的输入时输入Y或N,这与我所期望的相反!在输入前面。EqualCaseIgnore(输入) 这是您的或条件,您必须将其更改为和 while (!Input.equalsIgnoreCase("Y") && !Input.equalsIgnoreCase("N")) 大声朗读有助于理解逻辑: 输入不等于(忽略大小写)“Y”和输入不等于(忽略大小写)“N”这是您的或条件,您必须将其更改为和 while (!

我想让用户只输入“y”、“y”、“n”或“n”。结果代码要求用户在输入正确的输入时输入Y或N,这与我所期望的相反!在输入前面。EqualCaseIgnore(输入)



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

while (!Input.equalsIgnoreCase("Y") && !Input.equalsIgnoreCase("N"))
大声朗读有助于理解逻辑:


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

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

while (!Input.equalsIgnoreCase("Y") && !Input.equalsIgnoreCase("N"))
大声朗读有助于理解逻辑:


虽然输入不等于(忽略大小写)“Y”和输入不等于(忽略大小写)“N”

我的代码逻辑不可靠,但我相信问题出在| |操作数上


其中一个答案总是错误的,因此它无法正确进入循环。

我的代码逻辑已经生锈,但我相信问题出在| |操作数上


其中一个答案总是错误的,因此它不会正确地进入循环。

你的布尔逻辑就是让你在这里死里逃生的原因

while (!Input.equalsIgnoreCase("Y") || !Input.equalsIgnoreCase("N"))
当输入不是Y而不是N时,您希望处于循环中,因此需要将其更改为

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

你的布尔逻辑让你在这里丧命

while (!Input.equalsIgnoreCase("Y") || !Input.equalsIgnoreCase("N"))
当输入不是Y而不是N时,您希望处于循环中,因此需要将其更改为

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

要详细说明@gtgaxiola的答案:

!Input.equalsIgnoreCase("Y") || !Input.equalsIgnoreCase("N")
假设
输入
“Y”
|
的左操作数是
false
,因为
Input
等于
“Y”
。但是右操作数是
true
,因为
Input
不等于
“N”
。而
false | | | true
true
,因为每当任一操作数为
true
时,
|
的结果都是
true
。事实上,无论输入是什么,这个表达式总是
true

这就是为什么需要使用
&&

!Input.equalsIgnoreCase("Y") && !Input.equalsIgnoreCase("N")
因为您希望结果为
true
仅当两个
equalsIgnoreCase
调用都返回
false

或者,你可以说

! (Input.equalsIgnoreCase("Y") || Input.equalsIgnoreCase("N"))
另请参见关于的这篇文章


(顺便说一句,Java中的惯例是使用以小写字母开头的名称作为变量,即
输入

详细说明@gtgaxiola的答案:

!Input.equalsIgnoreCase("Y") || !Input.equalsIgnoreCase("N")
假设
输入
“Y”
|
的左操作数是
false
,因为
Input
等于
“Y”
。但是右操作数是
true
,因为
Input
不等于
“N”
。而
false | | | true
true
,因为每当任一操作数为
true
时,
|
的结果都是
true
。事实上,无论输入是什么,这个表达式总是
true

这就是为什么需要使用
&&

!Input.equalsIgnoreCase("Y") && !Input.equalsIgnoreCase("N")
因为您希望结果为
true
仅当两个
equalsIgnoreCase
调用都返回
false

或者,你可以说

! (Input.equalsIgnoreCase("Y") || Input.equalsIgnoreCase("N"))
另请参见关于的这篇文章


(顺便说一句,Java中的惯例是使用以小写字母开头的名称作为变量,即
input

以下是跟踪代码的好工具:

以下是跟踪代码的绝佳工具:

问题是如果用户输入N,那么!如果用户输入Y,那么!equalsIgnoreCase(“N”)变为真,所以它总是进入内部,而问题是,若用户输入N,那个么!如果用户输入Y,那么!equalsIgnoreCase(“N”)变为真,所以它总是进入while的内部