Java 获取2D数组的最大和

Java 获取2D数组的最大和,java,multidimensional-array,Java,Multidimensional Array,有一个二维数组。int[]arr={{1,3,4,1},{5,7,8,9},{6,1,2,1}。我想得到每列的总和,并得到最大值。最后应该返回{5,7,8,9}。因为它有最大的总和。我已经提到,我尝试了下面的代码,但它没有返回正确的值。帮我解决这个问题吧你的k应该用最大的和来跟踪索引。所以当你重置max时,你需要说k=i。你说我错了。更改它会使程序按需要运行 public static void main( String args[] ) { int[][] arr = { { 1, 3

有一个二维数组。int[]arr={{1,3,4,1},{5,7,8,9},{6,1,2,1}。我想得到每列的总和,并得到最大值。最后应该返回{5,7,8,9}。因为它有最大的总和。我已经提到,我尝试了下面的代码,但它没有返回正确的值。帮我解决这个问题吧

你的k应该用最大的和来跟踪索引。所以当你重置max时,你需要说k=i。你说我错了。更改它会使程序按需要运行

public static void main( String args[] ) {
    int[][] arr = { { 1, 3, 4, 1 }, { 5, 7, 8, 9 }, { 6, 1, 2, 1 } };

    int indexOfMaxSum = 0;
    int maxSum = 0;

    for ( int i = 0; i < arr.length; i++ ) {
        int[] innerArr = arr[ i ]; // grab inner array
        int sum = 0; // start sum at 0
        for ( int j : innerArr ) {
            // iterate over each int in array
            sum += j; // add each int to sum
        }
        if ( sum > maxSum ) {
            // if this sum is greater than the old max, store it
            maxSum = sum;
            indexOfMaxSum = i;
        }
    }

    System.out.println( String.format( "Index %d has the highest sum with a sum of %d", indexOfMaxSum, maxSum ) );
    int [] arrayWithLargestSum = arr[indexOfMaxSum]; // return me

}

编辑:原始问题中曾经有一段代码,此解决方案引用了该代码。

我建议您找到一种方法,将问题分解为更小的部分,用函数解决每个部分,然后将所有内容组合成一个解决方案

解决方案示例如下:

公共班机{ 公共静态长sumint[]a{ 长和=0; 对于int i:a{ sum=sum+i; } 回报金额; } 公共静态int[],其中MaxSumofInt[]为{ //为每个数组保留一个和 long[]总和=新的long[as.length]; //算数 对于int i=0;i0 System.out.print; System.out.printx; } System.out.println; } }
我想这可能是你的问题:

for(int i=0;i<3;i++) {
    if(arr2[i]>max) {
        max=arr2[i];
        i=k;
    }
}
我认为I=k真的需要是k=I

还要注意,使用更好的变量名是值得的。例如,索引而不是i。什么是k?称之为indexForHighestSum或类似的东西。它不需要那么长,但k是一个没有意义的名字

此外,还可以将求和循环与“查找最高值”循环相结合

最后,我可能会这样写:

public class twoDMax {
  public static void main(String args[]) {
    int[][] arr= { {1,3,4,1}, {5,7,8,9}, {6,1,2,1} };
    int indexForMaxRow = 0;
    int previousMax = 0;

    for(int index = 0; index < 4; ++index) {
        int sum = 0;
        for(int innerIndex = 0; innerIndex < 4; ++innerIndex) {
            sum += arr[index][innerIndex];
        }
        if (sum > previousMax) {
            previousMax = sum;
            indexForMaxRow = index;
    }

    System.out.println(indexForMaxRow);
    for(int index = 0; index < 4; ++index) {
        System.out.println(arr[indexForMaxRow][index]);
    }
  }
}

我做了一些其他时尚的事情。我使用了更明显的变量名。我对空格的要求更高,这使得代码更容易阅读。

如果需要max列,那么我可能会有一个解决方案:

import java.util.Arrays;

public class ArrayTest {
    public static void main(String args[]) {
        /*
         * 1 3 4 1 
         * 5 7 8 9 
         * 6 1 2 1
         * 
         */


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



        int m = arr.length;
        int n = arr[0].length;
        int[] arr2 = new int[n];
        int p = 0;

        int[][] colArray = new int[n][m];

        for (int i = 0; i < n; i++) {
            int[] arr_i = new int[m];
            //System.out.println("i = " + i);
            //System.out.println("p = " + p);
            int sum = 0;
            for (int j = 0; j < m; j++) {
                arr_i[j] = arr[j][p];
                sum += arr_i[j];
            }
            //System.out.println("Col: " + p + " : " + Arrays.toString(arr_i));
            colArray[i] = arr_i;
            arr2[p] = sum;
            p++;

        }
        System.out.println("Sum: " + Arrays.toString(arr2));
        int k = 0;
        int max = arr2[0];
        for (int i = 0; i < 3; i++) {
            if (arr2[i] > max) {
                max = arr2[i];
                k = i;
            }
        }
        System.out.println("Column index for max: " + k);
        System.out.println("Column: " + Arrays.toString(colArray[k]));
    }
}

为什么要返回5,7,8,9?这既不是列,也不是最大值。@PritamBanerjee 5,7,8,9总和最高。它的总和是29。这就是为什么我想返回{5,7,8,9},但那是一行而不是一列。这里不应该是{6,7,8,9},因为第一列中有一个6吗?i=k应该是k=i。只有代码的答案根本没有帮助。请解释你的代码。请帮助消除StackOverflow是一个免费代码编写服务的误解,方法是用一些散文的解释来补充你的代码答案。伙计,我想返回{5,7,8,9},而不是总和。以上答案返回29 asanswer@ShehanLakshmen回答者注意到了你的评论。请考虑删除它。-没有代码的解释。与其他答案相比,这是一个多么令人耳目一新的变化。不过,我只添加了一些代码格式,希望不会破坏这里的气氛。@Yunnosch是的,这更具可读性。我也对丢失的分号感到内疚。
Sum: [12, 11, 14, 11]
Column index for max: 2
Column: [4, 8, 2]