【问题标题】:How to use the returned boolean value from method (Java)?如何使用方法(Java)返回的布尔值?
【发布时间】:2016-01-25 16:09:17
【问题描述】:

我在使用布尔方法的返回值时遇到问题。

我正在测试的分数首先是有效的:

 public boolean isValidScore() {

    boolean isScoreValid = true;

    scoreHit = Integer.parseInt(scored.getText().toString());//convert the 3 dart score to store it as an integer

    int[] invalidScores = {179, 178, 176, 175, 173, 172, 169, 168, 166, 165, 163, 162};

    boolean invalidNumHit = false;
    for (int i = 0; i < invalidScores.length; i++) {
        if (scoreHit == invalidScores[i]) {
            invalidNumHit = true;
        }
    }

    if (scoreHit > 180 || scoreHit > scoreLeft[player] || scoreHit + 1 == scoreLeft[player] || (scoreHit == 159 && scoreLeft[player] == 159) || invalidNumHit) {

        //won't adjust score left if invalid score/checkout entered
        Toast toast = Toast.makeText(getApplicationContext(),
                "You've entered an invalid score, Try again!", Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.CENTER | Gravity.CENTER_HORIZONTAL, 0, 75);
        toast.show();

        scored.setText("0");//have to reset score to zero as won't do below as will return from method if invalid score

        isScoreValid = false;//will exit method i.e. won't adjust scores and stats and switch player if invalid score entered.
    }

    return isScoreValid;
}

然后我将进入一个调用此方法的方法 - 如果值为 false,我想退出此 enterClicked() 方法 - 这是我的编码方式:

public void enterClicked(View sender) {

    isValidScore();

    if (isValidScore()) {
    } else {
        return;//exit method if invalid score entered.
    }
       //is more code here.....
}

isValidScore() 的值似乎始终为真——即使我输入了无效分数(我用 toast 消息对其进行了测试)。

【问题讨论】:

  • if (isValidScore()) { // do stuff } else{ // don't do stuff}
  • @codeMagic 给定操作的//is more code here..... 我会先做出错误的条件。例如。 if (!isValidScore()) { return; }
  • @Blackbelt // is more code hereif,不是吗?因为如果它不是有效的分数,则不应在方法中运行任何代码
  • 只有两个人知道你的问题@codeMagic 的答案。一个是操作。另一个不是我们
  • 顺便说一句,isValidScore() 有副作用的事实并不好。因为从它的名字来看,它的副作用并不明显。我建议重命名它,或者将副作用代码移动到一个单独的方法(不会从isValidScore() 调用)...

标签: java android methods return boolean


【解决方案1】:

您调用了两次isValidScore(),而忽略了第一次调用的结果。你应该删除它。

public void enterClicked(View sender) {

    isValidScore(); // remove this line

    if (isValidScore()) {
        ...
    } else {
        return;
    }

}

【讨论】:

  • 它将如何解释isValidScore() 的值似乎始终为真
  • @Blackbelt 如果 OP 在偶数调用中总是有有效分数而在奇数调用中总是有无效分数,那就可以解释了。
  • 由于某种原因,isValidScore() 方法调用仍然不起作用,但至少这样做可以阻止每次我使用 Toast 进行测试时它变得“真实”(为此 +1)。我可以将布尔方法更改为 void 方法并创建一个名为 isValidScore 的布尔实例变量并初始化(如果在 if 语句中为假),否则为真。然而,这并不理想。有谁知道为什么 isValidScore() 调用无法正常工作或如何解决?
【解决方案2】:

你能试试这个吗:

    if (scoreHit > 180 || scoreHit > scoreLeft[player] || scoreHit + 1 == scoreLeft[player] || (scoreHit == 159 && scoreLeft[player] == 159) || invalidNumHit) {

        //won't adjust score left if invalid score/checkout entered
        Toast toast = Toast.makeText(getApplicationContext(),
            "You've entered an invalid score, Try again!", Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.CENTER | Gravity.CENTER_HORIZONTAL, 0, 75);
        toast.show();

        scored.setText("0");//have to reset score to zero as won't do below as will return from method if invalid score

        return false;//will exit method i.e. won't adjust scores and stats and switch player if invalid score entered.
    }
return true;

【讨论】:

    【解决方案3】:

    以下是我对您上面提出的问题的建议。

    public void enterClicked(View sender) {
    
            boolean validScore = isValidScore();
    
            if (validScore == true) {
                 //Do Something
            } else {
                return;//exit method if invalid score entered.
            }
              //Default Code to be excuted
        }
    

    【讨论】:

    • 试过了 - 然而 - 测试了它并且每次都保持正确 - 尽管感谢您的建议 + 其他所有人的努力和一般提示。
    猜你喜欢
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 2012-11-03
    • 1970-01-01
    • 2015-09-10
    相关资源
    最近更新 更多