繁体   English   中英

检查二维数组中一行中的多个值是否相同

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM