2017-09-21 2 views
1

J'ai un tableau 2D 4x4 qui a déjà des valeurs dans chaque index. Je veux avoir une fonction qui calcule la somme d'une ligne/colonne du tableau et le stocke dans la première/dernière colonne et que les autres index reviennent à 0.Comment puis-je trouver la somme des valeurs d'un tableau multidimensionnel et remplacer les valeurs des index inutilisés?

Voici ce que je dois rendre mon tableau:

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(); 
    } 
} 

qui affiche quelque chose comme ceci:

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

Actuellement c'est la fonction que j'ai:

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; 
     } 
    } 
} 

qui fait cela:

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

Je veux juste trouver un algorithme qui le faire sans « tricher » ou tout simplement le piratage de mon chemin à travers elle.

Répondre

3

Tout ce que vous devez faire est de boucle sur les éléments de la « ligne "tableau:

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'? Bien sûr, ils font de même, mais la cohérence est une bonne chose dans la programmation * (à mon avis, au moins) *. – Andreas

+0

On dirait que deux personnes pensent de cette façon et l'autre dans une autre. 2 vs 1. – egorlitvinenko

+0

@Andreas mémoire musculaire pour le code que je me suis tapé ... –

2

Utilisez la boucle interne dans l'ordre inverse:

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

Cela ne devrait-il pas être' numbers [i] [0] + = sum; // somme finale'? – Andreas

+0

@Andreas le contrôle est déjà là .'j == 0' et oui ce serait + = – nullpointer

2

Pourquoi ne vous faites simplement ceci:

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; 
    } 
}