【问题标题】:Why "return false;" is not equal to "boolean score= false; return score;" ? AP-1 > scoresIncreasing为什么“返回错误”;不等于“布尔分数=假;返回分数;” ? AP-1 > 分数增加
【发布时间】:2021-09-19 19:58:10
【问题描述】:

我想问一下下面的代码,特别是第 7 行。 这是一个使用 CodingBat AP-1 > scoresIncreasing 的练习,内容如下

“给定一个分数数组,如果每个分数都等于或大于前一个分数,则返回 true。数组长度为 2 或更大。”

以下解决方案是正确的,但如果我将 line:7 从 "return false;" 更改为到“分数=假;”该方法返回另一个不正确的结果。

请告诉我“return false;”有什么区别和“分数=假;”为什么会这样?

 public boolean scoresIncreasing(int[] scores) {
  boolean score = false;
  for(int i = 0; i < scores.length-1; i++){
    if(scores[i+1] >= scores[i]){
      score = true;
    }else {
      return false; 
    }
  }
  return score;
}

提前感谢您的回答。

【问题讨论】:

  • 在纸上仔细阅读代码,你就会明白为什么这段代码的行为与它的行为一样。此外,您可以使用调试器单步执行代码,在代码运行时检查字段的状态,这也将告诉您为什么会发生这种情况。
  • 不同之处在于你在一个实例中立即从方法返回,而在另一个实例中在循环中设置变量
  • 如果你将其设为score = false;,则循环有可能不会在此处结束,并且可能会在后续迭代中使用true
  • 如果您删除了提前返回,则返回的值取决于最后比较的两个分数,之前的所有分数都无关紧要。

标签: java return boolean


【解决方案1】:

只是因为有了“return false;”在第 7 行中,您提前退出方法,结果正确,正如算法所暗示的那样。

如果您只是为 score 分配 false 值,您会继续循环,因此,结果在某些情况下会变得无效(只是因为您可以进一步重新分配 score 为 true)。

【讨论】:

    【解决方案2】:
    • 因为return false 会停止执行 for 循环,并将值返回到调用 scoresIncreasing 函数的位置,只要它计数小于先前分数值的分数值。

    • 而当您使用score=false 时,for 循环会遍历整个数组,然后仅在数组的最后一个元素大于或小于其先前值的条件下返回truefalse

    【讨论】:

      猜你喜欢
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-30
      • 2021-11-25
      • 1970-01-01
      • 2013-10-17
      • 2017-02-02
      相关资源
      最近更新 更多