我正在构建一个21的简单游戏。一切正常,但是当我单击分配给“ Stand”功能的Button时,尽管我满足以下条件,但if语句块均不会触发事件一种或另一种取决于已发行的卡。我已经测试过语句的所有变体,并且希望有一些洞察力,或者想第二眼看到我没有看到的东西。
我已经多次测试了该功能,并多次重写了它。我已经使用该语句对函数进行了测试,但是它仍然不会触发。
这是有问题的功能:
//when player hits stand button
public void Stand(TextField playerNum, TextField dealerNum, TilePane b, Button hit, Button stand, Button deal, TextField handsLostNum, TextField handsWonNum) {
//obtain current final scores when player stands
playerFinal = Integer.parseInt(playerNum.getText());
dealerFinal = Integer.parseInt(dealerNum.getText());
if (playerFinal > dealerFinal) {
hit.setVisible(false);
stand.setVisible(false);
deal.setVisible(true);
playerNum.setText("YOU WIN!");
dealerNum.setText("YOU WIN!");
handsWon += 1;
String temp = Integer.toString(handsWon);
handsWonNum.setText(temp);
}
if (dealerFinal > playerFinal) {
hit.setVisible(false);
stand.setVisible(false);
deal.setVisible(true);
playerNum.setText("YOU LOSE!");
dealerNum.setText("YOU LOSE!");
handsLost += 1;
String temp = Integer.toString(handsLost);
handsLostNum.setText(temp);
}
if (dealerFinal == playerFinal) {
playerNum.setText("DRAW! PLAY AGAIN!");
dealerNum.setText("DRAW! PLAY AGAIN!");
hit.setVisible(false);
stand.setVisible(false);
deal.setVisible(true);
}
handsWon = 0;
handsLost = 0;
} //END STAND METHOD
满足条件的条件在这里:
//method to add scores to text fields
public void addScores(int pScore, int dScore, TextField playerNum, TextField dealerNum) {
//ADD PLAYER SCORE
String playerScore = playerNum.getText();
int playerCurrent = Integer.parseInt(playerScore);
int newCurrent = playerCurrent + dScore;
String newScore = Integer.toString(newCurrent);
playerNum.setText(newScore);
//ADD DEALER SCORE
String dealerScore = dealerNum.getText();
int dealerCurrent = Integer.parseInt(dealerScore);
int newDealCurrent = dealerCurrent + pScore;
String newDealScore = Integer.toString(newDealCurrent);
dealerNum.setText(newDealScore);
}
我将分数添加到文本字段中,然后稍后在项目中再次将它们拉出。但是,即使这些值满足大于对手值的条件,该语句也不会触发。
预期结果是,当我单击“站立”按钮时,该语句被触发,然后激活添加到总计数中的变量。
答案 0 :(得分:-2)
尝试在每个步骤中放入System.out,以检查它是否真正到达那里。将一个作为第一个语句放入Stand方法中,例如:System.out.println(“ In Stand method”);
然后将更多的内容放在if语句之前和内部,例如:
System.out.format("Before: playerFinal : %s, dealerFinal: %s, playerFinal > dealerFinal: %d %n", playerFinal, dealerFinal, playerFinal > dealerFinal);
if (playerFinal > dealerFinal) {
System.out.format("In: playerFinal : %s, dealerFinal: %s, playerFinal > dealerFinal: %d %n", playerFinal, dealerFinal, playerFinal > dealerFinal);
对每个方法执行此操作,以查看该方法是否正在实际运行以及其值是什么。
如果您看到if语句正在执行,并且流程进入其中,但是您没有在GUI元素上看到任何更改,请尝试使用:
Platform.runLater(() -> {
// Your GUI changes code
playerNum.setText("YOU WIN!");
dealerNum.setText("YOU WIN!");
});
Platform.runLater接收一个runnable作为参数,并且如果使用JavaFX,则是更新GUI的正确方法。
有时,您可以保存文件并运行它,而IDE并不会实际编译它,而是运行旧代码。在这种情况下,您可以尝试重新启动IDE并重试。