Цикл пропускает заявление (КАЗИНО ПРОГРАММА)

Я пытаюсь создать программу казино для своего школьного проекта. Кажется, все работает просто отлично, за исключением того, что оператор цикла do-while внутри main() Метод всегда пропускается в первой, третьей, пятой (нечетной) строках консоли.

ПРОГРАММА:

import java.util.Scanner;
import java.text.*;
import java.util.*;

public class Casino
{
   public static Scanner input;
   static final String SEPARATOR = "\n";

   public static void main (String[] args) throws Exception
   {
      int  winnings;

      while (getBet() != 0)
      {
         TripleString thePull = pull();
         getPayMultiplier(thePull);
         winnings = getPayMultiplier(thePull) * getBet();
         display(thePull, winnings);
      }
      System.out.println("Thanks");
   }

   //gets bet, stores in static class variables
   public static int getBet()
   {
      final double MAX_BET = 50;
      String prompt, strUserResponse;
      int intResponse;
      input = new Scanner(System.in);

      do
      {
         prompt = "How much would you like to bet ( Min $1 - Max $50 ) "
               + "or press '0' to quit?";
         System.out.print(prompt);
         strUserResponse = input.nextLine();
         intResponse = Integer.parseInt(strUserResponse);
      }
      while( intResponse < 0 || intResponse > MAX_BET );

      return intResponse;
   }

   public static String randString()
   {
      int bar = 38;
      int cherries = 78;
      int space = 85;
      int seven = 100;

      String randomString = "";
      int randomNum = 1 + (int)(Math.random() * 100);

      if (randomNum <= bar)
         randomString = "BAR";
      else if (randomNum <= cherries)
         randomString = "cherries";
      else if (randomNum <= space)
         randomString = "space";
      else if (randomNum <= seven)
         randomString = "7";
      return randomString;
   }

   public static TripleString pull()
   {
      TripleString pullString = new TripleString();

      String str1 = randString();
      pullString.setString1(str1);

      String str2 = randString();
      pullString.setString2(str2);

      String str3 = randString();
      pullString.setString3(str3);

      return pullString;
   }

   public static int getPayMultiplier (TripleString thePull)
   {

      if (thePull.getString1() == "cherries" &&
            thePull.getString2() != "cherries" )
         return 5;
      else if (thePull.getString1() == "cherries" &&
            thePull.getString2() == "cherries" &&
            thePull.getString3() != "cherries")
         return 15;
      else if (thePull.getString1() == "cherries" &&
            thePull.getString2() == "cherries" &&
            thePull.getString3() == "cherries")
         return 30;
      else if (thePull.getString1() == "BAR" &&
            thePull.getString2() == "BAR" &&
            thePull.getString3() == "BAR")
         return 50;
      else if (thePull.getString1() == "7" &&
            thePull.getString2() == "7" &&
            thePull.getString3() == "7")
         return 100;
      else
         return 0;
   }

   public static void display (TripleString thePull, int winnings)
   {
      System.out.println(SEPARATOR + ">>>Brrrrrr! Your Pull Is . . .<<<"
            + SEPARATOR + thePull.toString());
      if ( winnings == 0)
         System.out.println("Sorry you lose. . . GOOD LUCK NEXT TIME!"
               + SEPARATOR);
      else
         System.out.println("Congaratulations, you win =" + " $" + winnings
               + " !" + SEPARATOR + "YEAY !!! :):):)" + SEPARATOR);
   }
}

class TripleString
{
   //member data
   private String string1, string2, string3;

   //static constants
   public static final double MIN_LEN = 1;
   public static final double MAX_LEN = 50;
   public static final String DEFAULT_STRING = "undefined";

   //default constructor
   TripleString ()
   {
      string1 = DEFAULT_STRING;
      string2 = DEFAULT_STRING;
      string3 = DEFAULT_STRING;
   }

   //parameter-taking constructor
   TripleString (String str1, String str2, String str3)
   {
      if (! setString1(str1))
         str1 = DEFAULT_STRING;
      if (! setString2(str2))
         str2 = DEFAULT_STRING;
      if (! setString3(str3))
         str3 = DEFAULT_STRING;
   }

   //private static helper method
   private boolean validString(String str)
   {
      if (str == null || str.length() < MIN_LEN || str.length() > MAX_LEN)
         return false;
      else
      return true;
   }

