【问题标题】:Loop and/or if else double return循环和/或 if else 双重返回
【发布时间】:2014-02-27 03:03:56
【问题描述】:

我正在尝试编写一个程序来玩骰子游戏,用户下注高低或七。到目前为止,我已经成功地掷骰子并添加了正确的部分,但我的投注功能并不顺利。这是我目前所拥有的:

import java.util.Random;
import java.util.Scanner;

public class Project07
{
  public static void main(String[] args)
  {
    Scanner keyboard = new Scanner(System.in);
    Random r = new Random();
    int money = 100;
    int newtotal = 100;
    System.out.println("You have " + money + " dollars");
    while (money > 0)
    {
      System.out.println("Enter an amount to be or 0 to quit");
      int bet = keyboard.nextInt();
      if (bet == 0)
      {
        System.out.println("You end with " + money + " dollars");
        System.exit(0);
      }

      System.out.println("Bet 1 for high, 2 for low, or 3 for 7's");
      int choose = keyboard.nextInt();
      int diceb = r.nextInt(7 - 1) + 1;
      int dicea = r.nextInt(7 - 1) + 1;
      int dicetotal = dicea + diceb;
      System.out.println(dicetotal);
      System.out.println("You bet $" + bet);
      if ((choose == 1) && (dicetotal > 7))
      {
        newtotal = newtotal + bet;
        System.out.println("You win $" + bet);
        System.out.print("You have " + newtotal + " dollars left");
      }
      else if ((choose == 1) && (dicetotal <= 7))
      {
        newtotal = newtotal - bet;
        System.out.println("You have " + newtotal + "dollars left");
      }
      else if ((choose == 2) && (dicetotal < 7))
      {
        newtotal = newtotal + bet;
        System.out.println("You have " + newtotal + "dollars left");
      }
      else if ((choose == 2) && (dicetotal >= 7))
      {
        newtotal = newtotal - bet;
        System.out.println("You have " + newtotal + "dollars left");
      }
      else if ((choose == 3) && (dicetotal == 7))
      {
        newtotal = newtotal + bet;
        System.out.println("You have " + newtotal + "dollars left");
      }
      else if ((choose == 3) && (dicetotal != 7))
        ;
      {
        newtotal = newtotal - bet;
        System.out.println("You have " + newtotal + "dollars left");
      }
    }
  }
}

我得到的输出应该是这样的:你有 100 美元 输入金额或 0 退出 20 1 下注高,2 下注,或 3 下 7 1 11 你赌20美元 你赢了 20 美元 你还剩 120 美元 输入金额或 0 退出 0 你最终得到 120 美元

但是,它似乎激活了 if else 块的输赢部分,并给我这个:你有 100 美元 输入金额或 0 退出 20 1 下注高,2 下注,或 3 下 7 1 11 你赌20美元 你赢了 20 美元 你还有 120 美元你还有 100 美元 输入金额或 0 退出 0 你以 100 美元结束

不太清楚我的问题出在哪里,也许我需要专门为它的下注功能编写一个新方法?任何帮助将不胜感激。

【问题讨论】:

  • 请正常格式化您的 if 语句。
  • 在最后一个if else 条件中有一个;,这意味着最后一个预期的if else 条件将始终运行。最后还要关闭您的扫描仪对象以防止内存泄漏。
  • 遵循某种格式约定将帮助您发现这样的简单错误。
  • 您拥有的编辑器几乎可以肯定有某种选项可以自动格式化源代码。用它。将代码放在一起不是“高效”——它会导致各种错误。
  • 谢谢各位 抱歉我的代码乱七八糟 我刚开始做这个编程的东西,所以我不太确定标准格式应该是什么样子。

标签: java if-statement while-loop


【解决方案1】:

格式正确(两种主要样式之一):

public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    Random r = new Random();
    int money = 100;
    int newtotal = 100;
    System.out.println("You have " + money + " dollars");
    while (money > 0) {
        System.out.println("Enter an amount to be or 0 to quit");
        int bet = keyboard.nextInt();
        if (bet == 0) {
            System.out.println("You end with " + money +" dollars");
            System.exit(0);
        }
        System.out.println("Bet 1 for high, 2 for low, or 3 for 7's");
        int choose = keyboard.nextInt();
        int diceb = r.nextInt(7 - 1) + 1;
        int dicea = r.nextInt(7 - 1) + 1;
        int dicetotal = dicea + diceb;
        System.out.println(dicetotal);
        System.out.println("You bet $" + bet);
        if ((choose == 1) && (dicetotal >7)) {
            newtotal= newtotal + bet; 
            System.out.println("You win $" + bet); 
            System.out.print("You have " + newtotal +" dollars left");
        }
        else if ((choose == 1) && (dicetotal <= 7)) { 
            newtotal = newtotal - bet; 
            System.out.println("You have " + newtotal + "dollars left"); 
        }
        else if ((choose == 2) && (dicetotal < 7)) {
            newtotal = newtotal + bet; 
            System.out.println("You have " + newtotal  + "dollars left");
        }
        else if ((choose == 2) && (dicetotal >= 7)) {
            newtotal = newtotal - bet; 
            System.out.println("You have " + newtotal  + "dollars left");
        }
        else if ((choose == 3) && (dicetotal == 7)) {
            newtotal = newtotal + bet; 
            System.out.println("You have " + newtotal + "dollars left");
        }
        else if ((choose == 3) && (dicetotal != 7)); { <<== Wayward semicolon!!
            newtotal = newtotal - bet; 
            System.out.println("You have " + newtotal  + "dollars left");
        }
    }
}

随意的分号很明显,因为除了行尾之外,您永远不会将分号放在任何地方。浏览代码并查看if 条件很容易——您不必将它们从混乱中挖掘出来。 while 结束的位置从缩进很明显。

(另一种主要风格是将{ 字符放在自己的行中:

        ...
        }
        else if ((choose == 1) && (dicetotal <= 7))
        { 
            newtotal = newtotal - bet; 
            System.out.println("You have " + newtotal + "dollars left"); 
        }
        else if ((choose == 2) && (dicetotal < 7))
        {
            newtotal = newtotal + bet; 
            System.out.println("You have " + newtotal  + "dollars left");
        }
        ...

我不太喜欢这种风格,既因为它过于分散文本(而且屏幕空间在尝试阅读和理解大型程序时很有价值),而且因为在任性的; 案例中,它不是很明显,; 不合适。)

(还有一种样式将结束 } 与以下 else 放在同一行:

        ...
        } else if ((choose == 1) && (dicetotal <= 7)) { 
            newtotal = newtotal - bet; 
            System.out.println("You have " + newtotal + "dollars left"); 
        } else if ((choose == 2) && (dicetotal < 7)) {
        ...

这更紧凑,但在我看来太紧凑了,并且开始变得杂乱无章。另外,它使得不可能在else 前面放置注释行。但其他人有不同的偏好。主要选择一种风格并坚持下去,并在团队中尝试同意一个共同的方案(不要对此感到压抑)。)

【讨论】:

    猜你喜欢
    • 2016-07-23
    • 2018-08-07
    • 2014-03-25
    • 2023-03-22
    • 1970-01-01
    • 2012-12-07
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多