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;
}
}
}
结果将为 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;
}
}
我大约 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;
}
}
}
结果将为 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;
}
}