0

线程“AWT-EventQueue-0”java.lang.NumberFormatException 中的异常:对于输入字符串:java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) 处 java.lang.Integer.parseInt(Integer.java) 处的“1.0” :458) 在 java.lang.Integer.parseInt(Integer.java:499) 在 newform.fivth.(fivth.java:150) 在 newform.fivth$3.run(fivth.java:623) 在 java.awt.event .InvocationEvent.dispatch(InvocationEvent.java:209) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:597) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 在 java.awt.EventDispatchThread.pumpEventsForFilter( EventDispatchThread.java:184) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 在 java.awt.EventDispatchThread。pumpEvents(EventDispatchThread.java:169) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

这是错误所指的代码部分:

while (results4.next())
{
for(int i=1;i<=12;i++)
            {
         x.add(Integer.parseInt(results4.getString(i))+0.5);       

            }  

}
}
catch(SQLException sqlEx){
System.out.println(
"* Error retrieving data! *");
sqlEx.printStackTrace();
System.exit(1);
} 
4

1 回答 1

2

根据 Java,字符串"1.0"不能表示为int,但可以表示为double。的解析逻辑Integer.parseInt期望没有小数点,即使小数点后只有一个零。

引用JavadocInteger.parseInt

将字符串参数解析为有符号十进制整数。字符串中的字符必须都是十进制数字,除了第一个字符可以是ASCII减号'-'('\u002D')表示负值或ASCII加号'+'('\u002B')表示正值。

它不需要小数点。

如果您必须接受String诸如"1.0"并存储结果int,那么我会将其解析为Doublethen call intValue。而不是以下内容:

Integer.parseInt(results4.getString(i))

我会用这个:

Double.valueOf(results4.getString(i)).intValue()

当然,您必须使该值确实是整数。有关这些详细信息,请参阅此 SO question

于 2013-05-10T19:15:14.120 回答