【问题标题】:Why won't my IF-ELSE-IF statement work correctly?为什么我的 IF-ELSE-IF 语句不能正常工作?
【发布时间】:2021-01-14 08:55:50
【问题描述】:

我正在尝试用 Java 创建一个简单的二十一点游戏。我有一个菜单,其中包含 1-4 的可能整数选项。如果用户输入一个大于 4 的整数,我的 IF 语句需要打印“invalid integer”然后重启游戏。如果用户输入一个负值,我的 ELSE-IF 语句需要做同样的事情。

但是,这些语句只能工作一次,所以如果我多次输入小于 0 和大于 4 的值/背靠背,我无法打印“无效整数”。

[已编辑]

感谢任何帮助。

【问题讨论】:

  • 处理大于4的输入的条件在哪里?我没看到。
  • 您使用continue; 语句,这意味着您的语句有一个循环。这个循环在哪里?我看不到它...
  • 默认语句适​​用于任何不是 1-4 的输入。只要用户输入不是 4,这些语句都在一个 while 循环中进行连续游戏(如果用户输入为 4,则 while 循环中断并且游戏停止)。
  • 你需要把逻辑放在一个循环中,这样它就会一直循环,直到你得到一个正确的答案。这里有很多问题可以讨论这个问题。
  • 旁注:您的 switch (chosen) 用于案例 2 - 10 已完全过时。所有案例都在做同样的事情,只是打印的消息不同,可以简单地重写为:if(chosen >= 2 && chosen <= 10) { System.out.println("Your card is a " + chosen + "!"); playerHand = playerHand + chosen; System.out.println("Your hand is: " + playerHand); } 你应该在第一个 if 语句之后放置达到 21 的检查,以始终检查它,不仅仅是当国王有被选中。然后,您也不需要重复“您的手是”打印语句。

标签: java if-statement java-8 blackjack


【解决方案1】:

如果你已经这样定义了 scnr:

Scanner scnr = new Scanner(System.in);

我建议你用默认子句做一个简单的 switch case 语句。

switch (userOpt) {
    case 1:
        // Option 1 logic...
    case 2:
        // Option 2 logic...
    case 3:
        // Option 3 logic...           
    case 4:
        // Option 4 logic...
    default:
        // Handling invalid input...
}

【讨论】:

  • 我只是这样做了,但是现在每个案例中的逻辑根本不会运行。
【解决方案2】:

您编写代码的方式确实令人困惑。 即案例1如何涉及获得另一张卡? 所有代码都写在一个主函数中吗?你如何创建一个名为 blackjack 的类,在其中你有不同的 getCard()、holdHand() 等方法,并创建一个类变量来控制手牌、游戏计数和庄家/玩家获胜。会更容易理解您的代码。 然后你就可以在你的main里面的code里面试试你的code了。

类似的东西;

public BlackJack { 
**class variables such as hand, player wins etc..**

**methods here**

**main method to try your code**
}

我希望你能明白我的建议,我知道当你编写代码后,现在可能需要做很多工作,但这会对你和任何阅读你的代码的人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    相关资源
    最近更新 更多