如何解决numberformatexception并获取输入字符串:“”?

时间:2013-11-15 17:40:32

标签: java exception numberformatexception

我正在尝试创建一个程序,其中输入由几行组成,第一行表示后续行的字符序列数。这些字符序列将被“”拆分。分裂的字符将被转换为整数并得到它的总和。

  For Example:      
  2      
  2 3      
  4 5      

  2 3 Sum is 5
  4 5 Sum is 9

现在,当我输入相同的输入时,我得到了这个......

  2
  2 3
  4 5
   Sum is 0
  2 3 Sum is 5
  4 5 Sum is 9

  java.lang.NumberFormatException: For input string: ""
 at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:504)
at java.lang.Integer.parseInt(Integer.java:527)
at ITweek.sum2(ITweek.java:33)
at ITweek.main(ITweek.java:18)

为什么Sum的返回值为0?和NumberFormatException的错误:对于输入字符串:“”?我不明白。我不知道如何以及在哪里找到答案。任何帮助将不胜感激。谢谢。

这是我的代码..

  import java.util.ArrayList;
  import java.util.List;
  import java.util.Scanner;

  public class Prob {
      public static void main(String args[]){

    Scanner input = new Scanner(System.in);
    int loop = input.nextInt();

    String numberString[]=new String[loop+1];

    for(int i=0; i<=loop; i++){
        String ans = input.nextLine();
        numberString[i] = ans;
    }
    sum2(numberString);

}

  static void sum2(String []answers){
  for(String b : answers){
         System.out.print(""+b+" ");

         String splittedNumber[] = b.split(" ");

         int sum = 0;
         for(String j : splittedNumber){
             try{
                 sum=sum+Integer.parseInt(j);
             }catch(Exception x){
                 x.printStackTrace();
         }
         }
            System.out.println("Sum is "+sum);
     }
   }
  }

3 个答案:

答案 0 :(得分:0)

这是一个提示,看一下这一行:String numberString [] = new String [loop + 1]; 你初始化的阵列大小是多少,你真正投入了多少项目?

答案 1 :(得分:0)

显然你的问题;),这是代码的这一部分

    Scanner input = new Scanner(System.in);
    int loop = input.nextInt();

    String numberString[]=new String[loop]; //remove last block of array. +1 is useless

    for(int i=0; i<=loop; i++){
        String ans = input.nextLine();
        numberString[i] = ans;
    }
    sum2(numberString);

}

您从标准输入中读取。首先,您读取一个int并将其传递给循环变量。你的错误在于认为在读完int之后,你会跳到下一行,这不是真的。读完一个int之后,你的缓冲区就可以在第一个char之后立即开始阅读。

基本上,numberString数组中的第一个输入是\ n字符。如果要混合readInt和readLine,请确保在readInt之后指示读取该行的其余部分以使缓冲区前进。您可以在两种情况下使用readLine,也可以在readInt之后使用readLine并将\ n扔到垃圾箱中。

public static void main(String args[]){

Scanner input = new Scanner(System.in);
int loop = Integer.parseInt(input.readLine());

String numberString[]=new String[loop]; //remove last block of array. +1 is useless

for(int i=0; i<loop; i++){
    String ans = input.nextLine();
    numberString[i] = ans;
}
sum2(numberString);

public static void main(String args[]){

Scanner input = new Scanner(System.in);
int loop = input.readInt());
input.readLine;
String numberString[]=new String[loop]; //remove last block of array. +1 is useless

for(int i=0; i<loop; i++){
    String ans = input.nextLine();
    numberString[i] = ans;
}
sum2(numberString);

答案 2 :(得分:0)

main方法中存在一些需要修复的错误。

Scanner input = new Scanner(System.in);
//create a new scanner to read string as input doesn't advance to next line after  reading int
Scanner inputString = new Scanner(System.in);
    int loop = input.nextInt();
//loop through to enter your input and process with method call.
    for (int i = 0; i < loop; i++) {
//you just need one element array to store input string which is separated by whitespace
        String numberString[] = new String[1];
        numberString[0] = inputString.nextLine();
        sum2(numberString);
    }

发生NFE是因为尝试将空字符串转换为Integer。我希望它有所帮助。