我想让用户只输入" 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();
}
}
答案 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 || true
为true
,因为只要任一操作数为||
,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/#