繁体   English   中英

请帮助我的二维数组源代码

[英]Please help with my twodimensional array source code

这是我所做的,但是我有一些问题:

class masivins {
    public static void main (String args[]) {

        int mas[][] = {{0, 2, 7, 0, 8, 5, 3},
                       {0, 4, 0, 6, 0, 0, 0},
                       {0, 0, 0, 0, 3, 0, 0},
                       {7, 0, 0, 9, 1, 0, 7},
                       {5, 0, 4, 0, 0, 2, 0}};

        int nulmas[] =  new int [7]; 
        int nul=0; 

        for(int j=0; j<7; j++) {
            nul=0;
            for(int i=0; i<5; i++) {
                if(mas[i][j]==0) { 
                    nul++;          
                }
            }
            nulmas[j]=nul; 
        }
        for(int i=0; i<5; i++) {
            for(int j=0; j<7; j++) {
                System.out.println(mas[i][j]);
            }
            System.out.println();
        }
        System.out.println();

        for(int i=0; i<5; i++) {

            System.out.println("Zeros in each array column: " + nulmas[i]);
        }
        System.out.println();
    }
}

所以我的问题是:

  1. 为什么在运行项目之后,仅显示5个“每个数组列中的零.....”?
  2. 我需要在此代码中进行哪些更改以及在何处更改以得出零最小的列数?

问题1-查看您的代码:

for(int i=0; i<5; i++) {
    System.out.println("Zeros in each array column: " + nulmas[i]);
}

特别要看一下循环。 希望它打印几行?

问题2:您可以保持“到目前为止,数组列中的最少0”和“出现最少0的列”-然后在设置nulmas[j]的内部循环末尾更新这些变量。 。

1)因为您从0循环到4:

for(int i=0; i<5; i++) {

如果循环到7,则将打印所有值:

for(int i=0; i<7; i++) {
    System.out.println("Zeros in each array column: " + nulmas[i]);
}

2)您可以保留一个索引和一个最小计数器。 最小计数器存储最小的零个数,该数目为找到该零个数的列的索引:

int nulmas[] =  new int [7]; 
int nul=0; 
int minNuls=5;
int minIndex=0;

for(int j=0; j<7; j++) {
    nul=0;
    for(int i=0; i<5; i++) {
        if(mas[i][j]==0) { 
            nul++;          
        }
    }
    nulmas[j]=nul; 
    if (nul < minNul) {
        minNul = nul;
        minIndex = j;
    }
}

您似乎非常接近回答这个问题。 在我看来,您已将nul_mas数组设置为在每一列中包含零个数字,因此问题就变成了“ nul_mas哪个索引值最小?”。 您可以使用两个变量来执行此操作-一个用于到目前为止所看到的最小值,一个用于在其中看到索引的变量-以及循环遍历该数组以依次查看每个元素。 (然后,当它正常工作时,请考虑如果打成平手该怎么办。)

尝试:

 int leastZeroIndex = 0;

 for(int i=0;i<5;i++) {
   if (nul_mas[i] < nul_mas[leastZeroIndex])
     leastZeroIndex = i;
 }

 System.out.print(leastZeroIndex);

尽管不检查是否有多个行的零值最低。

在我看来,好像您需要创建一些新的数组,因此为每个列创建一个数组,然后在其中放置该列的数字。 之后,只需遍历代表列的数组并计数数字(您可以使用一种方法来做到这一点,即int count(int num, int[] arr) 。代码量。

int[][] mas  = ...; // (you have this already), it's [NO_OF_ARRS][NO_OF_COLS] with the data
int[][] colsarrs = new int[NO_OF_COLS][NO_OF_ARRS];

for (int i = 0; i < NO_OF_ARRS; i++) {
    for (int j = 0; j < NO_OF_COLS; i++) {
        colsarrs[j][i] = mas[i][j];
    }
}

int[] resultarr = new int[NO_OF_COLS];
for (int i = 0; i < NO_OF_COLS; i++) {
    resultarr[i] = count(0, colsarrs[i]);
}

int count(int num, int[] arr) {
    int count;
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == num) ++count;
    }
    return count;
}

将零的数量存储在从此函数为每一列收集的另一个数组(resultarr)中。 此后,遍历数组并找到最低编号,然后获取其索引。 那是您的列中的零值最低。

int lowestcurr = 0;
for (int i = 0; i < NO_OF_COLS; i++) {
    if (resultarr[i] < resultarr[lowestcurr]) {
        lowestcurr = i;
    }
}
  for(int i=0; i<5; i++) { System.out.println("Zeros in each array column: " + nulmas[i]); } System.out.println(); place there it 

更改:

int minElement = 0;
    for(int i=0; i<7; i++) {
        if (nulmas[i] < nulmas[minElement]) minElement = i;
        System.out.println("Zeros in each array column: " + nulmas[i]);
    }
    System.out.println(nulmas[minElement]);

最好使用“ \\ n”在控制台中跳过一行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM