我一直都在寻找一个好的答案,但我很惊讶我无法找到一个完成了我想做的事情。我想创建一个方法,在锯齿状的2D数组中查找列和,无论大小,是否有锯齿状等。这是我的代码:
public static int addColumn(int[][] arr, int x){
int columnSum = 0;
int i = 0;
int j = 0;
int numRows = arr.length;
//add column values to find sum
while (i < numRows){
while (j < arr.length){
columnSum = columnSum + arr[i][x];
j++;
i++;
}
}//end while loop
return columSum;
因此,例如,考虑我有以下数组:
int[][] arr = { {10, 12, 3}, {4, 5, 6, 8}, {7, 8} };
我希望能够将x传递为2,并找到第3列的总和为9.或者将x传递给3以找到第4列,这只是8。我的代码有缺陷,因为我有它现在,我已经尝试了大约一百件事来使其发挥作用。这是一项家庭作业,所以我正在寻求帮助来理解逻辑。当我运行该方法时,我当然不断获得Out of Bounds Exception。我想我此刻已经过度思考,因为我不认为这应该太复杂了。谁能帮我吗?非常感谢!
答案 0 :(得分:1)
我认为你的第二个while
循环会让你的金额太大。你应该只需要迭代行。
while( i < numRows )
{
if( x < arr[i].length )
{
columnSum += arr[i][x];
}
++i;
}
答案 1 :(得分:0)
//我看到上面的代码都没有,因为在这里发布符合要求的代码。由于时间不够,代码可能看起来没有排列或优化。谢谢.... :)
package LearningJava;
import java.util.Scanner;
public class JaggedSum {
public static void main(String[] args) {
int ik=0;
int ij=0;
Scanner scan=new Scanner(System.in);
int p=0;
int q=0;
int[][]arr=new int[2][];
System.out.println("Enter the value of column in Row 0 ");
p=scan.nextInt();
System.out.println("Enter the value of column in Row 1 ");
q=scan.nextInt();
arr[0]=new int[p];
arr[1]=new int[q];
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
arr[i][j]=scan.nextInt();
}
}
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
if(arr[1].length>arr[0].length){
int[] columnSum=new int[arr[1].length];
int x;
for(x=0;x<arr[0].length;x++){
columnSum[x] = arr[0][x] + arr[1][x];
System.out.println(columnSum[x]);
}
ik=arr[0].length;
for(int j=ik;j<arr[1].length;j++){
columnSum[j]= arr[1][j];
System.out.println(columnSum[j]);
}
}
else{
int[] columnSum=new int[arr[0].length];
int x;
for(x=0;x<arr[1].length;x++){
columnSum[x] = arr[0][x] + arr[1][x];
System.out.println(columnSum[x]);
}
ij=arr[1].length;
for(int j=ij;j<arr[0].length;j++){
columnSum[j]= arr[0][j];
System.out.println(columnSum[j]);
}
}
}
}
答案 2 :(得分:0)
在 Java 8 中,您可以将 IntStream
用于此目的:
public static int addColumn(int[][] arr, int x) {
// negative column index is passed
if (x < 0) return 0;
// iteration over the rows of a 2d array
return Arrays.stream(arr)
// value in the column, if exists, otherwise 0
.mapToInt(row -> x < row.length ? row[x] : 0)
// sum of the values in the column
.sum();
}
public static void main(String[] args) {
int[][] arr = {{10, 12, 3}, {4, 5, 6, 8}, {7, 8}};
System.out.println(addColumn(arr, 2)); // 9
System.out.println(addColumn(arr, 3)); // 8
System.out.println(addColumn(arr, 4)); // 0
System.out.println(addColumn(arr, -1));// 0
}