[英]Checking to see if multiple values in a line in a 2d array are the same
我有一个数组列表,它的大小取决于用户在启动时指定的两个变量,然后用零填充。 随着程序的进行,某些网格将填充一个网格,而某些网格将填充两个网格。 一切都非常简单,我不知道该怎么做是检查数组中是否有水平或垂直的零行。 有人知道吗?
只是在这里进行编辑,感谢所有的建议,所有的答案都是很好的解决方案,但是我想念我的问题,我需要检查零行,范围从2个长到用户将数组大小设置为。
您将必须创建一个for循环才能遍历该行,然后在另一个for循环中(不要忘记使用其他变量)来遍历该列
我不知道有任何实用程序类可以解决此问题,但是您可以使用Arrays.deepEquals方法轻松创建一个实用程序类。
创建一个零数组,并将其与矩阵中的每一行和每个文件进行比较,以获取其中哪个是零值数组
我的一个想法是创建两个1D数组,一个数组的长度和另一个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 [],如果发现任何零,您将知道在相应的行或列中,在values [] []中有零行或一列
一种可能的方法是在处理列和行时将它们标记为不全为0。 这是伪代码中的想法
notAll0sC = Array [numberOfColumns]初始化为0
notAll0sR = Array [numberOfRows]初始化为0
现在,在处理过程中,您将看到
myTwoDimArray [R] [C] = 1
notAll0sC [C] = 1
notAll0sR [R] = 1
然后最后,您可以循环遍历notAll0sC和notAll0sR来找出哪些仍为0,因此这些行和列将均为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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.