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

它以以下格式输入:
4-数据行数
5 6-Datapeices
5 6-Datapeices
5 6-Datapeices
5 6-Datapeices

我正在尝试制作一个带行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个问题:


您尝试初始化一个奇怪的大小的数组。
new int [Integer.parseInt(st.nextToken())*2]-> new int [st.countTokens()]
在这种情况下,您尝试从控制台读取嵌套行,并且该行可以为空。但是,当没有令牌时,您尝试读取下一个令牌。还有st = new StringTokenizer(br.readLine());中的问题-因此您必须添加检查:st.hasMoreTokens()。您可以将其放在for语句中。
正如我想的那样,您想使用toString()打印数组内容-它无法按预期工作。使用System.out.println(Arrays.toString(arr));

10-06 06:47