扫描器nextInt()在for循环中

时间:2018-06-15 11:35:14

标签: java for-loop java.util.scanner

班级代码

import java.util.*;

public class Solution {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        ArrayList<ArrayList<Integer>> rows = new ArrayList<>();

        for (int i = 0; i < n; i++) {
            int d = in.nextInt();
            ArrayList<Integer> row = new ArrayList<>();

            for (int j = 0; j < d; j++) {
                row.add(in.nextInt());
            }

            rows.add(row);
        }

        int q = in.nextInt();

        for (int i = 0; i < q; i++) {
            System.out.println("test");
            int x = in.nextInt();
            System.out.printf("test2");
            int y = in.nextInt();
            System.out.println("I dont get it");
            try {
                System.out.println(rows.get(x - 1).get(y - 1));
            } catch (IndexOutOfBoundsException e) {
                System.out.println("ERROR!");
            }
        }
    }
}

有这个输入

5
5 41 77 74 22 44
1 12
4 37 34 36 52
0
3 20 22 33
5
1 3
3 4
3 1
4 3
5 5

结果

74
52
37
ERROR!
ERROR!

我不明白nextInt()在最后一个循环中是如何工作的。为什么线条“我不明白”,“测试”,“测试2”从未打印过?

为什么try块在循环结束时执行而不是在循环期间执行?

stdout如何一次打印4个结果?

请帮忙。

2 个答案:

答案 0 :(得分:0)

我可以通过您的输入看到下面的输出。

test
test2I dont get it
74
test
test2I dont get it
52
test
test2I dont get it
37
test
test2I dont get it
ERROR!
test
test2I dont get it
ERROR!

只需删除.class并再次编译并检查。

答案 1 :(得分:0)

根据您的输入

Output array   --> rows=[[41, 77, 74, 22, 44], [12], [37, 34, 36, 52], [], [20, 22, 33]]

在前三次迭代中打印

rows[0][2]=74
rows[2][3]=52
rows[2][0]=37
rows[3][2]=Error   

- &gt;因为在你的输出数组中第三个索引是一个空数组[],在第二个位置没有任何内容