2017-11-29 4 views
-1

Ich führe eine Glücksspiel-Simulation und ich kann nicht herausfinden, warum die End Bank manchmal unter Null oder über 250 ist. Ich habe eine For-Schleife direkt nach der While-Schleife, die die Simulation 100 Mal wiederholt. Denken Sie daran, meine Variablen aus einer Textdatei gelesen. Und die While-Schleife läuft nur, wenn der Spieler über 0 Dollar und unter 250 hat, aber die Endbank ist irgendwann über oder unter.Java - While-Schleife weiterhin außerhalb der Bedingungen ausgeführt?

  • Spieler beginnt mit 50 und stoppt bei $ 0 oder $ 250.
  • While-Schleife läuft nur, wenn der Spieler über $ 0 oder unter $ 250 hat.
  • For-Schleife direkt nach While-Schleife wiederholt die gesamte Simulation 100-mal.
  • Teil 2 ist derzeit inaktiv, also mach dir keine Sorgen.

Irgendwelche Ideen? Hier ist mein Code:

import java.io.*; 
import java.util.Scanner; 

    public class GamblersRuin { 

     public static int bank; 
     public static int goal; 
     public static int beta; 
     public static double prob; 
     public static int numberofb; 
     public static String yesn; 
     public static int rounds; 
     public static int newbank; 
     public static String s = ("stuff"); 

     public static void main(String[] args) throws FileNotFoundException { 

      Scanner scan = new Scanner(System.in); 
      Scanner file = new Scanner(new File("numbers.txt")); 

      //Variables 
      bank = file.nextInt(); 
      goal = file.nextInt(); 
      beta = file.nextInt(); 
      prob = file.nextDouble(); 
      numberofb = 0; 
      String yesn = file.next(); 
      rounds = file.nextInt(); 
      newbank = bank; 


      //Logic 
      while(bank > 0 && bank < goal) { 

       for(int i = 0; i <= rounds; i++) { 

        bank -= beta; 

        //Win 
        if(Math.random() < prob) { 
         bank += (1/prob) * 1; 
         numberofb += 1; 

        } 

        if(yesn.equals("Y")) { 

         for(int y = 0; y < bank; y++) { 

          System.out.print("*"); 

         } 

         System.out.println(); 

        } 


       } 

      } 


      //Main Output 
      System.out.print("==Gambling Simulation==\n"); 
      System.out.printf("Starting Bank:  " + bank + "\n"); 
      System.out.printf("Goal:   250.00\n"); 
      System.out.printf("Bet Amount:  1.00\n"); 
      System.out.printf("Probability:  50%%\n"); 
      System.out.printf("========Results========\n"); 
      System.out.printf("Number of Bets:%9s", numberofb + numberofb + "\n"); 
      System.out.printf("End Bank:%14s\n", bank); 


     } 
    } 
+0

Ihre Schleifen sind invertiert. Denken Sie: Was wollen Sie 100 mal laufen lassen? Es kann (wahrscheinlich) andere Probleme geben, aber das ist die Hauptsache. –

+0

Ich möchte die ganze Simulation 100 mal wiederholen, ich möchte das Glücksspiel bis zum Konkurs wiederholen oder habe 250, 100 mal. –

+0

Also welche Schleife sollte die "äußere" sein? –

Antwort

0

Diese Wenn die Bedingung so wird das Programm von Ihrer 100-mal Simulation kommen, wenn es weniger oder gleich 0 oder 250 oder höher ist.

for(int i = 0; i <= rounds; i++) { 

if(bank < 1 || bank >= goal) 
{ 
     break; 
} 

bank -= beta; 

Beachten Sie, dass das 100-fache Simulation nicht der Spieler lassen könnte den ganzen Kredit verlieren oder über 250 wegen der Wahrscheinlichkeit erhalten, so dass das Programm müssen in der while-Schleife bleiben, bis der Spieler das Ziel getroffen und Verlassen Sie die for-Schleife. HTH.

Verwandte Themen