Java中的NoSuchElementException

时间:2013-09-05 00:46:08

标签: java while-loop java.util.scanner nosuchelementexception

我正在编写一个简单的程序来从System.in读取并将信息放入LinkedLists数组中。我有一个非常简单的问题,但几个小时后我似乎无法找到问题。希望它好看而且显而易见。抛出NoSuchElementException的代码段是:

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.*;

public class TermReport 
{

        private static LineUsageData[] master = new LineUsageData[501];
        private static Scanner scanner = new Scanner(System.in);

        public static void main(String[] args)
        {
            //skip index 0 for index to PC clarity
            for(int i=1; i<501; i++)
            {
                master[i] = new LineUsageData();
            }

            while(scanner.hasNextLine())
            {
                int index = scanner.nextInt();
                master[index].addObservation(scanner.next());
            }
        }
}

2 个答案:

答案 0 :(得分:1)

尝试替换行...

while(scanner.hasNextLine())

......有这样的事情:

while(scanner.hasNextInt())

这是Scanner类的另一种方法。

  • 布尔hasNextInt()
    如果下一个令牌,则返回true 扫描仪的输入可以解释为默认值中的int值 radix使用nextInt()方法。

我猜测你正在扫描的输入是以int值以外的其他内容结束的。​​

答案 1 :(得分:-1)

最可能的问题是你可能忘记了数组的初始化。

需要一些东西
master = new ObservationList[MAX_INDICIES];

在while循环前面。

事实并非如此,您需要提供更多代码,以便我们了解您的工作情况。