2014-09-01 161 views
0

這是我的程序的主要方法。在調用nextLine()函數時,我遇到Scanner解析變量L而不是空間的問題。 nextInt()雖然按預期工作。我的程序崩潰試圖用Integer.parseInt()函數解析一個空字符串。掃描儀對象跳過

第一個輸入是一個整數,用於指定將繼續執行的行數,以下輸入是空格分隔的整數。

Scanner s = new Scanner (System.in); 
int l = s.nextInt(); 

for (int i = 0; i < l; i++){ 
    String space = s.nextLine(); 
    int x = Integer.parseInt(space.split(" ")[0]); 
    int y = Integer.parseInt(space.split(" ")[1]); 
    printPrimes(x, y); 
    System.out.println(); 
} 

堆棧跟蹤如下:

Exception in thread "main" java.lang.NumberFormatException: For input string: "" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
at java.lang.Integer.parseInt(Integer.java:592) 
at java.lang.Integer.parseInt(Integer.java:615) 
at Contests.SPOJ.SPOJ2.main(SPOJ2.java:43) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:483) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134) 
+0

你能分享一些例子輸入導致該異常? – 2014-09-01 21:12:01

+0

我已經測試了數字2和3,程序立即崩潰。該程序不會讓我輸入nextLine()。 – Blimeo 2014-09-01 21:13:25

回答

1

nextInt將不會消耗以下換行符,因此下一次調用nextLine將是輸入中剩餘的唯一換行符('\ n')。

請對nextLine呼叫循環之前丟棄它:

Scanner s = new Scanner (System.in); 
int l = s.nextInt(); 
s.nextLine(); // Discarding the '\n' 

for (int i = 0; i < l; i++){ 
    String space = s.nextLine(); 
... 
1

我加入環內該行的固定程序:

s = new Scanner(System.in); 

完整下面的清單:

Scanner s = new Scanner (System.in); 
int l = s.nextInt(); 

for (int i = 0; i < l; i++){ 
    s = new Scanner(System.in); 
    String space = s.nextLine(); 
    int x = Integer.parseInt(space.split(" ")[0]); 
    int y = Integer.parseInt(space.split(" ")[1]); 
    printPrimes(x, y); 
    System.out.println(); 
} 

它按預期工作。

+0

這個原因起作用是因爲第一個Scanner已經緩衝了一些輸入,包括'遺留'換行符。詳情請參閱下面的答案。 – folkol 2014-09-01 21:27:35