Je suis nouveau en Java et en écriture de code. Je souhaite programmer un jeu de société simple. Mais si je lance les dés, j'obtiens le même nombre à chaque lancer. Qu'est-ce que j'ai fait de mal?
J'ai une classe pour créer un aléatoire entre 1 et 6:
public class BoardGame{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String r;
Dice dice = new Dice();
int roll = dice.throwDice();
int position = 0;
int finish = 40;
while (finish >= position) {
do {
System.out.print("Roll the dice (r): ");
r = input.nextLine();
} while (!r.toLowerCase().equals("r"));
if (r.toLowerCase().equals("r")) {
System.out.println("You have rolled " + roll + ".");
position += roll;
System.out.println("You are now on square " + position + ".");
}
}
System.out.println("You won!");
input.close();
}
}
Et la classe principale:
public class Dice {
public int throwDice() {
Random random = new Random();
int dice = random.nextInt(6) + 1;
return dice;
}
}
Merci!
4 Réponses :
Le code qui obtient un résultat aléatoire:
roll = dice.throwDice();
System.out.println("You have rolled " + roll + ".");
s'exécute exactement une fois. Vous appelez la méthode throw une fois . Vous stockez le résultat, pas un "pointeur" vers une fonction qui serait appelée à plusieurs reprises chaque fois que roll est utilisé quelque part.
Vous devriez donc mettre cette ligne:
XXX
juste en face de l'endroit où vous attendez un autre lancer de dés!
Changez votre classe Dice en ceci.
public class Dice {
private Random random;
public Dice(){
random = new Random();
}
public int throwDice(){
int dice = random.nextInt(6) + 1;
return dice;
}
}
Et mettez à jour roll = dice.throwDice (); à l'intérieur de la boucle.
Cela fonctionnera car votre Dice a maintenant une instance aléatoire qui génère de nouveaux entiers aléatoires à chaque fois que throwDice () est appelé.
Après avoir ajouté int roll = dice.throwDice (); à votre boucle, vous constaterez peut-être que vous obtenez la même séquence de rôles à chaque fois. Si vous ne le souhaitez pas, vous devrez définir la graine aléatoire.
Voir cette question: Nombres aléatoires Java utilisant une graine p >
public class Dice {
private Random random;
public Dice(){
random = new Random();
}
public int throwDice(){
int dice = random.nextInt(6) + 1;
return dice;
}
}
This will work because your Dice now has one random instance which is generating new random integers everytime throwDice() is called
Parce que vous ne donnez pas de nouvelle valeur à la variable
rollà l'intérieur de la boucle.vous ne roulez qu'une seule fois. ou voulez-vous dire entre différents moments exécutant ce code?
Merci, George Z. Je vois maintenant ce que j'ai fait de mal.