Java 2d数组在列中计数零

时间:2015-04-04 10:49:39

标签: java arrays multidimensional-array

我自己开始学习编程大约4天前,而且我仍然坚持使用2d数组。我尝试用任务挑战自己,比如从大多数零的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以及为什么它会计算一行中的列数和行数?

2 个答案:

答案 0 :(得分:0)

假设条件进入if(a[i][j] >-1 || a[i][j]<1)然后你将s增加1然后打印出来1然后你将它重新分配给s=0所以每次给它1 。删除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)

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

首先你的条件是使用错误的指数。而不是a[i][j],您应该使用a[j][i],因为您正在逐列遍历。其次:

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;
    }
}