【问题标题】:My if statement is not executing, how can I solve this?我的 if 语句没有执行,我该如何解决这个问题?
【发布时间】:2015-02-24 08:37:36
【问题描述】:

我正在用 JavaFX 制作 BlackJack 游戏。到目前为止,一切都很顺利。唯一缺少的是游戏应该停止并且玩家应该在牌的总价值超过 21 时出局,就像真正的游戏一样。我在我的代码中添加了一个 if 语句。好消息是,if 语句执行。坏消息是,它在总值超过 21 之后执行。所以当值是 23 时玩家仍然可以击中。然后 if 语句将不会执行。它在玩家再次击球时执行,例如 23 变为 25。

我希望我解释得很好,否则请给我反馈。

这是我的代码:

    public class FXMLDocumentController implements Initializable {

    private int playerValue, dealerValue, playerTotal, dealerTotal;





    Random ran = new Random();
    @FXML
    private TextArea dealerArea;
    @FXML
    private TextArea playerArea;
    @FXML
    private Label labelPlayerTotal;
    @FXML
    private Label labelDealerTotal;
    @FXML
    private Label labelWinner;
    @FXML
    private Button hitButton;
    @FXML
    private Button stayButton;
    @FXML
    private Button replayButton;





    public void drawCardForPlayer(ActionEvent event) {

        stayButton.setDisable(false);
        playerValue = ran.nextInt(14);

        while (playerValue <=1) {
            playerValue = ran.nextInt(14);
        }
        ######################################
        // I created this broken if statement
        if (playerTotal >21) {

            labelWinner.setText("You busted, dealer won!");
            hitButton.setDisable(true);
            stayButton.setDisable(true);

        }
        #########################
        switch (playerValue) {

        case 2:
            playerArea.appendText("\t" + Deck.drawTwo());
            playerTotal = 2 + playerTotal;
            labelPlayerTotal.setText("Playertotal:" + playerTotal);
            break;

        case 3:
            playerArea.appendText("\t" + Deck.drawThree()); 
            playerTotal = 3 + playerTotal;
            labelPlayerTotal.setText("Playertotal:" + playerTotal);
            break;

        case 4:
            playerArea.appendText("\t" + Deck.drawFour()); 
            playerTotal = 4 + playerTotal;
            labelPlayerTotal.setText("Playertotal:" + playerTotal);
            break;

        case 5:
            playerArea.appendText("\t" + Deck.drawFive()); 
            playerTotal = 5 + playerTotal;
            labelPlayerTotal.setText("Playertotal:" + playerTotal);
            break;

        case 6:
            playerArea.appendText("\t" + Deck.drawSix()); 
            playerTotal = 6 + playerTotal;
            labelPlayerTotal.setText("Playertotal:" + playerTotal);
            break;

        case 7:
            playerArea.appendText("\t" + Deck.drawSeven());
            playerTotal = 7 + playerTotal;
            labelPlayerTotal.setText("Playertotal:" + playerTotal);
            break;

        case 8:
            playerArea.appendText("\t" + Deck.drawEight()); 
            playerTotal = 8 + playerTotal;
            labelPlayerTotal.setText("Playertotal:" + playerTotal);
            break;

        case 9:
            playerArea.appendText("\t" + Deck.drawNine());
            playerTotal = 9 + playerTotal;
            labelPlayerTotal.setText("Playertotal:" + playerTotal);
            break;

        case 11:
            playerArea.appendText("\t" + Deck.drawJack());
            playerTotal = 10 + playerTotal;
            labelPlayerTotal.setText("Playertotal:" + playerTotal);
            break;
        case 12:
            playerArea.appendText("\t" + Deck.drawQueen()); 
            playerTotal = 10 + playerTotal;
            labelPlayerTotal.setText("Playertotal:" + playerTotal);
            break;
        case 13:
            playerArea.appendText("\t" + Deck.drawKing());
            playerTotal = 10 + playerTotal;
            labelPlayerTotal.setText("Playertotal:" + playerTotal);
            break;
        case 14:
            playerArea.appendText("\t" + Deck.drawAce());
            playerTotal = 11 + playerTotal;
            labelPlayerTotal.setText("Playertotal:" + playerTotal);
            break;

            default:
            break;

        }



    }
   }
   }

我调试了一下,发现playerTotal的值一开始是0,而playerTotal的值只是在switch-case中初始化的,这就是问题所在。我该如何解决这个问题?

【问题讨论】:

    标签: java xml user-interface javafx logic


    【解决方案1】:

    playerTotal 直到您的switch 才会更新。让您的 if 语句检查 PlayerTotal + playerValue &gt; 21

    【讨论】:

    • 是的,我现在修好了。感谢您的帮助。
    • @Smile 如果这回答了您的问题,您应该将答案标记为正确。
    【解决方案2】:

    您应该将 if 条件移到获取新随机卡的代码之前。

        if (playerTotal >21) {
    
            labelWinner.setText("You busted, dealer won!");
            hitButton.setDisable(true);
            stayButton.setDisable(true);
    
        }
    
        stayButton.setDisable(false);
        playerValue = ran.nextInt(14);
    
        while (playerValue <=1) {
            playerValue = ran.nextInt(14);
        }
        switch (playerValue) {
            ....
    

    【讨论】:

    • 我试过了,playerTotal的值最初还是0。
    • @Smile 它最初应该是 0(在添加任何卡片之前)。重要的是,在获得新卡之前,您要测试当前总数不超过 21。
    猜你喜欢
    • 2019-06-03
    • 1970-01-01
    • 2020-03-25
    • 2020-02-14
    • 1970-01-01
    • 2021-07-31
    相关资源
    最近更新 更多