如果满足条件,则不会触发if语句

时间:2019-05-13 01:55:47

标签: java javafx

我正在构建一个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);
}

我将分数添加到文本字段中,然后稍后在项目中再次将它们拉出。但是,即使这些值满足大于对手值的条件,该语句也不会触发。

预期结果是,当我单击“站立”按钮时,该语句被触发,然后激活添加到总计数中的变量。

1 个答案:

答案 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并重试。