Java 二维数组计算列中的零

Java 2d array counts zeros in column

我大约 4 天前开始自学编程,我对 2d 数组有点迷。我尝试通过任务来挑战自己,比如从具有最多零的二维数组列中获取或至少只计算零,到目前为止我已经做到了

public class b {

    public static void main(String[] args) {
        int a[][] = new int [5][5];
        int i,j;
        int s = 0;

        for(i= 0;i<a.length; i++)
            for(j = 0; j<a[i].length; j++){
                a[i][j] = (int)(Math.random()*10);
            }
        for(i=0;i<a.length;i++){
            for(j=0;j<a[i].length;j++) {
                System.out.print(a[i][j] + "\t");   
            }
            System.out.println();
        }

        for(j=0;j<a[0].length;j++) {
            for(i=0;i<a.length;i++) {
                if(a[i][j] >-1 || a[i][j]<1) {
                    s++;
                    System.out.println(s +"\t");            
                    s = 0;
                }
            }
        }

    }       
}

有人可以解释为什么结果总是 1 以及为什么它在一行中计算列和行吗?

假设条件进入 if(a[i][j] >-1 || a[i][j]<1) 然后你将 s 增加 1 然后打印它得到 1 然后你将它重新分配给 s=0 所以它给出相同的 1每个 time.So 删除 s=0 并将打印行放在循环结束后

public class b {

public static void main(String[] args) {
    int a[][] = new int [5][5];
    int i,j;
    int s = 0;

    for(i= 0;i<a.length; i++)
        for(j = 0; j<a[i].length; j++){
            a[i][j] = (int)(Math.random()*10);
        }
    for(i=0;i<a.length;i++){
        for(j=0;j<a[i].length;j++)

        System.out.print(a[i][j] + "\t");
        System.out.println();   
    }

   for(j=0;j<a[0].length;j++){
    for(i=0;i<a.length;i++)
        if(a[i][j] >-1 && a[i][j]<1){
        s++;

       }
    System.out.println("Zero in column no. "+j+" is "+s +"\t");
    s=0;
    }

  }   
}

Demo

结果将为 1,因为您每次都将 0 重新分配给 s。但问题不仅如此。

首先,您的条件使用了错误的索引。在按列遍历时,您应该使用 a[j][i] 而不是 a[i][j] 。其次:

if(a[j][i] >-1 || a[j][i]<1){

可以简单写成:

if(a[j][i] == 0) {

所以结构是外部 for 循环将遍历每个列号。对于每个列号,内部 for 循环将找到 0 的计数。您必须在两个循环之外维护一个 max 变量,以跟踪当前的最大值。此外,您必须在外部 for 循环中使用另一个变量来存储当前列的计数。

每次内部 for 循环结束时,检查当前列数是否大于 max。如果是,请重置 max.

int max = 0;
for(j=0;j<a[0].length;j++){
    int currentColumnCount = 0;
    for(i=0;i<a.length;i++) {
        if(a[j][i] == 0) {
            currentColumnCount++;
        }
    }
    if (currentColumnCount > max) {
        max = currentColumnCount;
    }
}