2015-02-06 2 views
-1

Мне удалось заставить код работать, а следующая задача - поместить его в цикл, чтобы работать многократно, и цикл должен заканчиваться, если пользователь вводит номер -ve или 0. Я полный новичок и, пожалуйста, не проклинай меня за глупый код.Где я должен начинать и заканчивать цикл while здесь

package Exceptions; 

import java.util.Scanner; 

public class usrDefined { 

    public static void main(String[] args) { 

     try { 
      String s; 
      int i; 
      Scanner a = new Scanner(System.in); 
      System.out.print("Enter your Name: "); 
      s = a.nextLine(); 
      System.out.print("Enter your Age: "); 
      i = a.nextInt(); 
      while((i = a.nextInt())!= -(i = a.nextInt()) && (i = a.nextInt())!= 0) 
      if (i < 18) { 
       throw new AgeException(); 
      } 
      System.out.print("You are eligible for the deal " + s); 
     } catch (AgeException e) { 
      e.specifyException(); 

     } 
    } 
} 

class AgeException extends Exception { 
    public void specifyException() { 
     System.out.println("Sorry,you are not eligible"); 
    } 

} 
+2

'throw new AgeException();' - почему? – Maroun

+2

Он даже компилируется? Что вы подразумеваете под 'if ((a.nextInt)> 18);'? – Maroun

+1

Почему бы вам не рассказать нам, что не так? Вы утверждаете, что что-то идет не так, но не беспокоиться о том, что это такое. Кроме того, похоже, что вы выбрасываете исключение, когда вы просто должны использовать оператор if. Исключения для * исключительного поведения *. – tnw

ответ

2

Я не уверен, что это исключение предназначено для достижения или почему это было даже сделано. Если вы просто хотите, чтобы проверить, если значение меньше 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. Так что логика никогда не будет вызвана. Если кажется неинтуитивным в отношении того, где и как вы бы назвали этот метод, это потому, что он находится на исключении, а использование исключений для логического потока по своей сути является неинтуитивным и неправильным :)

2

Это не так, как работает исключение. Когда вы исключение 1, условие исключения уже произошло; вы сообщаете об этом. Таким образом, с помощью этого кода вы автоматически генерируете исключительное условие, как только вы входите в блок try. Кроме того, условие не указано в специальном методе specifyException в определении класса исключения.Кроме того, когда вы обнаруживаете исключение, то есть когда обрабатывается условие исключения, а не когда условие исключения не произошло.

Чтобы получить эту работу с AgeException:

  1. Удалить это throw заявление в верхней части.
  2. Как только вы захватили возраст от пользовательского ввода, проверьте возраст с нормальным состоянием if. Внутри этого блока if, бросьте экземпляр вашего AgeException.
  3. После блока if, но все же в блоке try напечатайте сообщение «вы имеете право». Если исключение не было выбрано, пользователь «имеет право».
  4. При обнаружении исключения напечатайте сообщение «не имеет права».

Однако использование исключений здесь не представляется правильным. Если у кого-то возраст меньше 18 лет, мне не кажется исключительным. Простой if/else - лучший дизайн здесь.

+0

Благодарим вас за помощь rgettman. Я знаю, что исключения - отличное совпадение, но это небольшое задание, данное моим профессором. –

+0

Я догадался, поэтому я включил советы о том, как заставить его работать с помощью «AgeException». – rgettman

0

Бросание исключения не требуется или хороший дизайн. Я думаю, что это то, что вы хотите:

public static void main(String[] args) { 
    Scanner a = new Scanner(System.in); 
    System.out.println("Enter your Name: "); 
    String s = a.nextLine(); 
    System.out.println("Enter your Age: "); 
    int i = a.nextInt(); 
    if (ageOk(a)) { 
     System.out.println("You are eligible for the deal!!!"); 
    } 
} 

private static boolean ageOk(int age) { 
    return age > 18; 
} 
0

Я не уверен, если handleing это с помощью исключений является правильным, но вы можете попробовать это:

UsrDefined.java

package exceptions; 

import java.util.Scanner; 

public class UsrDefined { 



    public static void main(String[] args) { 

    try{ 
     System.out.print("Enter your age:"); 
     Scanner a = new Scanner(System.in); 
     checkAge(a); 
    }catch (AgeException e){ 
     System.out.println(e.getMessage()); 
    } 
} 
    private static void checkAge(Scanner a) throws AgeException { 

     if(a.nextInt() < 18) { 
      throw new AgeException("You are not eligible for the deal!"); 
      } 

    } 


} 

AgeException.java

package exceptions; 

public class AgeException extends Exception { 

    private static final long serialVersionUID = 1L; 

    public AgeException(String msg) { 
     super(msg); 
    } 

} 
+0

throw new AgeException («Вы не имеете права на сделку!»); Нет доступного экземпляра типа UsrDefined. Должен квалифицировать выделение с помощью экземпляра-экземпляра типа UsrDefined (например, x.new A(), где x является экземпляром UsrDefined). –