#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
только при условии, что последние элементы массива больше или меньше его предыдущего значения