2017-03-21 3 views
-3

das ist das erste Mal für meine Frage hier zu stellen. ich bin neu zu Java und ich habe ein Problem mit der Schleife in diesem Code Ich weiß nicht, wo ich die Schleife zu brechen.über Spiel von Craps Hausaufgaben

danken Ihnen für mich zu helfen :) this image is from the book regarding this question

import java.util.*; 


    public class GameOfCraps { 



    public static void main(String[] args) { 
    Random rn = new Random(); 
    int counterw = 0; 
    int counterl = 0; 
    int countsum = counterl + counterw; 
    int points = 0; 

    do { 
     int rndice1 = rn.nextInt(5) + 1; // 1 to 6 
     int rndice2 = rn.nextInt(5) + 1;// 1 to 6 
     int sum = rndice1 + rndice2;// sum of dice random 

     if (sum == 2 || sum == 3 || sum == 12) { 
      // System.out.println("you lose"); 
      counterl++; 
     } 

     else if (sum == 7 || sum == 11) { 
      // System.out.println("you won"); 
      counterw++; 

     } 

     else { 
      do { 
       boolean xc = false; 
       points = sum; 
       int rndice3 = rn.nextInt(5) + 1; 
       int rndice4 = rn.nextInt(5) + 1; 

       if (rndice3 + rndice4 == points) { 
        // System.out.println("you won"); 
        counterw++; 
        xc = true; 
        //break; 
       } 

       if (xc == false) 
        counterl++; 

      } while (points != 7); 

     } 

    } while (countsum <= 10000); 
    System.out.println(counterw); 
    System.out.println(counterl); 
    System.out.println("probability of winning the game: "+(double)(counterw)/(counterw+counterl)); 

} 

}

+3

[? Warum „? Kann mir jemand helfen“ nicht eine tatsächliche Frage] (https://meta.stackoverflow.com/questions/284236/why-is-can -eine-Hilfe-mir-nicht-eine-aktuelle-Frage). –

+0

Was ist das eigentliche Problem hier? Was ist das erwartete Ergebnis und was ist das aktuelle? scheint mir, du verstehst einfach nicht, wie das do {] while() funktioniert? – Mikenno

+0

Willkommen bei Stack Overflow! Es sieht so aus, als ob du nach Hausaufgabenhilfe fragst. Obwohl wir damit keine Probleme haben, beachten Sie bitte diese [dos and don'ts] (http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions)/338845 # 338845) und bearbeiten Sie Ihre Frage entsprechend. (Auch wenn dies keine Hausaufgaben sind, bitte beachten Sie den Hinweis trotzdem.) –

Antwort

0

Scheint mir kann man einfach die boolean xc verwenden, um die Schleife anstelle der Verwendung der Punkt-Anweisung (gegeben, um zu beenden, dass der Spieler gewonnen ich gehe davon aus der Schleife nicht soll aagin)

jetzt die do {} while() Schleife wie diese

arbeitet laufen 0

der Code in der DO wird immer ATLEAST 1 Mal ausgeführt, dann wird die while-Anweisung am Ende überprüft, wenn die Anweisung immer noch wahr ist, wird sie erneut ausgeführt, bis die Anweisung falsch ist, also was Sie hier wollen, ist die Exit-Anforderung (angesichts der Spieler gewonnen ... nur, dass verwenden?)

Beispiel

do { 
    xc = false; 
    if(points == condition){ 
     xc = true; 
    } 
    // some code 
} while(!xc) 
1

das Problem ist in ‚zweiten Stufe‘ Spiellogik, das Spiel nach einem Sieg los hält und du bist Erhöhen des Verlustzählers nach jedem Wurf, wenn es wirklich nur ein Verlust sein sollte, wenn zuerst eine 7 gewürfelt wird, und dann endet das Spiel. Sie wahrscheinlich etwas mehr wie diese wollen:

else { 
     while (true) { 
      int rndice3 = rn.nextInt(5) + 1; 
      int rndice4 = rn.nextInt(5) + 1; 

      if (rndice3 + rndice4 == sum) { 
       // System.out.println("you won"); 
       counterw++; 
       break; 
      } 

      if (rndice3 + rndice4 == 7) { 
       counterl++; 
       break; 
      } 
     } 
    } 
+0

Ich habe den Code korrigiert, indem ich die Schleife von do {} while {} in for() {} geändert habe – Ali