   //accessor set methods
   public boolean setString1 (String stringName1)
   {
      if ( !validString(stringName1) )
         return false;
      string1 = stringName1;
      return true;
   }

   public boolean setString2 (String stringName2)
   {
      if ( !validString(stringName2) )
         return false;
      string2 = stringName2;
      return true;
   }

   public boolean setString3 (String stringName3)
   {
      if ( !validString(stringName3) )
         return false;
      string3 = stringName3;
      return true;
   }

   //accessor get methods
   public String getString1 () { return string1; }
   public String getString2 () { return string2; }
   public String getString3 () { return string3; }

   public String toString ()
   {
      String reStr;

      reStr = string1 + " "+ string2  +  " " + string3;
      return reStr;
   }
}

Вот пример моего бега:

How much would you like to bet ( Min $1 - Max $50 ) or press '0' to quit?1
How much would you like to bet ( Min $1 - Max $50 ) or press '0' to quit?6

//Brrrrr below supposed to have ">>>" "<<<" but I remove it manually in this example since it creates blockquotes

Brrrrrr! Your Pull Is . . .
cherries cherries BAR
Congaratulations, you win = $90 !
YEAY !!! :):):)

How much would you like to bet ( Min $1 - Max $50 ) or press '0' to quit?7
How much would you like to bet ( Min $1 - Max $50 ) or press '0' to quit?7

Brrrrrr! Your Pull Is . . .
7 BAR cherries
Sorry you lose. . . GOOD LUCK NEXT TIME!

Я хочу, чтобы это выглядело как

How much would you like to bet ( Min $1 - Max $50 ) or press '0' to quit?1

Brrrrrr! Your Pull Is . . .<<<
BAR BAR BAR
Congaratulations, you win = $50 !
YEAY !!! :):):)

How much would you like to bet ( Min $1 - Max $50 ) or press '0' to quit?2

Brrrrrr! Your Pull Is . . .<<<
BAR cherries BAR
Sorry you lose. . . GOOD LUCK NEXT TIME!

How much would you like to bet ( Min $1 - Max $50 ) or press '0' to quit?0

Я думаю, что проблема должна быть связана с петлей в моем getInput() метод, но я действительно не уверен, почему. Я знаю, что не мог бы сделать петлю в getInput() метод, но мой инструктор указывает, что метод должен зацикливаться, пока пользователь не введет правильный #(1-50)

Я пытался изменить его на стандартный цикл while или модифицировать код многими другими способами, но по-новому возникают новые проблемы. Например, если я изменю свой основной метод на

чередовать main()

public static void main (String[] args) throws Exception
   {
  int bet = getBet(),  winnings;

  do
  {
     TripleString thePull = pull();
     getPayMultiplier(thePull);
     winnings = getPayMultiplier(thePull) * bet;
     display(thePull, winnings);
  }
  while (getBet() != 0);


  System.out.println("Thanks");

}

Если я использую приведенный выше код для основного, моя переменная ставка останется неизменной для каждого цикла, так как она была начата до этого.

Редактировать: альтернативный main() метод Edit2: добавить больше образца

2 ответа

Решение

Ваш второй основной не работает, потому что вы не переназначаете bet переменная.

Работает простая альтернатива main()

   public static void main (String[] args) throws Exception
   {
      int bet = getBet(),  winnings;

      do
      {
         TripleString thePull = pull();
         getPayMultiplier(thePull);
         winnings = getPayMultiplier(thePull) * bet;
         display(thePull, winnings);
         bet = getBet();
      }
      while ( bet != 0);

      System.out.println("Thanks");
    }

Ваш первый основной не работает, потому что вы звоните getBet() дважды

Рабочий основной

 public static void main (String[] args) throws Exception
   {
      int  winnings;
      int  bet;
      while ((bet = getBet()) != 0)
      {
         TripleString thePull = pull();
         getPayMultiplier(thePull);
         winnings = getPayMultiplier(thePull) * bet;
         display(thePull, winnings);
      }
      System.out.println("Thanks");
   }

Если вы хотите, чтобы переменная ставки не оставалась прежней, вы можете изменить цикл while на просто:

while(true){
   //get the bet here
    if(bet == 0){
        break;
    }
    //Do the rest of your stuff here.
}

Это будет менять ставку на каждой итерации, но все равно останавливаться, если она равна нулю.

Другие вопросы по тегам