Java: Problème d'utilisation de tableau 2D
Fermé
vincenormand
-
15 oct. 2011 à 18:22
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 - 15 oct. 2011 à 20:51
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 - 15 oct. 2011 à 20:51
A voir également:
- Java: Problème d'utilisation de tableau 2D
- Tableau croisé dynamique - Guide
- Notice d'utilisation - Guide
- Jeux java itel ✓ - Forum Jeux vidéo
- Java runtime - Télécharger - Langages
- Tableau ascii - Guide
1 réponse
KX
Messages postés
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 004
15 oct. 2011 à 19:05
15 oct. 2011 à 19:05
Math.random() renvoit un double entre 0 inclu et 1 exclu
Donc ta valeur random sera comprise entre 0 et size-2 (size-1 est exclu comme 1)
Et size-1-random est compris entre 1 (0 est exclu) et size-1.
Ta boucle do while testera donc uniquement [size-1][0], [size-2][1]... [1][size-2].
Il n'y a donc que size-1 possibilités. Or quand tu exécutes ta boucle for tu élimines à chaque tour une des possibilités de quitter la boucle do while.
Lorsque tu arrives à i=size-1, il ne reste donc plus que tabMines[0][size-1] qui est égal à false, mais la boucle do while ne pourra jamais la trouver et boucle à l'infini.
La résolution de ton problème est donc simple, tu dois faire Math.random() * size;
Donc ta valeur random sera comprise entre 0 et size-2 (size-1 est exclu comme 1)
Et size-1-random est compris entre 1 (0 est exclu) et size-1.
Ta boucle do while testera donc uniquement [size-1][0], [size-2][1]... [1][size-2].
Il n'y a donc que size-1 possibilités. Or quand tu exécutes ta boucle for tu élimines à chaque tour une des possibilités de quitter la boucle do while.
Lorsque tu arrives à i=size-1, il ne reste donc plus que tabMines[0][size-1] qui est égal à false, mais la boucle do while ne pourra jamais la trouver et boucle à l'infini.
La résolution de ton problème est donc simple, tu dois faire Math.random() * size;
15 oct. 2011 à 20:25
Mon problème quand je regarde en debug est que au premier tour de boucle DoWhile, "tabMines[size - 1 - random][random].getMine()" retourne false.
Il fait donc setMine() et setIcon(). Puis au 2ème tour du 2ème For, dans le DoWhile, "tabMines[size - 1 - random][random].getMine()" retourne True pour tous les objets qui suivent.
Comme si la ligne :
"tabMines[size - 1 - random][random].setMine(true); "
assignait True à tous les objets dans le tableau quand il devrait seulement l'assigner à "tabMines[size - 1 - random][random]"
En tout cas, merci quand même
15 oct. 2011 à 20:51