Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在简单计算器中验证数学运算符_Java - Fatal编程技术网

Java 在简单计算器中验证数学运算符

Java 在简单计算器中验证数学运算符,java,Java,我需要帮助验证计算器程序中的运算符,要求用户输入两个数字和一个运算符,即3+2,但我无法验证运算符。如果用户输入+、-、*、或/运算符,它会告诉我该输入无效。验证第一个数字很好,没有问题。有人能帮忙吗 import java.util.Scanner; public class SimpleCalculator { public static void main(String[] args) { int int1; String operator;

我需要帮助验证计算器程序中的运算符,要求用户输入两个数字和一个运算符,即3+2,但我无法验证运算符。如果用户输入+、-、*、或/运算符,它会告诉我该输入无效。验证第一个数字很好,没有问题。有人能帮忙吗

import java.util.Scanner;
public class SimpleCalculator {

    public static void main(String[] args) {
        int int1;
        String operator;
        int int2;

        Scanner scan = new Scanner(System.in);

        System.out.print("Enter first number: ");

        while(!scan.hasNextInt()){
            scan.next();
            System.err.print("Invalid input please enter a number: ");
        }

        int1 = scan.nextInt();

        System.out.println("Enter operator (+, -, *, /): ");

        while(!scan.equals("+") && !scan.equals("-") && !scan.equals("*") && !scan.equals("/")){
                scan.next();
            System.err.print("Invalid input please enter a valid operator (+, -, *, /");
        }

        operator = scan.next();

        System.out.println("Enter second number: ");


        scan.close();
    }

}

我建议使用字符类型,因为我们只阅读一封信。这应该做到:

Scanner reader = new Scanner(System.in);
char c = reader.nextChar();

if(c == '+' || c == '-' || c == '/' || c == '*') {
      //operation
}else{
      //Error message
}

Scanner
不实现
equals()
,因此您正在进行身份比较,而
Scanner
永远不等于字符串文字

改为使用此循环:

while(!scan.hasNext("[+\\-*/]")){

仅供参考:您的“跳过”调用应该是
scan.nextLine()
,而不是
scan.next()
,因此该行上的所有输入都将被忽略。

您需要检查scan.next()的输出,而不是scan的输出

    System.out.println("Enter operator (+, -, *, /): ");
    operator = scan.next();
    while(!operator.equals("+") && !operator.equals("-") && !operator.equals("*") && !operator.equals("/")) {
        System.err.println("Invalid input please enter a valid operator (+, -, *, /");
        operator = scan.next();
    }
你的错误在这里:

while(!scan.equals("+") && !scan.equals("-") && !scan.equals("*") && !scan.equals("/"))
equals()
方法在调用该方法的对象和作为参数传入该方法的对象之间执行比较

例如,语句
if(myString.equals(anotherString))
myString
对象与
anotherString
对象进行比较

由于
scan
是您的
扫描仪的名称,因此当您写入
scan.equals(“+”)
时,您正在比较您的
扫描仪是否等于
字符串(
“+”)。这是不可能的

最容易理解的解决方案是将用户输入的下一个
字符串
放入变量中,然后检查该变量是否包含运算符

示例

String operator = scan.next();

while(!operator.equals("+") && !operator.equals("-") 
      && !operator.equals("*") && !operator.equals("/")) {   
    operator = scan.next();
    System.err.print("Invalid input please enter a valid operator (+, -, *, /");
}
其他答案将帮助您进一步改进代码。我只是想向您展示对代码所做的最小更改,以解决您的特定问题。:)


当(!scan.equals(“+”&&!scan.equals(“-”&!scan.equals(“*”&!scan.equals(“/”){

您正在将
扫描仪
字符串
进行比较时,请使用此代码。它们是不同的类型,因此永远不会相等。请使用
scan.hasNext()
scan.next()
要获取下一个字符串输入,请使用与整数值相同的方法。
while(!scan.hasNext("[*+/-]")){