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