Java 中的锯齿状数组和嵌套 For 循环

Jagged Array & Nested For Loop in Java

我有一个我认为是非常基本的代码示例,但我不明白为什么代码永远不会完成。它似乎停留在一个循环中。这个非常简单的代码应该声明和初始化一个锯齿状数组,第一行有 4 列,第二行有 3 列。该代码要求用户输入 7 个整数并将结果打印到屏幕上。所有这些都有效,但它不会跳出循环,除非我手动跳出它。如果使用手动中断,则无法实现正确的输出。

public class TestCode {

    public static void main(String[] args) {
        //Create new scanner object
        Scanner userInput = new Scanner(System.in);
        //Declare two dimentional array
        int[][] num2d = new int[4][3];
        //Declare variables
        int i;
        int j;
        //Print to screen asking for user input
        System.out.print("Enter seven numbers: ");

        //Loop through array and print the result
        for (i = 0; i < num2d.length; i++) {
            for (j = 0; j < num2d[i].length; j++) {
                num2d[i][j] = userInput.nextInt();
                System.out.println(num2d[i][j]);
                //break;
            }
        }
    }
}

当我 运行 注释掉这个带有中断的代码时,我得到了这个结果,但是我必须从 运行ning 开始手动停止它。

run:
Enter seven numbers: 1 2 3 4 1 2 3

1
2
3
4
1
2
3

当我插入时,这就是我得到的。

run:
Enter seven numbers: 1 2 3 4 1 2 3

1
2
3
4
BUILD SUCCESSFUL (total time: 4 seconds)

这是怎么回事?为什么不使用 break 就可以得到正确的“build successful”消息?

你的循环在二维数组的“列”上运行,这是 4 次,并且对于每个“列”,它在它的长度上运行,即 3。4 乘以 3 是 12,你只输入 7 个数字。控制台一直在等待您的输入。

您的代码不会永远循环:它循环 12 次,因为您声明了一个 4x3 数组 - 即一个大小为 4 的数组,其中每个元素都是一个包含 3 个整数的数组。

相反,我认为你想要这样的东西:

int[][] num2d = {new int[4], new int[3]};