Почему «вернуть false;» не равно «логическая оценка= false; возвращаемая оценка;» ? AP-1 > Увеличение показателей

#java #return #boolean

Вопрос:

Я хочу спросить о следующем коде ,специально для строки 7. Это упражнение с CodingBat AP-1 > увеличением показателей, и оно выглядит так

«Учитывая множество баллов, возвращайте значение true, если каждый балл равен или больше предыдущего. Массив будет иметь длину 2 или более».

Следующее решение является правильным, но если я изменю строку:7 с «вернуть ложь» на «оценка=ложь», метод вернет еще один неверный результат.

Пожалуйста, скажите мне, в чем разница между «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;
}
 

Заранее благодарю вас за ваш ответ.

Комментарии:

1. Пройдитесь мысленно по коду на бумаге, и вы поймете, почему этот код ведет себя так, как он себя ведет. Кроме того, вы можете просмотреть код с помощью отладчика, проверяя состояние полей по мере выполнения кода, и это тоже покажет вам, почему это происходит.

2. Разница в том, что вы немедленно возвращаетесь из метода в одном экземпляре и устанавливаете переменную внутри цикла в другом

3. Если вы это сделаете score = false; , есть вероятность, что цикл на этом не закончится, и он может занять true последующую итерацию.

4. Если вы удалите ранний возврат, возвращаемое значение зависит только от последних двух сравниваемых баллов, все предыдущие значения не имеют значения.

Ответ №1:

Это просто потому, что с «return false;» в 7-й строке вы выходите из метода рано, с правильным результатом, как следует из алгоритма.

Если вы просто присваиваете баллу значение false, вы продолжаете цикл, поэтому в некоторых случаях результат становится недействительным (просто потому, что в дальнейшем вы можете присвоить балл с true).

Ответ №2:

  • Хорошо, потому return false что останавливает выполнение цикла for и возвращает значение туда scoresIncreasing , откуда была вызвана функция, как только она подсчитывает значение балла, которое меньше значения предыдущего балла.
  • В то время как при использовании score=false циклов for выполняется полный массив, а затем возвращается true или false только при условии, что последние элементы массива больше или меньше его предыдущего значения