我正在研究一个程序,它将给定的字符串评估为给定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