Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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.lang.NumberFormatException:对于输入字符串:"&引用;解析字符串表达式_Java_For Loop_Case - Fatal编程技术网

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

java.lang.NumberFormatException:对于输入字符串:"&引用;解析字符串表达式,java,for-loop,case,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.In

我试图解析一个字符串表达式(即“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)
有什么想法吗

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;
    }
}
公共静态双随机(字符串exp){
双素数结果=0;
对于(int i=0;i您的问题与
开关
/
大小写
无关。问题只是您试图将空字符串解析为一个数字。找出为什么会有空字符串,然后修复它。(提示:您希望
exp.substring(0,0)
返回什么?)

您还应该考虑代码< ExpExcel子字符串(I+1,I+1)< /C> >当<代码> i <代码> >代码> ExpReTh()- 1 < /代码>(或甚至<代码> ExpRelthTh)- 2 < /P> > < /P>

也请后退一步,考虑为什么你认为这是一个问题,代码<开关> <代码> >代码> CASE >代码>部分。查看堆栈跟踪-它甚至不在<代码>开关<代码> >代码> CASE <代码>语句中,但在它之前。d不要被不相关的部分分散注意力。

您的问题与
开关
/
大小写
无关。问题只是您试图将空字符串解析为一个数字。找出空字符串的原因,然后修复它。(提示:您希望
exp.substring(0,0)
返回什么?)

您还应该考虑代码< ExpExcel子字符串(I+1,I+1)< /C> >当<代码> i <代码> >代码> ExpReTh()- 1 < /代码>(或甚至<代码> ExpRelthTh)- 2 < /P> > < /P>

也请后退一步,考虑为什么你认为这是一个问题,代码<开关> <代码> >代码> CASE >代码>部分。查看堆栈跟踪-它甚至不在<代码>开关<代码> >代码> CASE <代码>语句中,但在它之前。d不要被不相关的部分分散注意力。

Jon Skeet通过非常好的诊断培训回答了你的问题

但是…我确实认为你解决问题的办法行不通

如果您在心里对代码进行跟踪,假设输入正确为“5+5”,那么循环将要做的第一件事是:

double left = Integer.parseInt(exp.substring(0,i));
double right = Integer.parseInt(exp.substring(i+1,i+2));
当i==0(第一次通过循环)时,这将转换为:

double left = Integer.parseInt(exp.substring(0,0));
double right = Integer.parseInt(exp.substring(0+1,0+2));
这将立即为
exp.substring(0,0)
获取一个“空字符串”,这将在您的问题中引发异常


哦,如果你在计算一个表达式,为什么你的函数被称为“random”呢?

Jon Skeet通过很好的诊断训练回答了你的问题

但是…我确实认为你解决问题的办法行不通

如果您在心里对代码进行跟踪,假设输入正确为“5+5”,那么循环将要做的第一件事是:

double left = Integer.parseInt(exp.substring(0,i));
double right = Integer.parseInt(exp.substring(i+1,i+2));
当i==0(第一次通过循环)时,这将转换为:

double left = Integer.parseInt(exp.substring(0,0));
double right = Integer.parseInt(exp.substring(0+1,0+2));
这将立即为
exp.substring(0,0)
获取一个“空字符串”,这将在您的问题中引发异常


哦,如果你在计算一个表达式,为什么你的函数被称为“random”?

我正在使用random(“5+5”)@user2297666:是的,但是你试图解析
exp.substring(0,I)
-包括
I
为0的时候。
Integer.parseInt(exp.substring(I+1,I+2))
@seeta:Yes,这也会是一个问题-但这不是导致原始异常的原因。我正在使用random(“5+5”)@user2297666:Yes从main调用该方法,但您正在尝试解析
exp.substring(0,I)
-包括
I
为0时。
Integer.parseInt(exp.substring(I+1,I+2))
@seeta:是的,这也会是一个问题-但这并不是导致原始异常的原因。除非您必须这样做,否则ScriptingEngine将以更少的行数和更可靠的方式为您实现这一点。您需要了解,即使在修复此问题时,此技术也会给出错误的答案,因为您没有处理运算符r优先级。您将其求值为
((6+10)*2)-5
,而不是
(6+(10*2))-5
。基本上这里没有与您描述的“试图解析字符串表达式”对应的内容。您所做的只是错误地扫描它。您需要查找
递归下降表达式解析
、Dijkstra“分流场算法”等,或使用@assylias建议的
脚本引擎
。除非您必须这样做,ScriptingEngine将以更少的行数和更可靠的方式为您实现这一点。您需要了解,即使在解决此问题时,此技术也会给出错误的答案,因为您没有处理运算符优先级。您将其评估为
((6+10)*2)-5
,而不是
(6+(10*2))-5
。基本上这里没有与您描述的“试图解析字符串表达式”相对应的内容。您所做的只是错误地扫描它。您需要查找递归下降表达式解析
、Dijkstra“分流场算法”等,或者使用@assylias建议的
ScriptingEngine