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.