2013-11-15 31 views
0

我想製作一個程序,其中的輸入包含多行,第一行指示字符序列的後續行數。這些字符序列將被「」分割。分割的字符將被轉換爲整數並得到它的總和。如何解決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) 

爲什麼我總的收益爲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); 
    } 
    } 
    } 
+0

如果有「」,請不要將其解析爲整數。一個適當的if-else語句就足夠了。 – Naddy

+0

啊好吧,我看到..我的一個粗心。謝謝。 =) – baikoko09

回答

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後,你的緩衝區已經準備好在第一個字符之後開始讀取。

基本上,您在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); 
+0

哦,我看到..謝謝Integer.parseInt(input.readLine());並改變for循環的條件爲我<循環.. =)您的幫助表示讚賞。 =) – baikoko09

+0

我刪除了+1,並從for塊中刪除了=條件。否則,你會在for循環的最後一次迭代中結束一個空字符串。沒關係。 – Alex

0

這裏是一個暗示,看看這行:字符串numberString [] =新的String [環+ 1]; 你想要啓動什麼樣的陣列大小以及你需要投入多少物品?

+0

我在它上面加了1,因爲如果我沒有,我有一個ArrayIndexOutOfBoundsException。 – baikoko09

+0

啊,那是因爲for循環中的另一個問題。聽起來像一個學校的任務,所以我不認爲你的教練會很高興,如果我給你比提示:) – codesalsa

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,因爲嘗試將空字符串轉換爲整數。我希望它有幫助。

相關問題