二维数组工作,越界错误,for 循环,

问题描述

我的一个学校作品告诉我们制作一个二维数组,并显示数组中的内容。我不知道为什么它说越界,我有点卡住了。我们的任务是制作 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,6,9},{9,{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("");
            }
        }
    }
}

解决方法

你的问题是:

System.out.print(musicScores[x][y] + "\t");

您允许 y 取值 10,这是一个无效的数组索引。这样做的原因是您在退出 y 循环后使用了 for

for (y = 0;y < 10; y++) {
    ...
}

当此循环退出时,y10。然后您循环并在该循环之外使用 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,6,9},{9,{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 对你没有好处,如果你只在内部 y 循环中使用 for,你可能应该这样做,那么最好在y 循环本身以确保您不在循环外使用它。您的内部 for 循环在原始代码中所做的一切就是打印一堆空行。我怀疑这就是你的意图。我们的解决方案都没有打印空行。

@Dren 的回答做了一些非常值得注意的事情……它将数组长度的硬编码常量替换为数据集中数组的实际长度。这总是可取的。如果您这样做,那么当您更改数据集时,您不必确保更改硬编码长度值以匹配......这很容易出错。

,

您在 for 循环中混合了逻辑,这是一种如何在 2D 数组中进行迭代的方法

public class TwoDArray {
    public static void main(String[] args) {
        int[][] musicScores = {{1001,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]);
            }
        }
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...