#java #throw #numberformatexception
#java #выбрасывать #исключение numberformatexception
Вопрос:
Я пытаюсь создать свое собственное исключение NumberFormatException при преобразовании строки month в целое число. Не уверен, как создать исключение. Будем признательны за любую помощь. Нужно ли мне добавлять try-catch перед этой частью кода? У меня уже есть одно в другой части моего кода.
// sets the month as a string
mm = date.substring(0, (date.indexOf("/")));
// sets the day as a string
dd = date.substring((date.indexOf("/")) 1, (date.lastIndexOf("/")));
// sets the year as a string
yyyy= date.substring((date.lastIndexOf("/")) 1, (date.length()));
// converts the month to an integer
intmm = Integer.parseInt(mm);
/*throw new NumberFormatException("The month entered, " mm is invalid.");*/
// converts the day to an integer
intdd = Integer.parseInt(dd);
/* throw new NumberFormatException("The day entered, " dd " is invalid.");*/
// converts the year to an integer
intyyyy = Integer.parseInt(yyyy);
/*throw new NumberFormatException("The yearentered, " yyyy " is invalid.");*/
Комментарии:
1. Что происходит с кодом, который вы закомментировали?
2. @Thom Я получаю сообщение о недоступности для любого кода после броска.
3. Я удалил инструкции throw и добавил свою собственную строку в то место, где я ранее перехватывал исключение в своем коде.
Ответ №1:
что-то вроде этого:
try {
intmm = Integer.parseInt(mm);
catch (NumberFormatException nfe) {
throw new NumberFormatException("The month entered, " mm " is invalid.");
}
Или, немного лучше:
try {
intmm = Integer.parseInt(mm);
catch (NumberFormatException nfe) {
throw new IllegalArgumentException("The month entered, " mm " is invalid.", nfe);
}
РЕДАКТИРОВАТЬ: Теперь, когда вы обновили свой post, похоже, что вам на самом деле нужно что-то вроде parse(String) SimpleDateFormat
Комментарии:
1. Второй пример хорош тем, что он объединит исключения в цепочку, так что вы можете видеть, что причиной недопустимых аргументов было исключение числового формата.
2. @unbeli Я удалил инструкции throw и добавил свою собственную строку в то место, где я ранее перехватывал исключение в своем коде. catch (исключение NumberFormatException NFE) { System.out.println(NFE.GetMessage() «имеет нечисловой ввод в записи»);} Спасибо за ваш вклад
Ответ №2:
try {
// converts the month to an integer
intmm = Integer.parseInt(mm);
} catch (NumberFormatException e) {
throw new NumberFormatException("The month entered, " mm " is invalid.");
}
Комментарии:
1. Да, вы правы, потому что if вызвало исключение RuntimeException … Но в этом контексте вероятность невелика. Однако вы правы.
2. Я удалил инструкции throw и добавил свою собственную строку в то место, где я ранее перехватывал исключение в своем коде. catch (исключение NumberFormatException NFE) { System.out.println(NFE.GetMessage() «имеет нечисловой ввод в записи»);} Спасибо за ваш вклад!
Ответ №3:
Integer.parseInt() уже создает исключение NumberFormatException. В вашем примере кажется более уместным выбрасывать исключение IllegalArgumentException:
int minMonth = 0;
int maxMonth = 11;
try
{
intmm = Integer.parseInt(mm);
if (intmm < minMonth || intmm > maxMonth)
{
throw new IllegalArgumentException
(String.format("The month '%d' is outside %d-%d range.",intmm,minMonth,maxMonth));
}
}
catch (NumberFormatException nfe)
{
throw new IllegalArgumentException
(String.format("The month '%s'is invalid.",mm) nfe);
}
Комментарии:
1. Я удалил инструкции throw и добавил свою собственную строку в то место, где я ранее перехватывал исключение в своем коде. catch (исключение NumberFormatException NFE) { System.out.println(NFE.GetMessage() «имеет нечисловой ввод в записи»);} Спасибо за ваш вклад