【问题标题】:NoSuchElementException in JavaJava 中的 NoSuchElementException
【发布时间】:2013-09-05 00:46:07
【问题描述】:

我正在编写一个简单的程序来读取 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());
            }
        }
}

【问题讨论】:

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


    【解决方案1】:

    尝试替换行...

    while(scanner.hasNextLine())
    

    ...用这样的东西:

    while(scanner.hasNextInt())
    

    这是 Scanner 类的另一种方法。

    • 布尔 hasNextInt()
      如果 this 中的下一个标记返回 true 扫描仪的输入在默认情况下可以解释为一个 int 值 基数使用 nextInt() 方法。

    我猜您正在扫描的输入以非 int 值结尾。

    【讨论】:

    • “我猜您正在扫描的输入以非 int 值结尾。”问题陈述已经有输入...
    • 我已经添加了我正在使用的整个类。我将尝试改用 hasNextInt 方法。
    • 问题已解决。我不明白为什么当我进入 EOF 时 .hasNextLine() 返回 true 而 .hasNextInt() 不是,但我会进一步测试它以了解为什么会这样。不管怎样,谢谢@parski!
    • @DennisMeng,我只是说如果有下一行,hasNextLine() 方法将返回 true 并执行 while 循环。当 index 被分配一个假定的 int 值时,可以或不存在的东西肯定会出错。使用 hasNextInt() 会更明智。
    【解决方案2】:

    最可能的问题是您可能忘记了初始化数组。你需要一些类似于

    的东西
    master = new ObservationList[MAX_INDICIES];
    

    在while循环之前。

    如果不是这样,您需要提供更多代码,以便我们看到您在做什么。

    【讨论】:

    • OP 声称问题出现在包含“scanner.nextInt()”的行上。所以它没有到达可能有未初始化数组成员的行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    相关资源
    最近更新 更多