Java 如果我的if语句未执行,如何解决此问题?
我正在用JavaFX制作一个21点游戏。到目前为止,一切都很顺利。唯一缺少的是,游戏应该停止,当牌的总价值超过21时,玩家应该破产,就像真正的游戏一样。我在代码中添加了一个if语句。好消息是,执行if语句。坏消息是,它在总值超过21后执行。因此,当值为23时,玩家仍然可以击球。if语句将不会执行。它在玩家再次点击时执行,例如23变为25 我希望我解释得很好,否则请给我反馈 这是我的密码: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
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张。是的,我现在已经修好了。谢谢你的帮助。@微笑如果这回答了你的问题,你应该把答案标记为正确。