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

时间:2010-03-20 20:59:10

标签: java

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

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个“Z”?显示?
  2. 我需要在此代码中更改的内容和位置,以获得零最少的列数?

6 个答案:

答案 0 :(得分:2)

问题1 - 查看您的代码:

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

特别是,看看循环。您期望打印出多少行?

问题2:你可以在目前为止的数组列中保留“最少数量为0”和“出现最少数量为0的列” - 然后在设置{的内循环结束时更新这些变量{1}}。

答案 1 :(得分:1)

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)你可以保留一个索引和一个最小的计数器。 min计数器存储最小零数,索引是找到它的列:

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

答案 2 :(得分:1)

你似乎非常接近回答这个问题。在我看来,您已经设置了nul_mas数组以包含每列中的零数,因此问题变为“nul_mas的哪个索引具有最小值?”。你可以用两个变量做到这一点 - 一个用于到目前为止看到的最小值,一个用于看到它的索引 - 以及一个循环遍历该数组以依次查看每个元素。 (然后,当你开始工作时,考虑如果有平局会发生什么。)

答案 3 :(得分:1)

尝试:

 int leastZeroIndex = 0;

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

 System.out.print(leastZeroIndex);

虽然没有检查是否有多行具有最低的零值。

答案 4 :(得分:0)

在我看来,您需要创建一些新数组,因此为每列创建一个数组,然后将列的数字放在那里。之后,只需迭代表示列的数组数组并计算数字(您可以使用一种方法来执行此操作,即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;
    }
}

答案 5 :(得分:0)

    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”跳过控制台中的一行