Huxley:java.util.NoSuchElementException:找不到行

问题描述:

我在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

那么,我应该如何解决这个问题?创建两个扫描仪不会解决问题:/ –

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

完美,并感谢解释链接 –