Java 如果我的if语句未执行,如何解决此问题?

Java 如果我的if语句未执行,如何解决此问题?,java,xml,user-interface,javafx,logic,Java,Xml,User Interface,Javafx,Logic,我正在用JavaFX制作一个21点游戏。到目前为止,一切都很顺利。唯一缺少的是,游戏应该停止,当牌的总价值超过21时,玩家应该破产,就像真正的游戏一样。我在代码中添加了一个if语句。好消息是,执行if语句。坏消息是,它在总值超过21后执行。因此,当值为23时,玩家仍然可以击球。if语句将不会执行。它在玩家再次点击时执行,例如23变为25 我希望我解释得很好,否则请给我反馈 这是我的密码: public class FXMLDocumentController implements Ini

我正在用JavaFX制作一个21点游戏。到目前为止,一切都很顺利。唯一缺少的是,游戏应该停止,当牌的总价值超过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;

        }



    }
   }
   }
公共类FXMLDocumentController实现可初始化{
私有int playerValue、DealValue、playerTotal、DealTotal;
Random ran=新的Random();
@FXML
私有文本区dealerArea;
@FXML
私人文本区播放区;
@FXML
自有品牌labelPlayerTotal;
@FXML
自有品牌标签;
@FXML
自有品牌labelWinner;
@FXML
私人按钮点击按钮;
@FXML
私人按钮停留按钮;
@FXML
私人按钮重放按钮;
公共作废drawCardForPlayer(ActionEvent事件){
statybutton.setDisable(false);
playerValue=ran.nextInt(14);
while(playerValue 21){
setText(“你被抓到了,庄家赢了!”);
hitButton.setDisable(true);
设置禁用(true);
}
#########################
开关(播放值){
案例2:
playerArea.appendText(“\t”+Deck.drawTwo());
玩家总数=2+玩家总数;
labelPlayerTotal.setText(“Playertotal:+Playertotal”);
打破
案例3:
playerArea.appendText(“\t”+Deck.drawThree());
玩家总数=3+玩家总数;
labelPlayerTotal.setText(“Playertotal:+Playertotal”);
打破
案例4:
playerArea.appendText(“\t”+Deck.drawFour());
playerTotal=4+playerTotal;
labelPlayerTotal.setText(“Playertotal:+Playertotal”);
打破
案例5:
playerArea.appendText(“\t”+Deck.drawFive());
玩家总数=5+玩家总数;
labelPlayerTotal.setText(“Playertotal:+Playertotal”);
打破
案例6:
playerArea.appendText(“\t”+Deck.drawSix());
玩家总数=6+玩家总数;
labelPlayerTotal.setText(“Playertotal:+Playertotal”);
打破
案例7:
playerArea.appendText(“\t”+Deck.drawSeven());
玩家总数=7+玩家总数;
labelPlayerTotal.setText(“Playertotal:+Playertotal”);
打破
案例8:
playerArea.appendText(“\t”+Deck.draweright());
playerTotal=8+playerTotal;
labelPlayerTotal.setText(“Playertotal:+Playertotal”);
打破
案例9:
playerArea.appendText(“\t”+Deck.drawine());
玩家总数=9+玩家总数;
labelPlayerTotal.setText(“Playertotal:+Playertotal”);
打破
案例11:
playerArea.appendText(“\t”+Deck.drawJack());
玩家总数=10+玩家总数;
labelPlayerTotal.setText(“Playertotal:+Playertotal”);
打破
案例12:
playerArea.appendText(“\t”+Deck.drawQueen());
玩家总数=10+玩家总数;
labelPlayerTotal.setText(“Playertotal:+Playertotal”);
打破
案例13:
playerArea.appendText(“\t”+Deck.drawing());
玩家总数=10+玩家总数;
labelPlayerTotal.setText(“Playertotal:+Playertotal”);
打破
案例14:
playerArea.appendText(“\t”+Deck.drawAce());
玩家总数=11+玩家总数;
labelPlayerTotal.setText(“Playertotal:+Playertotal”);
打破
违约:
打破
}
}
}
}

我对它进行了调试,并意识到playerTotal的值最初是0,而playerTotal的值仅在开关情况下初始化,这就是问题的根源。如何修复此问题?

playerTotal
在您的
开关打开之前不会更新。使您的
if
语句检查
PlayerTotal+playerValue>21
您应该将您的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) {
        ....
if(播放器总数>21){
setText(“你被抓到了,庄家赢了!”);
hitButton.setDisable(true);
设置禁用(true);
}
statybutton.setDisable(false);
playerValue=ran.nextInt(14);

while(playerValue)我试过了,playerTotal的值最初仍然是0。@微笑它最初应该是0(在添加任何卡之前)。重要的是,在得到一张新卡之前,你要测试当前的总数不超过21张。是的,我现在已经修好了。谢谢你的帮助。@微笑如果这回答了你的问题,你应该把答案标记为正确。