我有一个数组列表,它的大小取决于用户在启动时指定的两个变量,然后用零填充。随着程序的进展,一些网格将填充一些,一些有两个。这一切都很简单,我不知道怎么做是检查我的数组中是否有任何零行,无论是水平还是垂直。谁知道怎么做?
这里只是一个编辑,感谢所有的建议,所有答案都是很好的解决方案,但我想念我的问题,我需要检查零行,从2长到任何用户设置的大小数组到。
答案 0 :(得分:0)
你必须创建一个for循环来循环遍历该行,然后在另一个for循环中(不要忘记使用不同的变量)循环遍历列
答案 1 :(得分:0)
我不知道任何解决此问题的实用程序类,但您可以使用方法Arrays.deepEquals轻松创建一个。
创建一个零数组,并将其与矩阵中的每一行和每个文件进行比较,以获得哪些是零值数组
答案 2 :(得分:0)
我的一个想法是创建两个一维数组,一个具有长度,另一个具有2D数组的高度,并用零填充它们。然后使用两个简单的for循环,您可以读取2D数组中的所有值。对于每一行,如果找到的值与0不同,则将相应数组中的该位置设置为1。我想只需编写一些代码并向您展示就更简单了:
int x = 10, y = 5; // numbers just for the example
int values[][] = new int[x][y];
int foo1[] = new int[x];
int foo2[] = new int[y];
for(int i=0 ; i<x ; i++)
for(int j=0 ; i<y ; j++)
if(values[i][j] != 0) {
foo1[i] = 1;
foo2[j] = 1;
}
完成此操作后,您可以遍历foo1 []和foo2 [],如果找到任何零,您将知道在相应的行或列中,值[] [] <中有一行或一列零/ p>
答案 3 :(得分:0)
一种可能的方法是在处理它们时将列和行标记为不是全0。这是Pseudo-code中的想法
notAll0sC = Array [numberOfColumns]已启动为0
notAll0sR = Array [numberOfRows]已启动为0
现在,在您处理过程中,您将拥有类似
的内容myTwoDimArray [R] [C] = 1
notAll0sC [C] = 1
notAll0sR [R] = 1
然后在最后你可以循环遍历notAll0sC和notAll0sR来找出哪些仍然是0,因此那些将是0和0的行和列。
答案 4 :(得分:0)
我希望你能理解你的问题。这可能会有所帮助..
int m,n;
for(int i=0;i<a.length;i++){
m=0;
for(int j=0;j<a[0].length;j++){
if(a[i][j]==0)
m++;
else break;
}
if(m==a[0].length)
// if true? There's a row of zeros
}
for(int u=0;u<a[0].length;u++){
n=0;
for(int v=0;v<a.length;v++){
if(a[v][u]==0)
n++;
else break;
}
if(n==a.length)
// if true? There's a columns of zeros
}