2017-09-11 48 views
0

我在https://www.thehuxley.com上提交我的答案時遇到問題。當我運行我的Eclipse的代碼,一切正常的話,但赫胥黎,我得到這個:Huxley:java.util.NoSuchElementException:找不到行

Exception in thread "main" java.util.NoSuchElementException: No line found 
at java.util.Scanner.nextLine(Scanner.java:1540) 
at HuxleyCode.main(HuxleyCode.java:12) 

這裏是代碼本身:

import java.io.*; 
import java.util.*; 

public class HuxleyCode { 
    public static void main(String args[]) { 
    Scanner in = new Scanner(System.in); 
    int menor = 0, pos = 0, entradas = 0, temp; 

    entradas = in.nextInt();// WATCH OUT THIS LINE 
    in = new Scanner(System.in); 

    String valores = in.nextLine(); 

    entradas = 0; 
    for (String val : valores.split(" ")) { 
     temp = Integer.valueOf(val); 

     if (entradas == 0) { 
      menor = temp; 
     } else if (temp < menor) { 
      menor = temp; 
      pos = entradas; 
     } 
     entradas++; 
    } 

    in.close(); 
    System.out.println("Menor valor: " + menor); 
    System.out.println("Posicao: " + pos); 
    } 
} 

只是爲了補充,在該行,我評論說:「WATCH OUT此行」,如果我刪除了這一行,掃描儀忽略nextInt()電子跳到NextLine(),導致此錯誤:

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.valueOf(Integer.java:766) 
at HuxleyCode.main(HuxleyCode.java:16) 

哪裏是我的錯,爲什麼不能在赫胥黎工作?

預期輸入是:

10 
1 2 3 4 -5 6 7 8 9 10 

和輸出:

Menor valor: -5 
Posicao: 4 
+0

'在=新掃描儀(System.in);'你不需要重新初始化掃描儀每次。您可能會丟失掃描儀以前的實例中的inputLine。 – kaza

+0

當您以交互方式運行(緩慢)時,緩衝區未加載所有輸入。但是在Huxley中,可能所有的行都立即被加載到'System.in'中,從而加載了所有輸入行的'Scanner'的第一個實例。 – kaza

+0

那麼,我應該如何解決這個問題?創建兩個掃描儀不會解決問題:/ –

回答

1
entradas = in.nextInt(); 
String valores =""; 
while(in.hasNextLine()) 
    valores = in.nextLine(); 

問題是nextInt()不掃描儀的位置設置爲下一行的開頭,因此第一次調用將返回空字符串。這清楚地說明這裏...
Can't use Scanner.nextInt() and Scanner.nextLine() together

有一點要注意的是,它爲你工作,因爲你reinitialzed掃描儀從而迫使其從下一行的起點開始。但不幸的是,這對Huxley來說不起作用,因爲它們一次就以編程方式發送輸入,並且失去了對第一臺掃描儀的引用而丟失了所有輸入。

而且下面應該工作

entradas = in.nextInt(); 
String valores = in.nextLine();//Get empty Str & Set pos of Scanner to beginning of next line 
valores = in.nextLine(); 
+0

對不起,我無法在評論中找到答案,所以...... – kaza

+0

完美,並感謝解釋鏈接 –