@ Ответа Bragboy достаточно, чтобы исправить ошибку компиляции и заставить программу работать. Проблема, которую это исправляет, заключается в том, что метод BufferedReader.readLine()
может вызвать IOException, и это проверенное исключение. Java настаивает , что, когда в методе генерируется проверенное исключение (или какой-либо другой метод, вызываемый методом), оно ДОЛЖНО быть перехвачено в методе с использованием метода try / catch ИЛИ, объявленного как выброшенный методом. Ответ @ Bragboy делает последнее в capitalize
, а затем перехватывает IOException в методе main
.
Однако есть и другая важная проблема.
В настоящее время capitalize
не выполняет то, что явно подразумевает название метода и подпись. Подпись подразумевает, что метод использует свой аргумент. Фактически, он полностью игнорирует свой аргумент и вместо этого читает (и использует заглавные буквы) строку из ввода триггера.
Лучше было бы прочитать входную строку в input
в методе main
и передать ее в качестве аргумента s
. Затем измените capitalize
на , просто используйте аргумент String.
Два других стиля:
Имя класса должно быть MainClassExec
... не Mainclassexec
; обратитесь к Руководству по стилю Java для объяснения соглашений об именах Java.
То, как ваше приложение справляется с отсутствующим вводом, ужасно. Предполагая, что вы исправили capitalize
, как я и предлагал, метод main
должен проверить, что переменная input
не равна null
перед вызовом capitalize
.
Наконец, на мой взгляд, редко бывает что-то подобное делать:
if (x == null) {
throw new NullPointerException(...);
}
x.something();
Вместо этого вы должны просто сделать это:
x.something();
Это автоматически сгенерирует NullPointerException
, если x
равно null
. Кроме того, не рекомендуется использовать сообщение NullPointerException
для сообщения об ошибке пользователя. Большинство NPE происходят в результате ошибок программирования где-то. Если вы начнете использовать NPE для сообщения об ошибках, вызванных (например) неправильным вводом данных пользователем, вы получите беспорядок.