2014-12-10 68 views
0
System.out.print("Enter operation to perform (+ OR - OR * OR /):"); 
     operator= userInput.next(); 

我希望如果输入+, - ,*或/,它接受该值,如果输入了其他内容,则重复该问题。在进入四个操作员之一之前,它保持循环。我将如何验证此Java代码?

我曾尝试:

while (!operator.equals("-") ||operator.equals("+") || operator.equals("*") || operator.equals("/")) 
    { 
     System.out.print("Enter operation to perform (+ OR - OR * OR /):"); 
     userInput.next(); 
    } 
    operator = userInput.next(); 

,但它不工作。有什么建议么?由于

+1

'operator'是一个String还是'double'?如果它是'String',你为什么要用'nextDouble()'分配它? – azurefrog 2014-12-10 23:23:22

回答

0

你试图否定整个状态,但!运营商只对第一个操作数,它的连接到工作,因为!has a higher precedence||(和&&)。

您可以添加明确的括号,表示需要否定整个表达式。

while (!(operator.equals("-") || operator.equals("+") || 
      operator.equals("*") || operator.equals("/"))) 

作为替代方案,你也可以否定每一个人支票,小心翼翼地切换到“和”运营商(而不是“ - ”,而不是“+”和...)

while (!operator.equals("-") && !operator.equals("+") && 
     !operator.equals("*") && !operator.equals("/")) 

此外,在while循环中,将next()的结果赋给运算符,以便您可以再次检查它,就像您在代码顶部完成一样。

operator = userInput.next(); 

而且,你可能打算调用nextDouble()归还给被分配到另一个变量除了operator(一String)。

+0

我已更新代码以使用第一个选项。 System.out.print(“输入要执行的操作(+ OR - 或* OR /):”); \t \t operator = userInput.next(); \t \t while(!(operator.equals(“ - ”)|| operator.equals(“+”)|| operator.equals(“*”)|| operator.equals(“/”))) \t System.out.print(“输入要执行的操作(+ OR - 或* OR /):”); \t \t userInput.next(); \t \t} – Adam 2014-12-10 23:35:06

+0

但是,发生这种情况: 请输入第一数目:66 输入操作来执行(+或 - OR * OR /):d 输入操作来执行(+或 - OR * OR /):+ 输入操作以执行(+ OR - 或* OR /): – Adam 2014-12-10 23:36:07

+0

您不会将下一个输入分配给'operator'。正如我在上面的回答中所述,在'while'循环中,将调用的结果分配给'next()'到'operator'。 – rgettman 2014-12-10 23:37:26