web-dev-qa-db-fra.com

Java Arrays.fill ()

Comment remplir un tableau multidimensionnel?

int[][] array = new int[4][6]; 
Arrays.fill(array, 0);

Je l'ai essayé, mais ça ne marche pas.

20
alphachap

Voici une suggestion utilisant un for-each:

for (int[] row : array)
    Arrays.fill(row, 0);

Vous pouvez vérifier que cela fonctionne en faisant

System.out.println(Arrays.deepToString(array));

Remarque: puisque vous créez le tableau, juste avant le remplissage, le remplissage n'est en fait pas nécessaire (tant que vous voulez vraiment des zéros dedans). Java initialise tous les éléments du tableau à leurs valeurs par défaut correspondantes, et pour int c'est 0 :-)

29
aioobe

Essaye ça:

for(int i = 0; i < array.length; i++) {
    Arrays.fill(array[i], 0);
}

Je ne l'ai pas testé mais je pense que ça devrait marcher.

13
Argote

Étant donné que tableau est vraiment un tableau de tableaux, vous pouvez peut-être essayer de boucler sur chaque ligne et de remplir individuellement chacune.

2
duffymo

Tout d'abord, notez que 0 est la valeur par défaut pour les tableaux int, vous n'avez donc pas à remplir quelque chose avec 0.

Si vous voulez que votre tableau reste vraiment multidimensionnel, vous aurez besoin d'une boucle.

public static void fill(int[][] array, int element) {
    for(int[] subarray : array) {
        Arrays.fill(subarray, element);
    }
}

Si vous n'avez besoin que d'un tableau 2D rempli du même élément et que vous ne souhaitez pas modifier les sous-réseaux plus tard, vous pouvez utiliser cette astuce:

public static int[][] create2DArray(int length, int subLength, int element) {
    int[] subArray = new int[subLength];
    Arrays.fill(subArray, element);
    int[][] array = new int[length][];
    Arrays.fill(array, subArray);
    return array;
}

Cela fonctionne de manière analogue pour les tableaux de dimension supérieure.

1
Paŭlo Ebermann