Перейти к содержимому

Java missing return statement что за ошибка

  • автор:

ошибка 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

    • 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)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *