【问题标题】:Looping an "If Else Statement" java循环“If Else 语句”java
【发布时间】:2017-02-17 16:16:17
【问题描述】:

我正在尝试使用 Scanner 在 java 中制作一个简单的程序,该程序将允许用户投掷掷骰子(玩骰子)。

1.此代码要求用户输入他们有多少钱。

  1. 代码将要求用户输入赌注。

  2. 使用随机数生成器,它会通知用户他们滚动了什么,并告知用户他们赢了/输了多少钱。

我已经能够成功地告诉计算机在用户输赢、掷出 2、3、7、11 或 12 时通知用户。

我不知道如何告诉计算机允许用户在其他随机值(例如 4、5、6、8、9 和 10)被掷出时继续掷骰子,请帮助。这是我的代码:

System.out.println("How much is in your purse?: ");
purse = input.nextInt();

System.out.println("make a bet: ");
bet = input.nextInt();

int pNumber = rand.nextInt(12) + 1;

if (pNumber == 2 || pNumber == 3 || pNumber == 12)
{
    purse = purse - bet;
    System.out.println("you rolled a " + pNumber);
    System.out.println("you lost $" + bet);
}
else if (pNumber == 7 || pNumber == 11)
{
    purse = purse + bet;
    System.out.println("you rolled a " + pNumber);
    System.out.println("you won $" + bet );
}
else
{
    System.out.println("you rolled a " + pNumber + ",keep rolling" );
}

【问题讨论】:

  • 用户输赢游戏就结束了吗?
  • 不,游戏一直持续到用户用完钱(钱包 == 0)

标签: java loops if-statement random numbers


【解决方案1】:

使用外部 while 循环让游戏继续进行,直到用户用完钱为止。

类似的东西。从钱包中的初始金额开始,然后开始游戏。

如果用户赢或输,他们会重新下注并再次下注。

如果用户既没有赢也没有输,他们只是用当前的赌注再次滚动。

System.out.println("How much is in your purse?: ");


   purse = input.nextInt();
   boolean newBet = true;

    while(purse > 0)
    {
     if(newBet)
     {
      System.out.println("make a bet: ");
      bet = input.nextInt();
     }

     //roll the dice, new bet or not
     int pNumber = rand.nextInt(12) + 1;

     if ( pNumber == 2 || pNumber == 3 || pNumber == 12)
     {
            purse = purse - bet;
            System.out.println("you rolled a " + pNumber);
            System.out.println("you lost $" + bet);
            newBet =true; //make a new bet if you won
     }
     else if (pNumber == 7 || pNumber == 11)
     {
            purse = purse + bet;
            System.out.println("you rolled a " + pNumber);
            System.out.println("you won $" + bet );
            newBet=true; //make a new bet if you lost
     }
     else
     {
       System.out.println("you rolled a " + pNumber + ",keep rolling" );
       newBet=false; // make no new bet, neither won nor lost

     }
   } //end while


  System.out.println("Game over !")

如果用户想在钱用完之前退出,您可以添加条件以退出 while 循环等。

【讨论】:

  • 不过,这不是 OP 所要求的。 OP 想知道如何让用户在掷出 4、5、6、8、9 或 10 时重新掷骰子
  • OP 在 cmets 中表示,即使用户赢钱(掷出 7 或 11)或输钱(掷出 2、3 或 12)或掷出的结果对钱(4,5,6,8,9,10)。
【解决方案2】:

关键,如果您想继续滚动特定数字,请将所​​有代码放入 while-loop 或 do-while 循环中。

【讨论】:

    【解决方案3】:

    这是一个简单的算法,可能有助于描绘实际代码:


    在一个方法中,称之为roll,使用随机数生成器来模拟用户的roll

    如果用户的点数不等于 4、5、6、8、9 或 10,根据您的解释是有问题的数字,请继续您的 计算

    否则,如果用户确实掷出了错误的数字,则递归调用 滚法。这将生成另一个随机掷骰并再次进行检查,直到生成“可接受”掷骰


    不确定你是否知道递归,但基本上,它是一个调用自身的方法。

    【讨论】:

      【解决方案4】:
      boolean keep_rolling = true;
      
      While(keep_rolling== true)
      {
      System.out.println("How much is in your       purse?: ");
              purse = input.nextInt();
              if(purse==0){
      System.out.println("you need more money to continue ");
      
      }else{  
      
              System.out.println("make a bet: ");
              bet = input.nextInt();
      
      
      
          int pNumber = rand.nextInt(12) + 1;
      
      
      
      
      
      
              if ( pNumber == 2 || pNumber == 3 || pNumber == 12)
              {
                  purse = purse - bet;
                  System.out.println("you rolled a " + pNumber);
                  System.out.println("you lost $" + bet);
      keep_rolling= false;
              }
                          else if (pNumber == 7 || pNumber == 11)
                          {
                              purse = purse + bet;
                              System.out.println("you rolled a " + pNumber);
                              System.out.println("you won $" + bet );
      
              keep_rolling= false;                }
                              else
                              {
      
      System.out.println("you rolled a " +     pNumber + ",keep rolling" );
      
                                              }
      }//end else of purse==o
      }//end while
      

      【讨论】:

      • 谢谢大家,特别是谢谢 Painsanco,他做了我想做的事!
      • @KelOkekpe 你应该接受对你有用的答案,这是一种更好的感谢方式!