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]};
我有一个我认为是非常基本的代码示例,但我不明白为什么代码永远不会完成。它似乎停留在一个循环中。这个非常简单的代码应该声明和初始化一个锯齿状数组,第一行有 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]};