使用Scanner输入的字符串到int转换

时间:2014-10-10 17:24:56

标签: java

我正在尝试将从键盘获取的字符串值转换为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());
    }

4 个答案:

答案 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);