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.
3 Réponses :
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)];
}
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.
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)]);
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);