2015-10-26 48 views
0

我无法使用布尔方法返回的值。如何使用方法(Java)返回的布尔值?

我测试的得分有效,首先:

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; 
} 

然后我会到调用该方法的方法 - 我想,然后从这个enterClicked()方法退出,如果该值是假的 - 在这里我是如何编码的:

public void enterClicked(View sender) { 

    isValidScore(); 

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

它出现isValidScore()的值始终是真实的 - 甚至当我输入一个无效的得分(我举杯消息进行了测试)。

+0

'如果(isValidScore()){//做的东西}其他{//不这样做的东西}' – codeMagic

+0

@codeMagic给出运算的'//更多代码在这里.....'我会首先做出错误的状况。例如。 if(!isValidScore()){return; }' – Blackbelt

+0

@Blackbelt'//在'if'中有更多的代码,不是吗?因为没有代码应该在方法中运行,如果它不是有效分数 – codeMagic

回答

2

您打电话isValidScore()两次,并忽略第一次通话的结果。你应该删除它。

public void enterClicked(View sender) { 

    isValidScore(); // remove this line 

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

} 
+1

它将如何解释*它看起来isValidScore()的值始终为真* – Blackbelt

+0

@Blackbelt如果OP在偶数呼叫中总是有一个有效分数并且在奇数呼叫中有无效分数,它会解释它。 – Eran

+0

出于某种原因,isValidScore()方法调用仍然不起作用,但至少这样做会阻止它在每次使用Toast进行测试时都变为“true”(+1)。 我可以将布尔方法更改为void方法,并创建一个名为isValidScore的布尔实例变量并初始化(如果在if语句中为false),否则返回true。但是,这并不理想。 有谁知道为什么isValidScore()调用不能正常工作或如何解决? – user3111329

0

你可以试试这个:

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; 
0

下面是我的建议,为您在上面提出的问题。

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 
    } 
+0

尝试过 - 但是 - 测试它,并且每次都保持真实 - 感谢建议,尽管+其他人为努力和一般技巧。 – user3111329