Simulation Spiel des Würfelspieles in JAVA
Ich bin neu in Java und versuche zu lernen, indem Sie einige übungen, die ich online gefunden. Also bitte entschuldigen Sie mich, wenn dies ist zu naiv.
Dieser übung war, über ein Programm schreiben für das Spiel von craps mit den folgenden Regeln:
In dem Spiel von scheißt, eine pass line-Wette geht wie folgt vor sich: Zwei sechs-seitige Würfel sind
gerollt; der erste Wurf in einer craps-Runde wird als "come-out-roll."
Ein come out Wurf von 7 oder 11 gewinnt automatisch, und ein come out Wurf von 2, 3, oder 12
automatisch verliert. Wenn 4, 5, 6, 8, 9, oder 10 gerollt wird auf dem come out roll, Anzahl
wird "der Punkt." Behält der Spieler die Würfel zu Rollen, bis entweder 7 oder der Punkt ist
gerollt werden. Wenn der Punkt gerollt wird, der erste, dann der Spieler gewinnt die Wette. Wenn eine 7 zuerst gerollt wird,
dann verliert der Spieler.
Schreiben Sie ein Programm, das simuliert das Spiel von craps mit Hilfe dieser Regeln ohne menschliche
input. Anstatt zu Fragen, für eine Wette, das Programm soll berechnen, ob die
Spieler gewinnen oder verlieren. Sollte das Programm simulieren von Rollen der zwei Würfel und
berechnen Sie die Summe. Hinzufügen einer Schleife, so dass das Programm spielt als 10.000 Spiele. Hinzufügen
c ounters, die zählen, wie oft der Spieler gewinnt, und wie oft
Spieler verliert. Am Ende der 10.000 Spiele, berechnen die Wahrscheinlichkeit des Gewinnens
[D. H., Gewinne /(Wins + Losses)] und Ausgang diesen Wert. Auf lange Sicht, wer
gewinnen die meisten Spiele, Sie oder das Haus?
Hier ist der code, den ich geschrieben habe :
//GAME OF CRAPS
public static void main (String[] args)
{
int dice1 = 0;
int dice2 = 0;
int scorenew = 0;
int point = 0;
int wins = 0;
int loss = 0;
for (int i = 0; i < 10000; i++)
{
System.out.println ("roll the dices");
int score = roll (dice1, dice2);
System.out.println ("\n score " + score);
if (score == 11 || score == 7)
{
System.out.println ("\n Score = " + score);
System.out.println ("you win");
wins = wins + 1;
}
if (score == 2 || score == 3 || score == 12)
{
System.out.println ("\n Score = " + score);
System.out.println ("you lose");
loss = loss + 1;
}
else if (score == 4 || score == 5 || score == 6 || score == 8 || score == 9 || score == 10)
{
point = point + score;
System.out.println ("\n Point = " + point);
do
{
scorenew = roll (dice1, dice2);
System.out.println ("\n Score new = " + scorenew);
if (scorenew == point)
{
System.out.println ("\n you win");
wins = wins + 1;
point = 0;
break;
}
if (scorenew == 7)
{
System.out.println ("\n you lose");
point = 0;
loss = loss + 1;
break;
}
} while (scorenew != point || scorenew != 7);
}
}
System.out.println ("\n number of wins = " + wins
+ " and number of loss = " + loss +
" and the probability for winning a game = " + (double) wins / (wins + loss));
}
public static int roll (int d1, int d2)
{
Random randomGenerator = new Random ();
int dice1 = randomGenerator.nextInt (6) + 1;
int dice2 = randomGenerator.nextInt (6) + 1;
System.out.println ("\n dice1 = " + dice1 + " dice2 = " + dice2);
int score = dice1 + dice2;
return score;
}
Jedesmal, wenn ich den code ausführen der do-while-Bedingung wird zuerst ausgeführt, also bitte kann mir jemand helfen, herauszufinden, wohin ich gehe falsch gemacht?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Bedingung ist immer wahr, so haben Sie eine Endlosschleife. Auch, warum Sie passieren
d1
undd2
in dieroll()
Funktion? Sie sind völlig unbenutzt und nicht gebraucht.scorenew
undpoint
ist dieser Ausdruck falsch?scorenew == 7
undpoint != 7
. Die Bedingungen mit den Pausen nicht zulassen wird, daß diese Werte ausgewertet werden, Sie aber auch brechen, also es ist keine Endlosschleife. Könnte es sein while(true).Do while tut genau das, was Sie sollten Sie erwarten, es zu tun. Führt dem Körper zuerst, dann wertet das bedingte, um zu sehen, wenn sollte er wieder laufen. Sie nicht wirklich brauchen zu tun, obwohl, die Sie ausführen möchten, bis eine der Bedingungen bricht Sie aus der while-Schleife.
Wie @Lee Daniel Crocker, sagte, dass Sie nicht brauchen, um pass im dice1-und dice2 der roll-Funktion.
Andere Sache, die helfen könnten, ist nicht deklarieren alle Variablen am Anfang der Methode. Sie brauchen nicht scorenew oder Stelle außerhalb der Dritten Bedingung, in der Tat brauchen Sie nicht scorenew an, da Sie zeigen: