2017-09-21 15 views
1

我有4x4二维数组,每个索引中都有值。我想有一个函数,计算数组的行/列的总和,并将其存储在第一/最后一列,并让其他索引恢复为0.如何找到多维数组的值的总和并替换未使用的索引的值?

这就是我必须渲染我的数组:

public static void print2Darray(int[][] numbers) { 
    for (int i = 0; i < numbers.length; i++) { 
     for (int j = 0; j < numbers.length; j++) { 
      System.out.print(numbers[i][j]); 
      System.out.print("\t"); 
     } 
     System.out.println(); 
    } 
} 

该款显示器是这样的:

10 15 30 40 
15 5 8 2 
20 2 4 2 
1 4 5 0 

目前是这样的功能,我有:

public static void sumLeft(int[][] numbers) { 
    for (int i = 0; i < numbers.length; i++) { 
     numbers[i][0] = (numbers[i][0] + numbers[i][1] + numbers[i][2] + numbers[i][3]); 
     if (i == 3) { 
      numbers[0][1] = 0; 
      numbers[0][2] = 0; 
      numbers[0][3] = 0; 
      numbers[1][1] = 0; 
      numbers[1][2] = 0; 
      numbers[1][3] = 0; 
      numbers[2][1] = 0; 
      numbers[2][2] = 0; 
      numbers[2][3] = 0; 
      numbers[3][1] = 0; 
      numbers[3][2] = 0; 
      numbers[3][3] = 0; 
     } 
    } 
} 

哪些做到这一点:

95 0 0 0 
30 0 0 0 
28 0 0 0 
10 0 0 0 

我只是想找到一个算法,会做这种没有“作弊”或只是通过它黑客我的方式。

回答

3

所有你需要做的是遍历所有的“行的元素“array:

public static void sumLeft(int[][] numbers) { 
    for (int i = 0; i < numbers.length; i++) { 
     for (int j = 1; j < numbers[i].length; j++) { 
      numbers[i][0] += numbers[i][j]; 
      numbers[i][j] = 0; 
     } 
    } 
} 
+1

'i ++'vs'++ j'?当然,他们也是这样做的,但在编程*中一致性是一件好事(在我看来,至少)*。 – Andreas

+0

看起来像两个人以这种方式思考,一个在另一个。 2 vs 1. – egorlitvinenko

+0

@Andreas肌肉记忆为代码我输入我自己... –

2

使用内循环以相反的顺序为:

for (int i = 0; i < numbers.length; i++) { // for all rows 
    int sum = 0; // about to be sum, reset every row 
    for (int j = numbers[i].length -1 ; j >=0; j--) { // iterate reverse in columns 
     if (j == 0) { 
      numbers[i][j] += sum; // final sum 
     } else { 
      sum += numbers[i][j]; // keep evaluating 
      numbers[i][j] = 0; //reset 
     } 
    } 
} 
+1

不应该是'numbers [i] [0] + = sum; //最终总和? – Andreas

+0

@Andreas支票已经存在了.'j == 0'并且是的,它会是+ = – nullpointer

2

你为什么不这样做简单的:

for (int i = 0; i < numbers.length; i++) { 
    for (int j = 1; j < numbers[i].length; j++) { 
     numbers[i][0] += numbers[i][j]; 
     numbers[i][j] = 0; 
    } 
} 
相关问题