计算2D数组中每列的最小值

时间:2016-05-11 15:26:36

标签: java arrays

我有一个2D数组,我试图计算每列的最小值并将结果放在结果数组中。

下面的代码正在计算每行的最小值,我怎样才能得到每列的最小值。

        import java.util.*;

         class Test20 {

        public static void main ( String [] args) {


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



           Test20 test = new Test20();

        System.out.print(Arrays.toString(test.mincol(array)));
      }

     public static int[] mincol (int[][] n) {
    int[] result = new int[n.length];

    for (int i = 0; i < n.length; i++) {

        int min = n[0][i];

        for (int j = 0; j < n[0].length; j++) {

            if (n[j][i] < min) {
                min = n[j][i];
            }
        }
        result[i] = min;
    }
    return result;
     }
   }

5 个答案:

答案 0 :(得分:0)

只需按以下方式更改循环:

min = 0;
for(int i=0;i<n.length;i++){
     for(int j=0;j<n[0].length;j++){
        if(n[j][i]<n[j][min]){
        min=j;
}
result[i]=n[min][i];
}

请注意,您按照数组中第一个维度的长度实例化结果数组,但稍后使用n [] []参数进行循环并访问循环中第二个维度的长度。

如果您的两个昏暗数组是例如4x5,则会导致ArrayOutOfBoundsExceptions。

答案 1 :(得分:0)

你的for循环看起来不错。检查下面的代码我修复了一些小问题。

根据您的代码替换下面的类代码:

public class Test {
public static void main(String[] args) {
    int[][]array={{6,1,9}, {0,1,2}, {3,7,5}};
    int[] test;

    test = minrow(array);
    for(int i=0; i<test.length; i++){
        System.out.println(test[i]);
    }
}
public static int[] minrow(int[][] n){

    int [] result = new int[n.length];
    int min;

    for(int i=0;i<n.length;i++){
        min=0;
        for(int j=0;j<n[i].length;j++){
            if(n[i][j]<n[i][min]){
                min=j;
            }
        }
        result[i]=n[i][min];
    }
    return result;
}
}

答案 2 :(得分:0)

你只需要做同样的事情但是反转变量

for(int i=0;i<n.length;i++){
   for(int j=0;j<n[0].length;j++){
       if(n[j][i]<n[min][j]){
           min=i;
       }
       result[j]=n[min][j];
    }

}

答案 3 :(得分:0)

如果您的代码正确,只需更改:

if(n[i][j]<n[i][min]){
            min=j;
}

if(n[i][j]<n[result[i]][j]){
            result[i]=i;
}

终于

for(int i=0;i<n.length;i++) result[i]=n[result[i][j];

你不需要min。但改变

 int [] result = new int[n.length];

int [] result = new int[n[0].length];

答案 4 :(得分:0)

你如何转置你的二维数组:

     public static int[][] transpose (int[][] original) {
        int[][] array = new int[original.length][];
        // transpose
        if (original.length > 0) {
            for (int i = 0; i < original[0].length; i++) {
                array[i] = new int[original[i].length];
                for (int j = 0; j < original.length; j++) {
                    array[i][j] = original[j][i];
                }
            }
        }
        return array;
    }

然后将其命名为:

System.out.print(Arrays.toString(test.minrow(transpose(array))));

或者,如果你想没有转置,你可以这样做:

    public static int[] mincol (int[][] n) {
        int[] result = new int[n.length];
        for (int i = 0; i < n.length; i++) {
            int min = n[0][i];
            for (int j = 0; j < n[0].length; j++) {
                if (n[j][i] < min) {
                    min = n[j][i];
                }
            }
            result[i] = min;
        }
        return result;
    }