J'ai un tableau multidimensionnel où la deuxième dimension n'est pas toujours la même longueur.

Est-il possible d'initialiser un tableau où vous créez d'abord la première partie comme ceci

J'utilise ce tableau pour définir la longueur de chaque ligne de la matrice.

int[] config = {4,4,4,3,2,4};
boolean[][] array = new boolean[config.lenght][];

Puis après boucle sur le tableau et créer les sous-tableaux avec la longueur souhaitée?

for(int i = 0; i<config.length; i++)
    boolean[i][] = new boolean[config[i]];

PS: je n'utiliserai pas ArrayList

0
mama 19 oct. 2020 à 01:22

4 réponses

Meilleure réponse
public static int[][] generate(int[] config) {
    int[][] arr = new int[config.length][];
    Random random = new Random();

    for (int row = 0; row < arr.length; row++) {
        arr[row] = new int[config[row]];

        for (int col = 0; col < arr[row].length; col++)
            arr[row][col] = random.nextInt(100);
    }

    return arr;
}

Sortie:

[
  [97, 80, 78, 88],
  [31, 97, 34, 39],
  [67, 92, 89, 0],
  [29, 96, 72],
  [68, 77],
  [7, 65, 68, 51]
]
1
oleg.cherednik 18 oct. 2020 à 22:31

Vous pouvez également utiliser des flux:

int[] config = {4,4,4,3,2,4};
boolean[][] myArr = Arrays.stream(config).mapToObj(i -> new boolean[i]).toArray(boolean[][]::new);
    
for(boolean[] b : myArr){
    System.out.println(Arrays.toString(b));
}
0
Eritrean 18 oct. 2020 à 22:43

Je ne comprends pas bien la question, mais j'ai une suggestion pour une solution comme celle-ci.

            int[] config = {4,4,4,3,2,4};
            int[][] array = new int[config.length][config.length];
            for(int i = 0 ; i<config.length ; i++){
                array[i][0] = config[i];
            }

Sortie du tableau:

400000
400000
400000
300000
200000
400000
0
Atakan Kocaayan 18 oct. 2020 à 22:33

Vous pouvez affecter n'importe quel tableau D unique à un tableau 2D du même type.


int[] s = {1,2,3,4,5,6};

int[][] twoD = new int[s.length][];

for (int i = 0; i < v.length; i++) {
   twoD[i] = new int[]{s[i]}; // new array of one element of the `s` array
}

for ( int[] s : twoD) {
  System.out.println(s);
}

Impressions

[1]
[2]
[3]
[4]
[5]
[6]

Ou

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

Impressions

[[1], [2], [3], [4], [5], [6]]
0
WJS 18 oct. 2020 à 22:37