【问题标题】:Can't return inside an if statement, using boolean无法在 if 语句中返回,使用布尔值
【发布时间】:2013-12-12 05:50:12
【问题描述】:

我正在尝试创建一个布尔方法,但它没有识别出我有一个 return 语句。我该怎么办?

public boolean isThreeKind( int rankHist[]) {
  for (int i=0;i<=13;i++){
      if (rankHist[i]>=3){
          return true;
      }else{
          return false;
      }

  }
}

【问题讨论】:

  • 在 last } 之前添加 return false(或)return true(适用于您的);您的代码应包含所有可能执行路径的返回语句。
  • 因为你不确定for循环是否会被执行,所以你需要在你的方法末尾添加一个return语句(假设你这样做:for (int i=15;i&lt;=13;i++)
  • 另外,if(someCondition) { return true; } else { return false; } 可以缩短为 return someCondition。你应该总是喜欢第二种形式。在你的情况下,return rankHist[i] &gt;= 3.

标签: java for-loop boolean return


【解决方案1】:

在 java 中,您总是需要跟踪在方法可以退出的任何地方返回的东西。如果它可以在没有命中 return 语句的情况下退出,您将看到该错误。

所以,对于你的代码,要修改它并让它看到它,你需要让它说:

public boolean isThreeKind( int rankHist[]) {
  for (int i=0;i<=13;i++){
      if (rankHist[i]>=3){
          return true;
      }else{
          return false;
      }

  }
return false;
}

如果你愿意的话,或者是真的。

【讨论】:

    【解决方案2】:

    你应该避免多重return语句。
    您可以使用标志。在 for 循环之外声明标志,然后相应地分配值,并且不要错过 break 语句
    这样做:

    public boolean isThreeKind( int rankHist[]) {
      boolean value = false;
      for (int i=0;i<=13;i++){
          if (rankHist[i]>=3){
              value = true;
              break;
          }    
      }
      return value;
    }
    

    【讨论】:

      【解决方案3】:

      您的代码没有意义。如果你总是要在循环内只运行一次代码,那么循环是没有意义的。我想你一定误会了。你想做什么?

      【讨论】:

        【解决方案4】:

        假设方法只需要返回truefalse如果是greater than equal to 3, 建议保持简单。

        另外,请注意:

        • 循环遍历i=0 to i&lt; rankHist.length,如果数组包含少于13个元素,您将遇到ArrayOutOfBoundException.

        • 如果包含超过 13 个元素,则输出可能不正确。

        .

        public boolean isThreeKind( int rankHist[]) {
        
         for (int i=0;i<rankHist.length;i++){
              if (rankHist[i]>=3){ 
                  return true; 
              }
          }
        
          return false;
        }
        

        【讨论】:

          【解决方案5】:

          这就是你的代码现在正在做的事情:

          public boolean isThreeKind( int rankHist[]) {
              return rankHist[0] >= 3;
          }
          

          就是这样,我假设这不是你想要做的。因此,如果您告诉我们您的实际目标是什么,我们可以为您提供更多帮助。

          【讨论】:

            【解决方案6】:

            我认为他想要的是,如果 13 中的每个元素都 >=3,他应该返回一个 true,否则他应该返回一个 false。

            public boolean isThreeKind( int rankHist[]) 
            {
              for (int i=0;i<=13;i++)
              {
                  if (rankHist[i]<3)
                  {
                      return false; // Will return false if either of the element have value <3
                  }
              }
              return true;  // Will return true only if all the 13 elements have value >=3
            }
            

            【讨论】:

              猜你喜欢
              • 2014-12-19
              • 2020-07-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-04-17
              • 2022-12-17
              • 2015-02-22
              相关资源
              最近更新 更多