java.lang.NumberFormatException:对于输入字符串:""解析字符串表达式

use*_*666 1 java for-loop case

我正在尝试解析字符串表达式(即"6 + 10*2-5")并使用for-case语句将答案计算为double.但是我收到错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:470)
    at java.lang.Integer.parseInt(Integer.java:499)
    at Calculator.random(Calculator.java:50)
    at Calculator.main(Calculator.java:210)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

public static double random(String exp) {
    double primeResult = 0;
    for (int i=0; i<exp.length();i++) {
        double left = Integer.parseInt(exp.substring(0,i));
        double right = Integer.parseInt(exp.substring(i+1,i+2));
        switch(exp.charAt(i)) {
            case '*':
            primeResult = left * right;
            break;
        case '/':
            primeResult = left / right;
            break;
        case '+':
            primeResult = left + right;
            break;
        case '-':
            primeResult = left - right;
            break;
        default:
            return 0;
        }
        System.out.println(primeResult);
        }
        return primeResult;
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 8

你的问题与/ 无关.问题只是你试图将空字符串解析为数字.弄清楚为什么你有一个空字符串,然后修复它.(提示:你期望什么回来?)switchcaseexp.substring(0, 0)

你也应该考虑你所期望的exp.substring(i+1,i+2)返回时iexp.length() - 1(甚至exp.length() - 2).

另外,退一步考虑为什么你认为这是switch/ casepart 的问题.查看堆栈跟踪 - 它甚至不在switch/ case语句中,而是在它之前.能够诊断错误实际发生的位置非常重要,因此您可以专注于此而不会被不相关的部分分散注意力.