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

これは、エラーに明確に記載されている空の文字列に関するエラーです。ここでは、「temp」変数の値が空です。空の文字列をDouble.parseDouble(temp)解析できません。そのため、例外がスローされています。機能させるには、この関数で解析可能な String の形式の float を指定します。

于 2013-03-22T04:13:21.560 に答える
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 に答える
0

適切な初期化でコードをテストし、正確な入力文字列をプッシュすると正常に動作しますが、FOR ループを追加しました。

上記の提案と同様に、問題は空の文字列を double に変換しようとしていることです。

double x = Double.parseDouble(temp);

于 2013-03-22T04:57:27.760 に答える
0

私はあなたがtempで間違っていたと思う..私はtempが空だと思う..

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 に答える