将包含具有多个操作数的数学表达式的String转换为int?

时间:2018-04-17 01:32:03

标签: java java.util.scanner

我正在创建这个迷你程序,为用户提供基本的数学问题,用户必须回答问题。我这样做是通过创建一个基本数学问题的数组,包含大约20个,用户输入答案的方式是通过扫描仪。

我的问题是我已经搜索并找到了将只有1个运算符和2个操作数的字符串转换为int的方法,但我一直在尝试修改它,以便程序可以转换具有多个部分的字符串进入一个int,但我不能。这就是我所拥有的

数组中的问题:

private String arithProb[] = {
    "40 + 20",
    "60 - 30 + 60",
    "2 * 7 + 40 - 20 + 20 -40"

};

这些只是20中的3个。第一个输出正确答案,即60,但其他输出结果来自前2个操作数和第一个操作符。 第二个问题只输出30.第三个问题只输出14.

这是我用来将字符串转换为int的代码。 我做错了什么或者我没做什么不能让完整的东西工作?

public static void solveBasicArithmetic(String prob, int ans){
    int cAns = evaluateQuestion(prob);

    System.out.println();
    if(ans == cAns){
        System.out.println("CORRECT!");
    }else if(ans != cAns){
        System.out.println("Oops, the correct answer is: " + cAns);
    }
    System.out.println();

}

public static int evaluateQuestion(String problem){
    Scanner sc = new Scanner(problem);
    int finalAns;

    do{
        //Get the next number from the Scanner
        int firstValue = Integer.parseInt(sc.findInLine("[0-9]*"));

        //Get everything which follows and is not a number (might contain white 
        spaces)

        String operator = sc.findInLine("[^0-9]*").trim();
        int secondValue = Integer.parseInt(sc.findInLine("[0-9]*"));

        switch(operator){
            case "+": 
                finalAns =+ firstValue + secondValue;
                return finalAns;

            case "-":
                finalAns =+ firstValue - secondValue;
                return finalAns;

            case "/": 
                finalAns =+ firstValue / secondValue;
                return finalAns;

            case "*": 
                finalAns =+ firstValue * secondValue;
                return finalAns;

            case "%": 
                finalAns =+ firstValue % secondValue;
                return finalAns;

            default: throw new RuntimeException("Unknown operator: " + operator);

        }

    }while(sc.findInLine("[0-9]*") != null);

}

0 个答案:

没有答案