0

我有这个表达式,例如: 400 2.11 + 我尝试将实数推入堆栈,当我这样做时,它会在这部分代码中显示错误

ch = input.charAt(j);
if (ch >= '0' && ch <= '9' || ch == '.')
    temp = temp + ch;

else if (ch == ' ') {
    x = Double.parseDouble(temp);
    theStack.push(x);
    temp = "";
}
else {

...

public void push(double j) {
        stackArray[++top] = j;
    }

这是消息

Exception in thread "main" java.lang.NumberFormatException: empty String
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1011)
    at java.lang.Double.parseDouble(Double.java:540)
    at ParsePost.doParse(ParsePost.java:26)
    at InfixApp.main(InfixApp.java:21)
4

5 回答 5

1

如果您知道数字之间的分隔符,也许您可​​以使用该split(String regex)功能。在这种情况下,一旦您指定了分隔符,您的职责就是检查String[]返回的split并找到算术符号。

我写了这个简单的类来测试我所说的:

import java.util.ArrayList;

public class StringParsing {

    public static void main(String[] args) {
        //Simple string to split
        String str = "444 6.12 +";
        String[] values = str.split(" ");
        ArrayList<Double> arr = new ArrayList<Double>();
        for(int i = 0; i < values.length; i++) {
            //I check only for +
            if(!values[i].contains("+")) {
                Double d = Double.parseDouble(values[i]);
                arr.add(d);
            }
        }
        for(int i = 0; i < arr.size(); i++)
            //Add 1 to number for verify the correctness
            System.out.println("Double: "+(arr.get(i)+1.0));
    }
}
于 2013-03-22T08:42:54.747 回答
1

这是一个关于空字符串的错误,错误中明确提到了。这里“temp”变量的值为Double.parseDouble(temp)空。并且无法解析空字符串。所以它抛出了一个异常。要让它工作,你必须给出一个字符串形式的浮点数,该函数可以解析为这个函数。

于 2013-03-22T04:13:21.560 回答
0

我已经用正确的初始化测试了你的代码,并推送了确切的输入字符串,它工作正常,不过我添加了一个 FOR 循环。

就像上面的建议一样,问题是您正在尝试将空字符串转换为双精度。

双 x = Double.parseDouble(temp);

于 2013-03-22T04:57:27.760 回答
0

我认为你的温度有问题..我认为温度是空的..

if(temp.trim().length()>0){
   x = Double.parseDouble(temp);
   theStack.push(x);

}
于 2013-03-22T04:14:08.087 回答
0
ch = input.charAt(j);
                    if (ch >= '0' && ch <= '9' || ch == '.')
                        temp = temp + ch;

                    else if (ch == ' ') {
                        if (null != temp && temp.trim().length()>0) {
                            x = Double.parseDouble(temp.trim());
                        }
                        else
                        {
                            //Case where string is empty
                        }
                        theStack.push(x);
                        temp = "";
                    }

试试这个希望它有帮助。

于 2013-03-22T04:15:55.613 回答