使用2D数组查找列中的最大数字

时间:2014-02-27 09:41:17

标签: java arrays

我试图编写一个找到列中最大数字的方法。但是,似乎我有问题找到一种方法来返回列中的最高数字,而不是考虑数组中的所有数字组合。我真的很感激任何意见或反馈!

这是我的代码:

public static void max1(int[][] score) {
    for (int i = 0; i < score.length; i++) {
        int max = score[0][0];
        for (int j = 0; j < score[i].length; j++)
            if (score[i][j] > max)
                max = score[i][j];
        System.out.println(max + "      ");
    }
}

7 个答案:

答案 0 :(得分:4)

您正在尝试查找行中的最大值而不是列。在代码中做一些更改

public static void max1(int[][] score) {
    for (int i = 0; i < score[0].length; i++) { // i should be your column
        int max = score[0][i];// assign 1st value of the column as max
        for (int j = 0; j < score.length; j++){ // j is your row
            if (score[j][i] > max){ // check the column elements instead of row elements
                max = score[j][i];// get the column values 
            }
        }
        System.out.println(max + "      ");
    }
}

答案 1 :(得分:2)

执行int max = score[0][i];而不是int max = score[0][0];因为如果你始终使用score[0][0]初始化max并且此int大于列中的最大值,则会得到错误的结果。

并做:

         if (score[innerloop][outerloop] > max)
            max = score[innerloop][outerloop];

而不是:

        if (score[outerloop][innerloop] > max)
            max = score[outerloop][innerloop];

这是逻辑上的失败,因为第一个索引是列,而secound是行。

    score[0][0] = 1;
    score[0][1] = 2;
    score[0][2] = 3;
    score[1][0] = 4;
    score[1][1] = 5;
    score[1][2] = 6;
    score[2][0] = 7;
    score[2][1] = 8;
    score[2][2] = 9;

数组现在看起来像这个矩阵:

 1 2 3
 4 5 6 
 7 8 9

您希望比较例如1,4,7,因此您需要比较score[0][0]score[0][1]score[0][2]。因此,secound索引必须是内部for循环的计数器。

答案 2 :(得分:1)

您需要指定要在行中找到最大值和循环的列的索引:

public static int maxCol(int [][] score, int colIndex) {
    int max = score[0][colIndex];
    for(int i = 0 ; i < score.length ; ++i) {
        max = Math.max(max, score[i][colIndex]);
    }
    return max;
}

答案 3 :(得分:1)

首先,您应该将int max = score[0][0];更改为int max = Integer.MIN_VALUE;,因为它可能会产生无效的结果。

第二个是你需要在比较时交换索引

 if (score[j][i] > max) {
        max = score[j][i];
 }

答案 4 :(得分:1)

public static void max1(int[][] score) {
    for (int i = 0; i < score.length; i++) {
        int max = -1;
        for (int j = 0; j < score[i].length; j++)
            if (score[i][j] > max)
                max = score[i][j];
        System.out.println("max: '" + max + "'");
    }
}

也许你改变了你的列和行,意味着你也必须切换代码,对我来说已经发生了很多。尝试检查我是否是你的行,j是你的列。< / p>

答案 5 :(得分:1)

以下代码打印每列中的最大数量。

public static void max1(int[][] score) {
    for (int i = 0; i < score.length; i++) {
        int max = Integer.MIN_VALUE; // set max to minimum value before starting loop
        for (int j = 0; j < score[i].length; j++)
        {
            if (score[i][j] > max)
                max = score[i][j];
        }
        System.out.println(max + "      ");
    }
}

答案 6 :(得分:1)

static int max1(int[][] score) {
    int max = score[0][0]; // set initial value to the first index in array
    for (int i = 0; i < score.length; i++) { // cycle through row
        for (int j = 0; j < score[i].length; j++) { // cycle through colmn
            if (score[i][j] > max) { // if the index value is greater than largest number
                max = score[i][j]; // make it the new index value
            }
        }
    } return max;
}