System.out.println("Enter a number: ");
String in1 = input.nextLine();
Integer input1 = Integer.valueOf(in1);
Float input2 = Float.parseFloat(in1);
Double input3 = Double.valueOf(in1).doubleValue();
System.out.println();
System.out.println("Enter another number: ");
String in2 = input.nextLine();
Integer input21 = Integer.valueOf(in2);
Float input22 = Float.parseFloat(in2);
Double input23 = Double.valueOf(in2).doubleValue();
FloatN fco = new FloatN();
System.out.println();
System.out.println("The sum of both of your numbers is: " + fco.add(input2, input22));
done = true;
我很清楚这个程序是完全不切实际的,我只是用它来练习解析,泛型和接口。我尝试了Integer,它运行良好,但在尝试Float和Double.add()函数时,我得到3个错误:
at java.lang.NumberFormatException.forInputString
at java.lang.Integer.parseInt
at java.lang.Integer.valueOf
我删除了整数解析器,程序工作正常。我很困惑,为什么我只在输入十进制值时才得到错误,并希望有人帮助指出导致异常的确切原因,以便将来可以避免任何类似的错误,并且因为删除整数解析器会删除IntegerN类的任何功能。
此外,如果有人因任何原因需要FloatN类:
public static class FloatN implements Summization<Float>{
public FloatN(){}
public Float add(Float a, Float b)
{
return a + b;
}
}
Summization是一个带有add()方法的通用接口。
提前致谢。
答案 0 :(得分:2)
如果输入十进制值作为输入,Integer.parseInt()
方法将无法解析它。如果您仍希望在代码中全部使用它们,则必须获得该Float
值的int值。您可以使用intValue()
方法:
Float input2 = Float.parseFloat(in1);
Integer input1 = Integer.valueOf(input2.intValue());
答案 1 :(得分:1)
因为Integer.valueOf(in2);
这一行会给出float
和double
的NumberFormatException,你可以使用
Number num = NumberFormat.getInstance().parse(myNumber);
请参阅@ http://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html
答案 2 :(得分:1)
也许添加不包含可解析的float的字符串或者它是null。
NullPointerException - if the string is null
NumberFormatException - if the string does not contain a parsable float.
答案 3 :(得分:0)
NumberFormatException出现在Integer解析器中,如果输入包含decimal,则不在Double和Float解析器中。
在这种情况下,您可以使用split获取十进制数的整数部分并解析:
String[] s = in1.split("\\.");
Integer input1 = Integer.valueOf(s[0]);
Float input2 = Float.parseFloat(in1);
Double input3 = Double.valueOf(in1).doubleValue();