我想在输入正确后结束循环。
它与注释中的代码一起使用,但是在我使用时不起作用 ||操作员。第一个与第二个相等吗?
public static void main(String[] args)
{
char group, response;
Scanner sc=new Scanner(System.in);
do
{
System.out.println();
System.out.println("[1] Time for group A");
System.out.println("[2] Time for group B");
System.out.println("[3] Time for group C");
System.out.println("[4] Quit program");
System.out.print("Enter choice[1,2,3,4]: ");
response=sc.next().charAt(0);
System.out.println();
switch(response)
{
case '1': System.out.println("10.00 a.m ");break;
case '2': System.out.println("1.00 a.m ");break;
case '3': System.out.println("11.00 a.m ");break;
case '4': System.out.println("Goodbye! ");break;
default: System.out.println("Options 1-4 only!");
}
} //while(response!='4'&&response!='3'&&response!='2'&&response!='1');
while(response=='4'||response=='3'||response=='2'||response=='1');
在两种情况下,我都希望在输入正确后结束循环。
答案 0 :(得分:1)
要直接回答有关while循环条件的问题(两个条件是否相等?):
不,它们并不等效,但这只是一个很小的变化。下面的两个条件是等价的由DeMorgan's Law
boolean b1 = (response != '4' && response != '3' && response != '2' && response != '1');
// (note: I corrected what looked like a typo here ^^)
boolean b2 = !(response == '4' || response == '3' || response == '2' || response == '1');
因此,基本上,您必须在第二个while循环条件之前添加一个!
才能使它们等效(假设在第一个条件中确实是一个错字)。
(注意:尽管您仍然需要在while循环括号内包含!
,所以它看起来像while (!(...))
)
答案 1 :(得分:0)
很好的Java运算符优先级打中了您。使用花括号:
while((response=='4')||(response=='3')||(response=='2')||(response=='1'))
说明:
char类型的文字(如“ 1”)是整数。 现在,java将代码评估为某种奇怪的原因,例如“((... || response)== ...”),并抱怨,因为“ response”是一个字符而不是布尔值。如果使用花括号,则确保先评估单调,然后确保“ ||”获取布尔值作为操作数。我的看法是:在上述情况下,您不应该得到错误-但是,只要使用花括号,错误就应该消失。
此外,表达式也不相等。通过获取每个monom和整个结构来切换运算符,可以得到等效结果。 以下等同于以上内容或:
while(!((response!='4')&&(response!='3')||(response!='2')&&(response!='1')))