Ошибка missing return statement
возникает, когда метод, который имеет тип возвращаемого значения (является не void
), ничего не возвращает оператором return
.
Давайте посмотрим на ваш метод с точки зрения jdk.
Так, нужно постараться выполнить код в блоке try
. Есть два варианта: код в блоке try
выполнится или не выполнится (произойдёт исключение).
Если код в блоке try выполнится (исключения не произойдёт):
из метода будет возвращена строка, считанная BufferedReader
'ом. Всё ок.
Если код в блоке try не выполнится (произойдёт исклоючение): программа "перепрыгивает" в блок catch
. В блоке catch
ничего не возвращается. Программа будет выполнять метод дальше, но в методе больше ничего нет. И оператора return
, который должен вернуть значение, тоже нет. А метод должен возвращать строку. Всё плохо, так быть не должно. Вот и причина ошибки.
Решение проблемы:
Нужно добавить оператор return
в блок catch
. Можно вернуть сообщение об ошибке, например:
} catch (IOException e){
return "Ошибка! Не удалось считать данные!";
}
Но можно сделать даже так:
} catch (IOException e){
return e.getMessage();
}
P.S:
В данном случае не нужно использовать try-with-resources
, про это уже говорил @NowhereMan. Просто используйте обычный try-catch
. И закрывать поток System.in
не надо:
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
return bufferedReader.readLine();
} catch (IOException e){
return "Ошибка! Проблема при чтении данных!";
}