我自己开始学习编程大约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以及为什么它会计算一行中的列数和行数?
答案 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;
}
}
}
答案 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;
}
}