Я не уверен, что это исключение предназначено для достижения или почему это было даже сделано. Если вы просто хотите, чтобы проверить, если значение меньше 18, вы можете сделать это с помощью простого if
высказывания:
String s;
int i;
Scanner a = new Scanner(System.in);
System.out.println("Enter your Name: ");
s = a.nextLine();
System.out.println("Enter your Age: ");
i = a.nextInt();
if (i < 18) {
System.out.println("Sorry,you are not eligible");
// presumably exit the application here as well?
} else {
System.out.println("You are eligible for the deal!!!");
// presumably continue with other logic here as well?
}
Как правило, никогда не использовать исключения для логики потока. Для этой цели существуют условные конструкции (if
). Исключение должно использоваться для выхода из метода или операции в неисправном состоянии, чтобы код, использующий этот метод или операцию, мог реагировать на это состояние с ошибкой. Проверка возраста пользователя не является неисправным состоянием, это просто бизнес-логика.
Что касается почему код у вас есть «не работает», есть несколько вопросов ...
Эта линия будет выходить из блока кода сразу:
throw new AgeException();
Это потому, что это, правда, выдает исключение. Итак, ничего после этой строки выполнится. Код немедленно перейдет к блоку catch
, поэтому поведение, ожидаемое здесь, будет заключаться в том, что пользователь никогда не запрашивается для ввода и всегда сразу же сообщает, что он имеет право на сделку.
Кроме того, есть три ошибки здесь:
if ((a.nextInt) > 18);
первая ошибка, что не существует a
переменных в этом контексте. Эта переменная находится в методе main
. Поэтому его нужно будет передать этому методу specifyException
.
Вторая ошибка заключается в том, что точка с запятой. Если компилятор не жалуется на это синтаксически (я недостаточно осведомлен о том, что Java знает наверняка), который в основном будет отображать весь блок if
, потому что он представляет собой пустой оператор. Таким образом, весь блок переводится как «если значение больше 18, ничего не делать».
Третья ошибка заключается в том, что вы забыли круглые скобки для nextInt()
.
И, наконец, даже если вы не сразу же бросаете исключение, нигде не называете метод specifyException
. Так что логика никогда не будет вызвана. Если кажется неинтуитивным в отношении того, где и как вы бы назвали этот метод, это потому, что он находится на исключении, а использование исключений для логического потока по своей сути является неинтуитивным и неправильным :)
'throw new AgeException();' - почему? – Maroun
Он даже компилируется? Что вы подразумеваете под 'if ((a.nextInt)> 18);'? – Maroun
Почему бы вам не рассказать нам, что не так? Вы утверждаете, что что-то идет не так, но не беспокоиться о том, что это такое. Кроме того, похоже, что вы выбрасываете исключение, когда вы просто должны использовать оператор if. Исключения для * исключительного поведения *. – tnw