二维数组工作,越界错误,for循环,
2D Array work, out of bounds error, for loop,
我的一个学校作品告诉我们制作一个二维数组,并显示数组中的内容。我不知道为什么它说越界,我有点卡住了。我们的任务是制作 10 个学生 ID 和 3 个测试,每个测试都有分数,如下面数组的第一行所示。 for 循环部分设计为在 x 达到 3 后(显示最终测试分数时)移动到下一列。
public class TwoDArray {
public static void main(String [] args) {
int [] [] musicScores = { {1001, 2002, 3003, 4004, 5005,6006,7007,8008,9009,1010,},{10,7,8,9,5,10,8,7,6,9},{9,8,10,9,9,10,9,9,7,9},{8,7,8,9,8,7,8,10,8,8}};
int y = 0;
for (int x = 0; x < 4; x++) {
System.out.print(musicScores[x][y] + "\t");
for (x = 3;y < 10; y++) {
x = 0;
System.out.println("");
}
}
}
}
您正在混合 for 循环中的逻辑,这是一种如何在二维数组中迭代的方法
public class TwoDArray {
public static void main(String[] args) {
int[][] musicScores = {{1001, 2002, 3003, 4004, 5005, 6006, 7007, 8008, 9009, 1010,}, {10, 7, 8, 9, 5, 10, 8, 7, 6, 9}, {9, 8, 10, 9, 9, 10, 9, 9, 7, 9}, {8, 7, 8, 9, 8, 7, 8, 10, 8, 8}};
for (int i = 0; i < musicScores.length; i++) {
for (int j = 0; j < musicScores[i].length; j++) {
System.out.println("Values at arr[" + i + "][" + j + "] is " + musicScores[i][j]);
}
}
}
}
你的问题是:
System.out.print(musicScores[x][y] + "\t");
您允许 y
取值 10
,这是一个无效的数组索引。原因是您在退出 for
循环后使用 y
:
for (y = 0;y < 10; y++) {
...
}
当这个循环退出时,y
是10
。然后你循环并在该循环之外使用 y
,你可能不应该这样做。我不确定你到底想做什么,但也许你想将有问题的行移到你的内部 for 循环中,如下所示:
class TwoDArray {
public static void main(String [] args) {
int [] [] musicScores = { {1001, 2002, 3003, 4004, 5005,6006,7007,8008,9009,1010,},{10,7,8,9,5,10,8,7,6,9},{9,8,10,9,9,10,9,9,7,9},{8,7,8,9,8,7,8,10,8,8}};
for (int x = 0; x < 4; x++) {
for (int y = 0;y < 10; y++) {
System.out.print(musicScores[x][y] + "\t");
}
System.out.println();
}
}
}
注意:我的回答和@Dren 提供的回答都大大清理了您的代码。设置 x = 0
对你没有好处,如果你只在内部 for
循环中使用 y
,你可能应该这样做,那么最好将 y
定义在for
循环本身以确保您不会在循环外使用它。您的内部 for
循环在您的原始代码中所做的就是打印一堆空行。我怀疑那是你的意图。我们的解决方案都不会打印空行。
@Dren 的回答做了一些值得注意的事情……它将数组长度的硬编码常量替换为数据集中数组的实际长度。这总是可取的。如果您这样做,那么当您更改数据集时,您不必确保更改硬编码长度值以匹配......这是非常容易出错的事情。
我的一个学校作品告诉我们制作一个二维数组,并显示数组中的内容。我不知道为什么它说越界,我有点卡住了。我们的任务是制作 10 个学生 ID 和 3 个测试,每个测试都有分数,如下面数组的第一行所示。 for 循环部分设计为在 x 达到 3 后(显示最终测试分数时)移动到下一列。
public class TwoDArray {
public static void main(String [] args) {
int [] [] musicScores = { {1001, 2002, 3003, 4004, 5005,6006,7007,8008,9009,1010,},{10,7,8,9,5,10,8,7,6,9},{9,8,10,9,9,10,9,9,7,9},{8,7,8,9,8,7,8,10,8,8}};
int y = 0;
for (int x = 0; x < 4; x++) {
System.out.print(musicScores[x][y] + "\t");
for (x = 3;y < 10; y++) {
x = 0;
System.out.println("");
}
}
}
}
您正在混合 for 循环中的逻辑,这是一种如何在二维数组中迭代的方法
public class TwoDArray {
public static void main(String[] args) {
int[][] musicScores = {{1001, 2002, 3003, 4004, 5005, 6006, 7007, 8008, 9009, 1010,}, {10, 7, 8, 9, 5, 10, 8, 7, 6, 9}, {9, 8, 10, 9, 9, 10, 9, 9, 7, 9}, {8, 7, 8, 9, 8, 7, 8, 10, 8, 8}};
for (int i = 0; i < musicScores.length; i++) {
for (int j = 0; j < musicScores[i].length; j++) {
System.out.println("Values at arr[" + i + "][" + j + "] is " + musicScores[i][j]);
}
}
}
}
你的问题是:
System.out.print(musicScores[x][y] + "\t");
您允许 y
取值 10
,这是一个无效的数组索引。原因是您在退出 for
循环后使用 y
:
for (y = 0;y < 10; y++) {
...
}
当这个循环退出时,y
是10
。然后你循环并在该循环之外使用 y
,你可能不应该这样做。我不确定你到底想做什么,但也许你想将有问题的行移到你的内部 for 循环中,如下所示:
class TwoDArray {
public static void main(String [] args) {
int [] [] musicScores = { {1001, 2002, 3003, 4004, 5005,6006,7007,8008,9009,1010,},{10,7,8,9,5,10,8,7,6,9},{9,8,10,9,9,10,9,9,7,9},{8,7,8,9,8,7,8,10,8,8}};
for (int x = 0; x < 4; x++) {
for (int y = 0;y < 10; y++) {
System.out.print(musicScores[x][y] + "\t");
}
System.out.println();
}
}
}
注意:我的回答和@Dren 提供的回答都大大清理了您的代码。设置 x = 0
对你没有好处,如果你只在内部 for
循环中使用 y
,你可能应该这样做,那么最好将 y
定义在for
循环本身以确保您不会在循环外使用它。您的内部 for
循环在您的原始代码中所做的就是打印一堆空行。我怀疑那是你的意图。我们的解决方案都不会打印空行。
@Dren 的回答做了一些值得注意的事情……它将数组长度的硬编码常量替换为数据集中数组的实际长度。这总是可取的。如果您这样做,那么当您更改数据集时,您不必确保更改硬编码长度值以匹配......这是非常容易出错的事情。