Java中的NoSuchElementException

Java中的NoSuchElementException,java,while-loop,java.util.scanner,nosuchelementexception,Java,While Loop,Java.util.scanner,Nosuchelementexception,我正在编写一个简单的程序,从System.in读取信息并将其放入LinkedList数组中。我有一个很简单的问题,但下班后我似乎找不到问题。希望它是好的和明显的。引发NoTouchElementException的代码段如下: while(scanner.hasNextLine()) { int index = scanner.nextInt(); master[index].addObservation(scanner.next()); } 调用nextInt

我正在编写一个简单的程序,从System.in读取信息并将其放入LinkedList数组中。我有一个很简单的问题,但下班后我似乎找不到问题。希望它是好的和明显的。引发NoTouchElementException的代码段如下:

while(scanner.hasNextLine())
{
        int index = scanner.nextInt();
        master[index].addObservation(scanner.next());
}
调用nextInt()方法时从该行抛出错误。当我按下Cntrl+Z结束输入时,问题出现了。出于某种原因,我的代码仍然在进入while循环,即使没有另一行输入。输入的格式如下:

1 doug
2 edwin
5 casey
4 fred
Cntrl+Z
(电脑号码后跟用户名)

pc号用于数组索引,用户名将进入链接列表。我尝试将EOF字符放在最后一行的末尾,并作为最后一行的第一个字符,没有任何更改。非常感谢您的帮助。谢谢

全班
import java.util.*;
公开课学期报告
{
私有静态LineUsageData[]主数据=新LineUsageData[501];
专用静态扫描仪=新扫描仪(System.in);
公共静态void main(字符串[]args)
{
//跳过索引0以获得指向PC的索引清晰度

对于(inti=1;i来说,最可能的问题是您可能忘记初始化数组

master = new ObservationList[MAX_INDICIES];
在while循环前面


如果不是这种情况,您将需要提供更多代码,以便我们可以看到您正在执行的操作。

尝试替换行

while(scanner.hasNextLine())
…像这样:

while(scanner.hasNextInt())
这是Scanner类的另一个方法

  • 布尔hasnetint()
    如果此字段中的下一个标记 默认情况下,扫描仪的输入可以解释为int值 使用nextInt()方法的基数

我猜您正在扫描的输入以int值以外的内容结束。

OP声称问题发生在包含“scanner.nextInt()”的行上。因此它不会到达可能有未初始化数组成员的行。“我猜您正在扫描的输入以int值以外的内容结束。”问题语句已经有了输入…我已经添加了我正在使用的整个类。我将尝试改用hasNextLine方法。问题已解决。我不明白当我输入EOF while.hasNextLine()时,为什么.hasNextLine()返回true不是,但我会进一步测试它,看看为什么会是这种情况。不管怎样,谢谢@parski!@DennisMeng,我只是说,如果有下一行,hasNextLine()方法将返回true,while循环将被执行。当为索引分配了一个可以存在或不可以存在的假定int值时,东西肯定会出错。使用hasNextInt()那就更明智了。
while(scanner.hasNextInt())