Problème java boucle
tiDevDu54
Messages postés
16
Statut
Membre
-
tiDevDu54 Messages postés 16 Statut Membre -
tiDevDu54 Messages postés 16 Statut Membre -
Bonjour,
Je vous résume mon jeu en java pour le moment :
J’ai une grille sur laquelle j’ai placé un bonhomme (image) qui se déplace grâce aux touches directionnelles. Et sur cette grille je voudrai mettre au hasard plusieurs cadeaux sur mes cases. Mes cases sont des JPanels. En fait j’essai de trouver un moyen pour ne pas avoir deux cadeaux sur la même case. J’ai écrit une fonction : généréCadeau( int nombreCadeau). Je vous écris le code, malheureusement sa ne fonctionne pas et j’aimerai savoir pourquoi.
//création d'un tableau de hachage pour mes cadeaux
for(int i=0;i<nombreCadeau;i++)
{
tabCadeau.put("cadeau"+i, new JLabel( new ImageIcon("image/cadeau.gif")));
}
////////////////////////////////////////////
int nbPanel = 109; //nombre de panel
int hazar = 0;
int i = 0;
int j;
//on gère directement le premier cadeau
hazar = (int) (Math.random()*nbPanel);
tabPanel.get("monPanel"+hazar).add(tabCadeau.get("cadeau"+i));
tableauTirage.add(hazar);
i++;
while (tableauTirage.size()!=nombreCadeau)
{
//on tire un nombre au hasard
hazar = (int) (Math.random()*nbPanel);
//on insère dans le tableau le nombre tiré au hasard
tableauTirage.add(hazar);
j = 0;
//tant qu'on n'arrive pas à la fin du tableau
//et que le nombre tiré au hasard est diférent du nombre à l'élément j du tableau
while((hazar!=tableauTirage.get(j)) || (j<tableauTirage.size()))
{
//on avance
j++;
}
//on arrive ici soit parce qu'on est arrivé à la fin du tableau
//soit parce que le nombre tiré au hasard est égal au nombre j dans le tableau
//on test si le nombre dans le tableau est égal au nombre tiré au hasard
if(hazar!=tableauTirage.get(j))
{
//si le nombre tiré au hasard n'est pas trouvé dans le tableau des nombres précédement tiré au hasard
//on ajoute le cadeau au panel i
tabPanel.get("monPanel"+hazar).add(tabCadeau.get("cadeau"+i));
//on retire un nombre au hasard
hazar = (int) (Math.random()*nbPanel);
i++;
}
}
pane.add(layeredPane);
}
Sa a l’air de bloquer dans les indices dans le deuxième while
Je vous résume mon jeu en java pour le moment :
J’ai une grille sur laquelle j’ai placé un bonhomme (image) qui se déplace grâce aux touches directionnelles. Et sur cette grille je voudrai mettre au hasard plusieurs cadeaux sur mes cases. Mes cases sont des JPanels. En fait j’essai de trouver un moyen pour ne pas avoir deux cadeaux sur la même case. J’ai écrit une fonction : généréCadeau( int nombreCadeau). Je vous écris le code, malheureusement sa ne fonctionne pas et j’aimerai savoir pourquoi.
//création d'un tableau de hachage pour mes cadeaux
for(int i=0;i<nombreCadeau;i++)
{
tabCadeau.put("cadeau"+i, new JLabel( new ImageIcon("image/cadeau.gif")));
}
////////////////////////////////////////////
int nbPanel = 109; //nombre de panel
int hazar = 0;
int i = 0;
int j;
//on gère directement le premier cadeau
hazar = (int) (Math.random()*nbPanel);
tabPanel.get("monPanel"+hazar).add(tabCadeau.get("cadeau"+i));
tableauTirage.add(hazar);
i++;
while (tableauTirage.size()!=nombreCadeau)
{
//on tire un nombre au hasard
hazar = (int) (Math.random()*nbPanel);
//on insère dans le tableau le nombre tiré au hasard
tableauTirage.add(hazar);
j = 0;
//tant qu'on n'arrive pas à la fin du tableau
//et que le nombre tiré au hasard est diférent du nombre à l'élément j du tableau
while((hazar!=tableauTirage.get(j)) || (j<tableauTirage.size()))
{
//on avance
j++;
}
//on arrive ici soit parce qu'on est arrivé à la fin du tableau
//soit parce que le nombre tiré au hasard est égal au nombre j dans le tableau
//on test si le nombre dans le tableau est égal au nombre tiré au hasard
if(hazar!=tableauTirage.get(j))
{
//si le nombre tiré au hasard n'est pas trouvé dans le tableau des nombres précédement tiré au hasard
//on ajoute le cadeau au panel i
tabPanel.get("monPanel"+hazar).add(tabCadeau.get("cadeau"+i));
//on retire un nombre au hasard
hazar = (int) (Math.random()*nbPanel);
i++;
}
}
pane.add(layeredPane);
}
Sa a l’air de bloquer dans les indices dans le deuxième while
A voir également:
- Problème java boucle
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
4 réponses
Bonjour,
Tel qu'est écrit ton test dans ta boucle While, en sortie de boucle tu auras toujours j == tableauTirage.Size().
Mets un && plutôt qu'un || dans ton test.
Par ailleurs, si tu arrives au bout de la boucle, le premier test va planter car j sera plus grand que la taille du tableau. Heureusement, java fait de l'évaluation paresseuse, donc il te suffit d'inverser la position de tes deux tests pour prévenir ce problème.
Xavier
Tel qu'est écrit ton test dans ta boucle While, en sortie de boucle tu auras toujours j == tableauTirage.Size().
Mets un && plutôt qu'un || dans ton test.
Par ailleurs, si tu arrives au bout de la boucle, le premier test va planter car j sera plus grand que la taille du tableau. Heureusement, java fait de l'évaluation paresseuse, donc il te suffit d'inverser la position de tes deux tests pour prévenir ce problème.
Xavier
daccord merci je vais essayer, mais normalement je veux que l'on sorte de la boucle spour l'une ou l'autre des deux conditions. Le && ne veut pas signifier que l'on sort seulement si les deux conditions sont respectées en même temps ?
le (condition1 && condition2) signifie que tu rentres dans le bloc seulement si les deux conditions sont vraies en même temps. De plus, si la première est fausse, alors java ne prend même pas la peine d'évaluer la deuxième (c'est l'évaluation paresseuse) ; cela a une importance si tu ne veux pas qu'une fonction dans condition2 soit appelée si de toute façon condition1 est fausse et donc que quoi qu'il arrive tu n'entreras de toutes façon pas dans la boucle.