当条件满足时,为什么该方法不会返回true?

时间:2017-11-25 19:03:40

标签: java methods netbeans boolean user-input

我使用GUI在Netbeans中编写游戏。在游戏中,产生15-30之间的随机数量的宝石,并且用户和计算机轮流在1-3之间移除宝石,直到没有留下。最后一个拿走最后一块石头的玩家输了。我的问题是我的方法(validIn())不会在playerMove()中使用,所以即使满足条件,游戏也不会更新。 这是我认为问题所在:

private boolean validIn(int num){
    //
    return num < 3 || num > 1 || num < totalStone;
}

public void playerMove(){
    // Geting the user input
    int userIn = Integer.parseInt(txtIn.getText());
    // Declaring and assigning a boolean
    boolean check = false;

    // If the boolean returns true
    if (check == true) {
        // Subtracting how much the player took from the total amount of rocks
        totalStone -= userIn;
        // Displaying how many rocks were taken and how many are left
        txtOut.setText(txtOut.getText() +"\nYou picked up " +userIn +" stone(s). There are " +totalStone +" stone(s) left.");                
    }
        // Else,
        else {
            // Assign the boolean check to what the method validIn returns 
            check = validIn(userIn);
        }

}

public void checkWinner(String player){
    // If there are no more stones left,
    if (totalStone == 0){                              
    // Display a message that says who won
    txtOut.setText(txtOut.getText() +"\nThere are no more stones left. "+player +" wins!");
   }  
}

private void btnEnterActionPerformed(java.awt.event.ActionEvent evt) {                                         
    //
    if (totalStone > 0){
        // Display how many rocks there are
        txtOut.setText(txtOut.getText() +"\nThere are " +totalStone +" stone(s).");
        // The player does their move
        playerMove();
        // Checking if the computer won
        checkWinner("The computer");
        // Computer does a turn
        computerMove();
        // Checking if the player won
        checkWinner("The player");            
    }

        //
        else if (totalStone == 0){
            //
            txtOut.setText(txtOut.getText() + "\nThe game has ended.");
        }
}                                        

3 个答案:

答案 0 :(得分:1)

  1. <ciso646>
  2. 在上面的代码中,您将生成的数字保存在comIn中,但是您从不检查comeIn是否大于代码中的总石头数。

    然后在if条件中你检查是否检查等于布尔值true,这不是因为你在上面检查了一个假值并且从未改变它所以它永远不会运行if循环,因为在它内部第一个条件是错误的。

    1. $array1 = array(1, 2, 3); $array2 = array(1, 2, 4, 5, 6); $array3 = array(1, 2, 3, 4, 5); func_i_am_looking_for($array1, $array2, $array3); //retrun array(1, 2);
    2. 这里无论如何都会返回true,因为如果按照规则玩游戏,所提供的数量总是小于3且大于1

      1. `check = false;

        //如果布尔值返回true if(check == true){...}`

      2. 这里再次设置check false的值并检查if循环中是否为true,因为check永远不会出现,所以它永远不会运行。

答案 1 :(得分:0)

在你的代码中,我看到boolean Method总是返回true,因为你使用

|| (OR)

任何小于3的数字都将返回true,或者大于1它将返回true。

并且在你的IF情况下,我没有看到你将变量check设置为true,但你仍然有条件checkTRUE因此我想知道你怎么能用这个变量来检查你的状况? 那么如果声明怎么能跳进去呢?

答案 2 :(得分:0)

由于某种原因,永远不会达到playerMove()方法中的validIn(userIn)。我必须删除布尔检查并更改 if (check == true)if ((validIn(userIn) == true)