1
votes

Comment créer un tableau multidimensionnel avec une longueur aléatoire de colonnes en Java?

J'ai besoin de créer un tableau multidimensionnel en Java mais avec une longueur aléatoire de colonnes.

Par exemple, supposons que les longueurs aléatoires soient 3, 2, 4 et 1, donc nous aurions quelque chose comme ceci: >

int articles[][] = new int[50][(int) Math.floor(Math.random() * 30 + 1)];

J'ai essayé ceci, mais cela ne crée pas une longueur aléatoire pour chaque colonne:

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

Est-ce que quelqu'un sait comment réaliser ceci?

Remarque: Le tableau aura toujours 50 lignes, j'ai juste besoin que chaque colonne soit aléatoire.


0 commentaires

3 Réponses :


2
votes

Essayez d'initialiser vos tableaux dans un tableau, dans n'importe quelle boucle, par exemple:

int articles[][] = new int[50][];
for (int i = 0; i < 50; i++) {
    articles[i] = new int[(int) Math.floor(Math.random() * 30 + 1)];
}


0 commentaires

0
votes
  1. Je vous recommande d'étudier les méthodes utilitaires dans java.util.Arrays . C'est une mine d'or de méthodes d'aide pour travailler avec des tableaux. Depuis la 1.8, il a celui-ci:

    Random r = new Random();
    int articles[][] = new int[50][];
    Arrays.setAll(articles, i -> new int[r.nextInt(30)]);
    

    L'utilisation d'un lambda n'est pas plus efficace qu'une boucle simple dans ce cas de problème mais se prête souvent à des solutions globales plus précises.

  2. Je recommanderais également de ne pas mettre à l'échelle double à int vous-même (voir la source de Random.nextInt () et décider de vous-même).

    int articles[][] = new int[50][];
    Arrays.setAll(articles, i -> new int[(int)Math.floor(Math.random() * 30 + 1)]);
    

0 commentaires

0
votes

Pour créer un tableau avec un nombre constant de lignes, mais une longueur de ligne aléatoire, et le remplir avec des nombres aléatoires:

[3, 8]
[2, 7, 6, 8, 4, 9, 3, 4, 9]
[5, 4]
[0, 2, 8, 3]
[]
// output
Arrays.stream(arr).map(Arrays::toString).forEach(System.out::println);
int rows = 5;
int[][] arr = IntStream
        .range(0, rows)
        .mapToObj(i -> IntStream
                .range(0, (int) (Math.random() * 10))
                .map(j -> (int) (Math.random() * 10))
                .toArray())
        .toArray(int[][]::new);


0 commentaires