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

    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);
        }
    }
    Ответ написан
    2 комментария
  • Есть 2 варианта кода. Во 2-м варианте при определённом положении оператора return в ветвлении if-else программа выдает ошибку, почему?

    morto
    @morto
    вечный ученик
    Скорее всего компилятор ругается на то, что у вас не во всех вариантах событий возвращается какое-либо значение, допустим в коде ниже если выполнится условие if(income1>income2), но не выполнится вложенное в него if(income1>income3), то функция просто ничего не вернет, ибо блок else для вложенного if отсутствует.
    if (income1>income2) {
                if (income1>income3) { 
                    return film1;  
                }
    Ответ написан
    5 комментариев