Задать вопрос
@Stich25

Есть 2 варианта кода. Во 2-м варианте при определённом положении оператора return в ветвлении if-else программа выдает ошибку, почему?

https://pastebin.com/RTmAqef0 1-й вариант кода он рабочий. Внимание на последний }else{ return film3;} внутри блока.
https://pastebin.com/Wt8yihQD 2-й вариант кода и здесь программа выдает ошибку missing return statement. Я уже понял что если оператор return написать вне блока }else{ } return film3; или вообще удалить else и вызвать оператор возврата в конце метода все работает, но почему так происходит не понимаю.
  • Вопрос задан
  • 135 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
morto
@morto
вечный ученик
Скорее всего компилятор ругается на то, что у вас не во всех вариантах событий возвращается какое-либо значение, допустим в коде ниже если выполнится условие if(income1>income2), но не выполнится вложенное в него if(income1>income3), то функция просто ничего не вернет, ибо блок else для вложенного if отсутствует.
if (income1>income2) {
            if (income1>income3) { 
                return film1;  
            }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Полностью согласен с тем, что написали мои коллеги.
От себя добавлю, что ваш код можно несколько упростить. Если вам придется сравнивать не 2 или 3 фильма, а допустим штук 100, то вы просто с ума сойдете для каждого из них подбирать комбинацию и строить ветки if else. А значит, должно быть другое "общее" решение.
Можете ознакомиться с одним из вариантов решения с помощью, которого вы можете сравнить сколько угодно фильмов и без всякого if .. else:
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        // Создаем фильмы
        Cinema cinema1 = new Cinema("Титаник", 2194);
        Cinema cinema2 = new Cinema("Аватар", 2810);
        Cinema cinema3 = new Cinema("Тёмный рыцарь", 1084);
        Cinema[] cinemas = new Cinema[]{cinema1, cinema2, cinema3};
        // Находим фильм с большим доходом
        String cinemaTitle = findHighestGrossingFilm(cinemas);
        System.out.println(cinemaTitle);
    }

    /**
     * Метод находит фильм с большим доходом
     * @param cinemas массив фильмов для сравнения
     * @return название фильма с большим доходом
     */
    public static String findHighestGrossingFilm(Cinema ... cinemas) {
        Cinema cinemaWithMaxIncome = Arrays.stream(cinemas).max(Cinema::compareTo).get();
        return cinemaWithMaxIncome.name;
    }
}

class Cinema implements Comparable<Cinema> {

    String name;
    int income;

    public Cinema(String name, int income) {
        this.name = name;
        this.income = income;
    }

    // Имплементируем интерфейс Comparable и сравниваем income объектов
    @Override
    public int compareTo(Cinema c) {
        return Integer.compare(this.income, c.income);
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы