Comment générer un tableau de tableau 2D 4X4 avec chaque élément différent?
Voici mon code:
public class Game { public static void main(String[] args) { int gameboard[][] = new int[4][4]; for (int row=0; row < gameboard.length; row++) { for (int col=0; col < gameboard[row].length; col++) { gameboard[row][col] = ((int)(1+Math.random() * 16)); System.out.printf("%-4d",gameboard[row][col]); } System.out.println(); } } }
3 Réponses :
Vous pouvez d'abord utiliser un Set
pour éviter les doublons, puis une List
pour y accéder facilement
Set<Integer> set = new LinkedHashSet<>(); int gameboard[][] = new int[4][4]; while(set.size() != 4*4){ set.add((int)(1+Math.random() * 16)); } List<Integer> list = new ArrayList<>(set); for (int row=0; row < gameboard.length; row++) { for (int col=0; col < gameboard[row].length; col++) { gameboard[row][col] = list.get(row*gameboard.length + col); System.out.printf("%-4d",gameboard[row][col]); } System.out.println(); } }
cela fonctionne, mais les nombres générés semblent toujours être 1,2,3,4,5, ... 15 au lieu d'être générés aléatoirement
@ user10947891 oups oui, besoin de LinkedHashSet
pour conserver l'ordre d'insertion
Il vous suffit de mettre un contrôle après comme:
int a == gameboard[row][col]; for (int row=0; row < gameboard.length; row++) { for (int col=0; col < gameboard[row].length; col++) { gameboard[row][col] = ((int)(1+Math.random() * 16)); if(gameboard[row][col] == a){ col = col - 1; } } }
Solution 1:
List<Integer> myList = IntStream.range(1, 17).boxed().collect(Collectors.toList()); Collections.shuffle(myList); for (int row = 0; row < gameboard.length; row++) { for (int col = 0; col < gameboard[row].length; col++) { gameboard[row][col] = myList.get(row * gameboard.length + col); System.out.printf("%-4d", gameboard[row][col]); } System.out.println(); }
Ici, à chaque itération, nous vérifions si le nombre aléatoire généré est présent dans l'ensemble . S'il est présent, nous bouclons jusqu'à ce que nous obtenions un nombre aléatoire différent qui n'est pas présent dans l'ensemble.
Solution 2:
public static void main(String[] s1) throws Exception { int gameboard[][] = new int[4][4]; Set<Integer> mySet = new HashSet<>(); for (int row = 0; row < gameboard.length; row++) { for (int col = 0; col < gameboard[row].length; col++) { int randNum = (int) (1 + Math.random() * 16); while (mySet.contains(randNum)) { randNum = (int) (1 + Math.random() * 16); } mySet.add(randNum); gameboard[row][col] = randNum; System.out.printf("%-4d", gameboard[row][col]); } System.out.println(); } }
Ici, nous générons une liste de nombres, puis nous la mélangeons en utilisant Collections.shuffle () . Nous parcourons maintenant le tableau multidimensionnel et attribuons les valeurs de la liste au tableau.
Veuillez également envisager de voter pour la réponse. Que dois-je faire lorsque quelqu'un répond à ma question?