如何解决“错误:二进制运算符'||'的错误操作数类型“在Java中

时间:2019-02-02 00:42:22

标签: java

我想在输入正确后结束循环。

它与注释中的代码一起使用,但是在我使用时不起作用 ||操作员。第一个与第二个相等吗?

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');

在两种情况下,我都希望在输入正确后结束循环。

2 个答案:

答案 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')))