第一次正确执行,但是:
我不确定!=是否适合用于字符串比较。我想说 loopChoice“不是”Y或N,继续问。
while(isLoop) {
// Ask for user input
System.out.print("Enter hours worked: ");
hoursWorked = scn.nextInt();
System.out.print("Enter rate per hour: ");
payRate = scn.nextInt();
scn.nextLine();
// Call functions to compute stuff
...
// Print results
...
System.out.print("\nDo you want to continue (Y/N)? ");
loopChoice = scn.nextLine().toUpperCase();
while(loopChoice != "Y" || loopChoice != "N") {
System.out.print("\nPlease try again (Y/N)? ");
loopChoice = scn.nextLine().toUpperCase();
}
switch(loopChoice) {
case "Y":
isLoop = true;
System.out.print("\n");
break;
case "N":
isLoop = false;
System.out.println("Terminating program...");
scn.close();
System.exit(0);
break;
default:
System.out.println("Your input is invalid!");
isLoop = false;
System.out.println("Terminating program...");
scn.close();
System.exit(0);
break;
}
}
答案 0 :(得分:2)
您应该与String equals
进行比较while (!loopChoice.equals("Y") && !loopChoice.equals("N"))
另外,用和运算符
替换或运算符答案 1 :(得分:1)
这不是你如何比较Java中的字符串。
您的代码中也存在逻辑错误,因为字符串不能同时为Y和N,您必须使用&&
而不是||
。只要选择既不是Y也不是N,您希望继续循环。如果是其中任何一个,你想停下来。所以&&
是正确的选择。
要检查两个字符串是否相等,您必须使用.equals(obj)
while (!loopChoice.equals("Y") && !loopChoice.equals("N")) {
原因是==
比较对象引用,两个字符串通常不是同一个对象引用。 (从技术上讲,它们可以是相同的对象引用,但现在不需要担心)为安全起见,请使用.equals
来比较字符串。
要避免在其他情况下可能NullPointerException
,您还可以使用:
while (!"Y".equals(loopChoice) && !"N".equals(loopChoice)) {
答案 2 :(得分:1)
您不能使用loopChoice != "Y"
,因为“Y”是一个字符串。使用:
loopChoice != 'Y'
或"Y".equals(loopChoice)
或者,使用"Y".equalsIgnoreCase(loopChoice)
。
如果您使用Java 1.6或更早版本,则无法对字符串进行大小写切换。小心。
答案 3 :(得分:1)
如果其中一个条件是 true ,您需要知道OR
操作将返回 true ,所以如果您输入Y
,则逻辑上,so you ask if the input is not equal Y
所以答案是 false ,那么你将转到条件if the input not equal N
的下一部分,所以答案是 True ,所以你的最终结果将是( True || False = True),然后你会再次进入while循环
所以真实条件是(输入不等于Y&& not equal N )
答案 4 :(得分:1)
在检查对象的平等与对象的值之间,你已经陷入了共同的早期差距。 (您可以看到字符串比较信息的快速列表[此处] (http://docs.oracle.com/javase/tutorial/java/data/comparestrings.html)
您所写的内容询问对象 loopChoice 是否与字符串常量“Y”相同,或者字符串常量“N”是否始终返回false。您想询问对象loopChoice的值是否与字符串常量“Y”的值相同。
您可以按如下方式重写代码:
System.out.print("\nDo you want to continue (Y/N)? ");
// get value of next line, and trim whitespace in case use hit the spacebar
loopChoice = scn.nextLine().trim();
while (!("Y".equalsIgnoreCase(loopChoice) || "N".equalsIgnoreCase(loopChoice)) {
System.out.print("\nPlease try again (Y/N)? ");
loopChoice = scn.nextLine().toUpperCase();
}
注意,为了清晰起见,我想先将常数值放在第一位。确定两个字符串的值是否相同的一般形式是String1.equalsIgnoreCase(String2)。