我正在寻找二维数组的维度。不是分配给数组的固定值,而是包含整数的值。例如:
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和行的输出。
答案 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或者你想要的任何东西,并迭代它以发现结果