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()
,这是一个很好的建议,因为它更容易阅读,除非我把它改为!包含()
,以保留意图。