java二维数组运行中的几个问题

java二维数组运行中的几个问题,java,arrays,Java,Arrays,我是java新手,现在我正在学习数组 这是一个示例程序: public class Array { public static void main(String[] args) { int[][] twodim = new int[][] { {1,2,4,4}, {2,4,5,5,4,3,3} }; int d1 = twodim.length; int d2 = twodim[1].length; for (int i

我是java新手,现在我正在学习数组

这是一个示例程序:

public class Array {
    public static void main(String[] args) {
        int[][] twodim = new int[][] { {1,2,4,4}, {2,4,5,5,4,3,3} };
        int d1 = twodim.length;
        int d2 = twodim[1].length;
        for (int i = 0; i < d1; i++){
            for (int j = 0;j < d2; j++){
        System.out.println(twodim[i][j]);
            }}
    }

}

这是错误的,请指导我,提前谢谢。

试试这个伙伴,你的循环参数是错误的

基本上,它是一个二维数组。第一个循环检查外部数组长度,第二个循环检查每个单独数组的长度

for (int i = 0; i < twodim.length; i++){
    for (int j = 0;j < twodim[i].length; j++){
        System.out.println(twodim[i][j]);
    }
}
for(int i=0;i
当i=0和j=4时,您的代码会抛出一个
索引自动边界异常


这是因为数组的长度不同。

将第二个维度放入第一个循环:

    public static void main(String[] args)
    {
        int[][] twodim = new int[][] { { 1, 2, 4, 4 }, { 2, 4, 5, 5, 4, 3, 3 } };
        int d1 = twodim.length;
        for (int i = 0; i < d1; i++)
        {
            int d2 = twodim[i].length;
            for (int j = 0; j < d2; j++)
            {
                System.out.println(twodim[i][j]);
            }
        }
    }
publicstaticvoidmain(字符串[]args)
{
int[][]twodim=新的int[][{{1,2,4,4},{2,4,5,5,4,3,3};
int d1=twodim.length;
对于(int i=0;i
您包含的代码没有输出您所说的内容。其产出是:

1
2
4
四,

然后它抛出一个异常:

线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:4

以下是
d1
d2
变量的设置:

int d1 = twodim.length;
// d1 = 2, the length of the outer array
int d2 = twodim[1].length;
// d2 = 7, the length of the second inner array, [2,4,5,5,4,3,3]
因此,外部循环将循环两次,这是您想要的

但是,内部循环将始终循环7次,因为这是
d2
所等于的。这导致打印出第一个内部数组中的每个数字1、2、4和4,然后当它尝试访问第5个数字时,会出现
ArrayIndexOutOfBoundsException
,因为第一个内部数组中没有第5个数字

相反,您应该让第二个循环只循环每个数组的内容,如下所示:

for(int i = 0; i < twodim.length; i++) {
    for(int j = 0; j < twodim[i].length; j++) {
        // note that twodim[i].length is the length of the array that you are currently looping through
        System.out.println(twodim[i][j]);
    }
}
for(int i=0;i
此操作的输出为:

1
2
4
4
2
4
5
5
4
3
三,



预期的输出是什么?第一个内部数组的长度是否与第二个内部数组的长度相同?我不这么认为,但您的代码假定是这样的。@creditenson:这会正确打印所有值吗?。。1 2 4 4 2 5 4 3两个内部阵列的长度不同@ZouZou@selva那你为什么要做
intd2=twodim[1].length?@selva尝试重新编译代码,并确保您编译的文件正确。我刚刚运行了代码并得到了预期的结果。我可以知道您的输出吗?我只是想知道为什么您有UnknownHostException异常?或者我不明白什么是UnknownHostException?。。我是新java,你能给我解释一下吗?嘿,删除了异常。我复制了上面的代码,但忘了删除它。没必要:)对不起。编辑了答案。我可以知道,我错在哪里吗@Joeinner必须在循环中动态计算第二维
d2
,因为嵌入式数组可能具有不同的大小
intd2=twodim[1]。length
计算嵌入数组
{1,2,4,4}
的长度,即4。第二个数组是
{2,4,5,5,4,3,3}
是7。变量d2在您的代码中从未更新过。我只是感到困惑,我如何理解这两个数组的长度,您能解释一下吗?数组的长度是数组中的项数。因此,您有一个外部数组,
twodim
,它包含两个内部数组。所以,它的长度是2。内部数组具有不同的长度。第一个位于外部数组的索引0处,包含4个整数(1,2,4,4),长度为4。索引1处的第二个内部数组包含7个整数(2,4,5,5,4,3,3),使其长度为7。感谢@credenson,为什么我们为第二个内部数组添加(int j=0;jtwodim[i]的原因是什么.length
用于内部循环的是获取当前数组的长度。因此,当
i=0
时,该长度将为4(对于第一个内部数组),当
i=1
时,该长度将为7(对于第二个内部数组)。
for(int i = 0; i < twodim.length; i++) {
    for(int j = 0; j < twodim[i].length; j++) {
        // note that twodim[i].length is the length of the array that you are currently looping through
        System.out.println(twodim[i][j]);
    }
}