我正在尝试将从键盘获取的字符串值转换为int值。我以前做过这样的事情,但现在我收到的错误是NumberFormatException.forInputString
Scanner input = new Scanner(System.in);
String choice = "";
int numberChoice;
System.out.println("Please select one of the following options");
choice = input.nextLine();
numberChoice = Integer.parseInt(choice); /*I am getting the error on this line*/
输入代码为:
Data[] temperatures = new Data[7];
for(int i = 0; i < temperatures.length; i++)
{
System.out.println("Please enter the temperature for day " + (i+1));
temperatures[i] = new Data(input.nextDouble());
}
答案 0 :(得分:1)
您可以使用numberChoice = input.nextInt();
代替choice = input.nextLine();
,然后将字符串转换为整数
答案 1 :(得分:0)
确保您不会在输入行中意外输入空格或非数字字符。我运行了你的代码片段,它运行得很好。
Please select one of the following options
6546a
Exception in thread "main" java.lang.NumberFormatException: For input string: "6546a"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at PrimeNumbers.main(PrimeNumbers.java:12)
答案 2 :(得分:0)
这应该可以正常工作,假设您输入的内容可以解析为int。 在try块中包装违规行并输出错误和选择的内容以查看出现了什么问题
例如,试试这个:
try {
numberChoice = Integer.parseInt(choice);
}
catch (NumberFormatException nfe){
System.out.println("Failed to parse: ##"+choice+"##"); // mark off the text to see whitespace
}
在我的机器上,这会产生
/Users/jpk/code/junk:521 $ java SO
Please select one of the following options
two
Failed to parse: ##two##
答案 3 :(得分:0)
当您使用Scanner
方法查看一个令牌时,例如nextDouble()
或nextInt()
,扫描程序将使用该令牌中的字符,但不会消耗该行末尾的换行符。
如果下一个Scanner
来电是另一个nextDouble()
,nextInt()
等,则此功能正常,因为该调用将跳过换行符。
但,如果下次通话为nextLine()
,则会返回""
。 nextLine()
会将所有内容返回到下一个换行符;并且由于在nextDouble()
调用之后它还没有使用换行符,它将在该换行符处停止,并返回一个空字符串,而不会让您有机会输入另一行。
要解决此问题,您需要调用额外的nextLine()
来使用换行符:
for(int i = 0; i < temperatures.length; i++)
{
System.out.println("Please enter the temperature for day " + (i+1));
temperatures[i] = new Data(input.nextDouble());
}
input.nextLine(); // Add this to consume the newline
String choice = "";
int numberChoice;
System.out.println("Please select one of the following options");
choice = input.nextLine();
numberChoice = Integer.parseInt(choice);