我正在研究一個程序,它將給定的字符串評估爲給定x值的數學函數。我目前遇到如下所列的錯誤:Java基於java.lang.NumberFormatException的錯誤,涉及某種「無限」值
Exception in thread "main" java.lang.NumberFormatException: For input string: "-Infinity3"
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
at function.operateMD(function.java:212)
at function.evaluate(function.java:39)
at Graph.draw(Graph.java:127)
at Graph.main(Graph.java:22)
我不確定爲什麼我收到此錯誤。發送到該方法的字符串是"3x-1"
我的代碼基本上採用了字符串,將它分解爲一個索引的字符串,判斷每個數字的數值(即運算符,變量等)並運行一系列方法來簡化函數,然後在給定的x值下評估它。在發生錯誤的方法(function.operateMD)是在這裏:
public static void operateMD()
{
double tempPROD=0;
double tempP1=0;
double tempP2=0;
for(int h=0;h<parts.size();h++)
{
if(types.get(h).equals("opr"))
{
tempP1=Double.parseDouble(parts.get(h-1));
tempP2=Double.parseDouble(parts.get(h+1));
if(parts.get(h).equals("*"))
{
tempPROD=tempP1*tempP2;
parts.remove(h+1);
parts.set(h-1, String.valueOf(tempPROD));
parts.remove(h);
types.remove(h+1);
types.set(h-1, "num");
types.remove(h);
}
else if(parts.get(h).equals("/"))
{
tempPROD=tempP1/tempP2;
parts.remove(h+1);
parts.set(h-1, String.valueOf(tempPROD));
parts.remove(h);
types.remove(h+1);
types.set(h-1, "num");
types.remove(h);
}
//end of if operator conditional
}
else if((h!=parts.size()-1)&&((types.get(h).equals("num"))&&types.get(h+1).equals("num")))
{
tempP1=Double.parseDouble(parts.get(h));
tempP2=Double.parseDouble(parts.get(h+1));
tempPROD=tempP1*tempP2;
parts.remove(h+1);
parts.set(h, String.valueOf(tempPROD));
types.remove(h+1);
types.set(h, "num");
}
//end loop to go through each part of arraylist
}
//end of method
}
注意,「份」是單指數字符串值的ArrayList,和「類型」是每個的「份的該ArrayList 「的數學價值。
這是我在這裏發佈的第一個編程問題,所以我希望我已經提供了足夠的信息。
看起來你需要調試你的代碼。這是你應該做的,而不是我們,如果你不知道如何,現在是學習的好時機。請參閱:[什麼是調試器,它如何幫助我診斷問題?](http://stackoverflow.com/q/25385173/5221149) – Andreas
謝謝@Andreas我會試試看看我能否解決問題 – 2rtmar