2015-04-04 122 views
0
中计数为零

我自己开始学习大约4天的编程,并且iam一点点卡住了2d数组。我试着挑战自己与任务,比如从二维数组列中获取大部分零或至少算了算零,到目前为止,我走到这一步Java 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,为什么它计算列和行中的行?

+1

因为你reassingning'S = 0;' – silentprogrammer 2015-04-04 10:51:24

+0

如果你刚开始学习编程,请进入正确缩进你的代码的习惯 - 基本上,增加缩进当您打开{块,减少它就在你用}关闭一个块之前。它使其他人(和你)更容易阅读你的代码。 – 2015-04-04 10:54:28

+0

@singhakash没有它,它计数1,2,3,4等 – ArtG 2015-04-04 10:55:41

回答

0

假设条件进入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

+0

它如何找到最大计数为零的列? – 2015-04-04 11:00:34

+0

@RohitJain OP不询问为什么它只打印1? – silentprogrammer 2015-04-04 11:11:10

+0

@singhakash谢谢你的回应,但是如果行不等于列,那么我得到一个错误类似“java.lang.ArrayIndexOutOfBoundsException”我需要添加异常或什么? – ArtG 2015-04-04 12:37:51

0

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

首先你的情况是使用错误的索引。在列顺序遍历时,应该使用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; 
    } 
} 
+0

,但它没有错?整数只包含逗号后没有数字的整数?在你的例子中,它统计了整个数组中的零,但是我怎样才能算出每行的零呢? – ArtG 2015-04-04 11:26:35