Java 2维数组值和for循环问题

时间:2018-07-19 07:00:36

标签: java arrays

我刚刚开始编程Java,但是我是英语新手,请尝试理解我的句子。

我试图在数组内添加第五个数字。 for循环未读取数组内部的数字99。我不希望table.length然后添加一个,我想在数组中添加任意数量的数字,而无需更改for循环。是否有代码来查找一个盒子(第一个数组盒子)中有多少个数字?

    int[][] table = { { 12, 0, 0, 0 ,99}, { 0, 0, 0, 0, 99}, { 0, 0, 0, 0, 99} };
    int max = Integer.MIN_VALUE;

    for (int i = 0; i < table.length; i++) {
        for (int k = 0; k <= table.length; k++) {
            if (table[i][k] >= max) {
                max = table[i][k];
            }
        }
    }
    System.out.println(max);

    int min = Integer.MAX_VALUE;

    for (int i = 0; i < table.length; i++) {
        for (int k = 0; k <= table.length; k++) {
            if (table[i][k] <= min) {
                min = table[i][k];
            }
        }
    }
    System.out.println(min);

2 个答案:

答案 0 :(得分:6)

您好,欢迎来到Java有趣的世界:-D

问题是您的“内部”数组的长度为5,而外部数组的长度为3。您在两个循环中都重复使用table.length。对于内循环,请尝试

    for (int k = 0; k < table[i].length; k++) { // Iterate across all the inner arrays
        if (table[i][k] >= max) {
            max = table[i][k];
        }
    }

您还要对表进行两次迭代,一次是找到最大值,一次是找到最小值。仅使用几个元素,这并不太昂贵,但是请想象您是否有数百万个元素。您可以将两个检查合并在一张表中。您还可以通过为表中的值设置变量来减少代码量。这意味着您只需要访问一次阵列。在节省CPU方面并没有多大用处,但它使代码看起来更容易一些。

int[][] table = { { 12, 0, 0, 0 ,99}, { 0, 0, 0, 0, 99}, { 0, 0, 0, 0, 99} };
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;

for (int i = 0; i < table.length; i++) {
    for (int k = 0; k < table[i].length; k++) {
        int val = table[i][k];
        if (val > max) {
            max = val;
        }
        if (val < min) {
            min = val;
        }
    }
}
System.out.println(max);
System.out.println(min);

答案 1 :(得分:2)

Spangen提到的内容绝对正确,只需要稍作修正,您应该使用“ <”而不是“ <=”在“内部”数组中进行迭代,这会破坏数组索引。

for (int k = 0; k < table[i].length; k++) { // Iterate across all the inner array
    if (table[i][k] >= max) {
        max = table[i][k];
    }
}

如果您想尝试一般性地学习数组而不是这样做,那么还有其他更好的方法可以在Java 8中完成,如此处Finding minimum and maximum in Java 2D array

所述。