ошибка missing return statement
В случае входа в if ( str.length() > 2 ) ), но не попадания во вложенный if(str.equals(«hi»)) , окажется, что отсутствует конструкция return , которую следует исполнить потоку.
Как исправить:
Существует множество способов, к примеру, извлечь конструкцию return false ; из блока else :
public boolean startHi(String str) < if (str.length() >= 2) < String w = str.substring(0, 2); // w = первые 2 символа str if (w.equals("hi")) < return true; >> return false; >
Но логичнее сразу написать следующее:
public boolean startHi(String str)
А еще логичнее воспользоваться методом startsWith :
public boolean startHi(String str)
Отсутствует оператор возврата Java
В этом руководстве мы рассмотрим распространенную ошибку в процессе разработки Java. Обычно с этой проблемой сталкиваются новички, ошибка отсутствия оператора возврата в приложении Java.
Ошибка отсутствующего оператора возврата является ошибкой времени компиляции . Он выбрасывается на этапе компиляции. Современные IDE обнаруживают эту ошибку на лету. Поэтому этот тип ошибки, как правило, легко обнаружить.
- оператор return был просто пропущен по ошибке
- метод не возвращает никакого значения, но в сигнатуре метода не объявлен тип void
2. Отсутствует заявление о возврате
Сначала мы рассмотрим пару примеров. Эти примеры относятся к оператору return, который был пропущен по ошибке. Затем мы будем искать пример отсутствующего типа void в сигнатуре метода. Каждый пример показывает, как мы можем устранить ошибку оператора возврата java.
2.1. Пропущенный оператор возврата
Далее давайте определим простой метод pow :
public int pow(int number) int pow = number * number; >
В результате компиляции предыдущего кода получаем:
java: missing return statement
Чтобы решить эту проблему, мы просто добавим оператор return после переменной pow :
public int pow(int number) int pow = number * number; return pow; >
Следовательно, если мы вызовем метод pow, мы получим ожидаемый результат.
Аналогично, но с условными конструкциями возникает такая ошибка:
public static String checkNumber(int number) if (number == 0) return "It's equals to zero"; > for (int i = 0; i number; i++) if (i > 100) return "It's a big number"; > > >
Приведенный выше код проверяет введенный номер. Сначала сравните введенное число с 0. Если условие истинно, возвращается строковое значение. Затем, если число больше 0, мы находим цикл for с внутренним условием. Наш условный оператор внутри цикла for выполняется, если « i » больше 100. Но как насчет отрицательного входного числа? Да, ты прав. Мы пропускаем оператор возврата по умолчанию. Поэтому, если мы скомпилируем наш код, мы снова получим ошибку оператора java:missing return .
Итак, чтобы исправить это, нам просто нужно поместить оператор возврата по умолчанию в конце метода:
public static String checkNumber(int number) if (number == 0) return "It's equals to zero"; > for (int i = 0; i number; i++) if (i > 100) return "It's a big number"; > > return "It's a negative number"; >
2.2. Отсутствующий возврат в лямбдах
Кроме того, при работе с лямбда-выражениями эта ошибка могла появиться. Для функций может быть немного сложно обнаружить эту ошибку. Метод map в потоках — обычное место, где возникает эта ошибка. Давайте проверим наш код:
public MapString, Integer> createDictionary() ListString> words = Arrays.asList("Hello", "World"); MapString, Integer> dictionary = new HashMap>(); words.stream().map(s -> dictionary.put(s, 1);>); return dictionary; >
Предыдущий код выглядит нормально. Есть заявление о возврате. Наш возвращаемый тип данных равен сигнатуре метода. Но как насчет кода внутри метода карты в потоке? Метод карты ожидает функцию в качестве аргумента. В этом случае мы только помещаем данные в наш словарь внутри метода карты. В результате, если мы попытаемся скомпилировать этот код, мы снова получим ошибку оператора java:missing return .
Далее, чтобы устранить ошибку, мы просто заменяем карту на метод forEach в потоке:
words.forEach(s -> dictionary.put(s, 1);>);
Или напрямую вернуть карту из потока:
dictionary = words.stream().collect(Collectors.toMap(s -> s, s -> 1))
2.3. Отсутствует подпись метода
Наконец, последний случай — это когда мы пропустили добавление возвращаемого типа в сигнатуру нашего метода. Следовательно, когда мы пытаемся скомпилировать наш метод, мы получаем ошибку. Следующий пример кода показывает нам это поведение:
public pow(int number) int pow = number * number; return pow; >
Мы забыли добавить int в качестве возвращаемого типа. Если мы добавим его в наш метод, сигнатура исправит эту ошибку:
public int pow(int number) int pow = number * number; return pow; >
3. Заключение
В этой статье мы рассмотрели несколько примеров отсутствующих операторов return. Как это может появиться в нашем коде и как мы можем это исправить. Это полезно, чтобы избежать будущих ошибок в нашем коде и, возможно, пару минут проверки кода.
Как обычно, все фрагменты, использованные в этой статье, доступны на GitHub .
- 1. Обзор
- 2. Отсутствует заявление о возврате
- 2.1. Пропущенный оператор возврата
- 2.2. Отсутствующий возврат в лямбдах
- 2.3. Отсутствует подпись метода
Не понимаю откуда ошибка missing return statement, где она и в чем заключается?
Серьёзно? У вас ошибка «отсутствует оператор возврата», вы смотрите в метод, который объявлен возвращающим String, в котором нет ни одного оператора return, и всё ещё не понимаете в чём проблема?
Ответ написан более двух лет назад
SandPie @SandPie Автор вопросаКак отсутствует? А return film;? (Я совсем недавно начал изучать java, так что вопросы кажутся глупыми и элементарными для тех кто уже не первый год кодит на java)
SandPie @SandPie Автор вопроса
Черт, я реально дурак, извиняюсь, только сейчас заметил, что у меня 2 метода с идентичными названиями. Еще раз извиняюсь
Ответы на вопрос 1
public class Praktikum <
<>
public static void main(String[] args)
String highestGrossingFilm = findHighestGrossingFilm();
System.out.println(«Самый кассовый фильм: » + highestGrossingFilm);
>public static String findHighestGrossingFilm() String film1 = «Титаник»;
int income1 = 2194;String film2 = «Аватар»;
int income2 = 2810;String film3 = «Тёмный рыцарь»;
int income3 = 1084;Ответ написан более двух лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопросВойдите, чтобы написать ответ

- Java
- +1 ещё
Как разрабатывать приложение Spring, чтобы каждый раз не деплоить его на сервер для отладки?
- 1 подписчик
- час назад
- 18 просмотров
Ошибка: missing return statement
Необходимо сравнить суммы сборов фильмов и вернуть значение самого кассового из них. Написал код, выдает ошибку Ошибка компиляции:
missing return statement
>
Помогите найти ошибку
public class Praktikum public static void main(String[] args)String highestGrossingFilm = findHighestGrossingFilm();
System.out.println(«Самый кассовый фильм: » + highestGrossingFilm);
public static String findHighestGrossingFilm()
String film1 = «Титаник»;
int income1 = 2194;
String film2 = «Аватар»;
int income2 = 2810;
String film3 = «Тёмный рыцарь»;
int income3 = 1084;
>else if (income2>income1)