如何修复 java.util.NoSuchElementException

How to fix java.util.NoSuchElementException

我正在做家庭作业,我正在通过控制台输入值。该程序尚未完成,我只是想让输入系统正常工作。我 运行 遇到了一个问题,我看到其他人 运行 遇到了其他代码片段,但我不知道如何在这种情况下实现它们。

输入格式如下: 4 - 数据行数 5 6 - 数据文件 5 6 - 数据文件 5 6 - 数据文件 5 6 - 数据集

我正在尝试制作一个长度为 1 * 2 行的数组,然后继续将其存储在数组中。我正在排队的所有其他数据集。

导入java.io.*;

导入java.util.StringTokenizer;

    int arr[];
    int x = 0;

    BufferedReader br = new BufferedReader(newInputStreamReader(System.in));
    StringTokenizer st = new StringTokenizer(br.readLine());
    arr = new int [Integer.parseInt(st.nextToken())*2];

    for (int i = 0; i < arr.length; i++) {
        if ((i%2)==1) {
            x = Integer.parseInt(st.nextToken());
            st = new StringTokenizer(br.readLine());
        } else {
            x = Integer.parseInt(st.nextToken());
        }
        arr[i] = x;
    }
    System.out.println(arr.toString());
}

我发现代码中有 3 个问题:

  1. 您尝试初始化一个大小奇怪的数组。 new int [Integer.parseInt(st.nextToken())*2] -> new int [st.countTokens()]

  2. 在您尝试从控制台读取嵌套行的情况下,它可能为空。但是当没有令牌时,您尝试读取下一个令牌。 st = new StringTokenizer(br.readLine()); 中的问题 - 因此您必须添加检查:st.hasMoreTokens()。你可以把它放在for语句中。

  3. 我想你想用 toString() 打印数组内容——它不能像你预期的那样工作。使用 System.out.println(Arrays.toString(arr));