如何计算二维阵列的尺寸?

时间:2017-12-06 18:24:11

标签: java arrays multidimensional-array dimensions

我正在寻找二维数组的维度。不是分配给数组的固定值,而是包含整数的值。例如:

int a[][] = new int[4][5];
a[1][1] = 1;
a[1][2] = 2;
a[1][3] = -2;
a[1][4] = 0;
a[2][1] = -3;
a[2][2] = 4;
a[2][3] = 7;
a[2][4] = 2;
a[3][1] = 6;
a[3][2] = 0;
a[3][3] = 3;
a[3][4] = 1;

4个中只使用了3个变量,5个中使用了4个变量。你怎么能知道实际存在的变量与分配的变量是什么?

array.length;
array[0].length;

前面的代码只会为您提供分配给数组的固定变量。但是,如果你没有使用所有变量怎么办?换句话说,我正在寻找列的输出3和行的输出。

3 个答案:

答案 0 :(得分:0)

在您的代码示例中,您使用数组中的所有变量。只是因为你还没有为他们分配任何东西,他们仍然坐在那里。

如果您想确定是否已为数组中的每个元素分配了值,则需要将所有内容初始化为默认值,然后只需与默认值进行比较。

该选项的变体是将它们声明为int?,这是一个可以为空的int。这样您就可以将所有内容设置为null,然后您就会知道不再是null的元素已经为其分配了值。

答案 1 :(得分:0)

    // using Integer instead of int, which is a nullable object
    Integer a[][] =  new Integer[4][5];
    int cnt1 = 0;
    for(int i = 0; i < a.length; i++) {
        for(int j = 0; j < a[i].length; j++) {
            if(a[i][j] != null) {
                cnt1++;
            }
        }
    }
    System.out.println(cnt1 + " array indices are non-null.");

    // using int
    int b[][] =  new int[4][5];
    for(int i = 0; i < b.length; i++) {
        for(int j = 0; j < b[i].length; j++) {
            b[i][j] = -9999;
        }
    }

    int cnt2 = 0;
    for(int i = 0; i < b.length; i++) {
        for(int j = 0; j < b[i].length; j++) {
            // pick a value that will never be assigned
            if(b[i][j] != -9999) {
                cnt2++;
            }
        }
    }
    System.out.println(cnt2 + " array indices are not -9999.");

答案 2 :(得分:0)

您无法动态执行此操作。一旦您启动了您的矩阵(new int[4][5]),您就拥有了矩阵为0。

你必须启动矩阵蚂蚁为所有位置设置一个无效值,例如-1或者你想要的任何东西,并迭代它以发现结果