Java 而循环在我的程序中不能正常工作

Java 而循环在我的程序中不能正常工作,java,loops,while-loop,Java,Loops,While Loop,我想让用户插入运算符并得到答案,直到用户输入除+、-、*或\以外的键。我这样做了程序。但它不会正常工作。它甚至会循环其他键。编码有什么问题 public static void main(String Args[]) throws IOException { InputStreamReader myrdr=new InputStreamReader(System.in); BufferedReader myBfr=new BufferedReader(myrdr); S

我想让用户插入运算符并得到答案,直到用户输入除+、-、*或\以外的键。我这样做了程序。但它不会正常工作。它甚至会循环其他键。编码有什么问题

public static void main(String Args[]) throws IOException
{

    InputStreamReader myrdr=new InputStreamReader(System.in);
    BufferedReader myBfr=new BufferedReader(myrdr);
    Scanner myScanner=new Scanner(System.in);

    String mathOp;
    float Res,Num1,Num2;


    System.out.print("Mathematical Operator :");
    mathOp=myBfr.readLine();




    Res=0;
    while(mathOp!="+"||mathOp!="-"||mathOp!="*"||mathOp!="\\")
    {
        System.out.print("Enter number one: ");
        Num1=myScanner.nextInt();

        System.out.print("Enter Number Two: ");
        Num2=myScanner.nextInt();

        switch(mathOp)
        {
            case "+":
                Res=Num1+Num2;
                break;

            case "-":
                Res=Num1-Num2;
                break;
            case "\\":
                Res=Num1/Num2;
                break;
            case "*":
                Res=Num1*Num2;
                break;

            default:
            {
                System.out.println("Programme Exits");
                return;
            }
        }

        System.out.println("Answer is : "+Res);
        System.out.print("Mathematical Operator :");
        mathOp=myBfr.readLine();

    }



}

这样做你的while循环

while(mathOp.equals("+") || mathOp.equals("-") || 
mathOp.equals("//") || mathOp.equals("*"))
使用
String.equals()
来比较Java中的字符串,而不是
=
=。为了解释更多,您不应该使用
==
=在Java中比较字符串值时,因为它们检查右操作数和左操作数中的值是否相等。i、 如果是字符串对象,则为内存地址,对于两个不同的对象,该地址将不相等。您可以使用
==
=代码。还有一个称为
String常量池
的概念,它使用
assignment操作符
创建编译时字符串常量,如
String new=“new”新的
操作符,可以使用
=
进行比较=

不要使用
=
(如果两个操作数是相同的字符串对象,则进行比较;如果两个字符串对象的内容相同,则进行比较)

但更好的是,将代码简化为:

while (!"+-*\\".contains(mathOp))

顺便说一句,除法通常是正常的斜杠
/
,而不是反斜杠
\

你必须使用这样的东西


而(!mathOp.equals(“+”)|(!mathOp.equals(“-”)|(!mathOp.equals(“*”)|(!mathOp.equals(“\”))

首先你应该知道|和&& True | | False返回True True | False | False | False返回True,一个True就足以使条件返回True,无论有多少False 所以在你的例子中,你是说如果输入与其中一个不同,就让它继续,如果你有+它就会输入,因为+不同于-。您应该改为使用&

True&&False返回False True&&True&&True&&False返回False。不管你有多少个真的,一个假就足以返回假。 如果使用&&则仅当所有子条件都为true时,您才会告诉条件返回true,即它不同于+和不同于-和不同于*和不同于


此外,将“+”替换为“+”,因为后者是字符,而前者是字符串只能用于字符、数字和布尔值。要比较字符串,您应该使用.equals(“x”)

,它应该是和(
&&
)和或(
|
)之间的区别,而不是可能的重复。您还需要学习如何比较字符串。如果
mathOp
+
,则
“+-*\\”的结果。indexOf(“+”
)将是
0
,因为字符串
“+-*\\”
的第一个索引处有一个
+
。通过
0<0
进行比较将导致跳出循环。如果
indexOf
在字符串中找不到
mathOp
,它将返回
-1
,因此它将继续循环。所以,最后。。。像
“+-*\\”.indexOf(mathOp)>-1
或更好的
“+-*\\”.contains(mathOp)
?bobbel OP的代码正在测试
=,所以我的逻辑是正确的,但是你建议使用
contains()
,这是一个很好的建议,因为它更容易阅读,除非我把它改为
!包含()
,以保留意图。