2009-05-08 3 views
3

Я новичок Java так, пожалуйста, медведь со мнойобучение Try-Поймайте

static int load = 100; 
static int greet; 

public void loadDeduct(int cLoad, int c){ 
    int balance; 
    balance = cLoad - 7; 
    System.out.println("Your balance: " + balance); 
} 

public void loadDeduct(int tLoad){ 
    int balance; 
    balance = tLoad - 1; 
    System.out.println("Your balance is: " + balance); 
} 

public static void main (String [] args){ 
    int choice; 
    Scanner scan = new Scanner(System.in); 

    System.out.println("I'm a cellphone, what do you want to do?"); 
    System.out.println("Press 1 to send SMS/Press 2 to Call"); 

    choice = scan.nextInt(); 

    CellphoneLoad N95 = new CellphoneLoad(); 

    if (choice == 1){ 
     N95.loadDeduct(load); 
    }else if (choice == 2){ 
     N95.loadDeduct(load, greet); 
    }else{ 
     System.out.println("Invalid Option!!!"); 
    } 

Как реализовать обработку с помощью этой программы исключение? Я не совсем уверен, как использовать блокирующий блок, поскольку нам еще не научили все вещи исключений. Это было просто упражнение, которое мы попросили сделать. Я хочу заменить инструкции if else блоками try-catch ... это возможно?

+0

Похоже, домашнее задание? – Naaff

+0

Спасибо за вашу помощь! Я собираюсь все исправить. Нам еще не научили все вещи исключений. Это было просто упражнение, которое нас попросили сделать. Спасибо! – 2009-05-08 04:28:43

ответ

0

Это действительно довольно просто. Сначала определите, где вы хотите исключение. Могут быть исключения, брошенные библиотечным кодом, или вы можете бросить свои собственные. Затем используйте try .. catch для обработки. Вот простой «Привет, мир» иш пример:

public class TryTry { 

    public void doIt() throws Exception { 
     System.err.println("In the doIt method."); 
     throw new Exception("Hello there!"); 
    } 

    public static void main(String[] argv){ 
     TryTry t = new TryTry(); 
     // here we'll catch it. 
     try { 
      System.err.println("About to call doIt()."); 
      t.doIt(); 
     } catch (Exception e) { // e now has your exception object 
      System.err.println("In the exception handler."); 
      System.err.println("Exception says: "+ e); 
     } 
    } 
} 

Эффект броска, чтобы построить этот объект исключения и отправить его в стек до тех пор, пока не поймают. Чтобы поймать его, вы окружаете код, который может его выбросить tr { ... }, и обрабатывать исключение с помощью catch.

Вот результаты:

 

javac TryTry.java && java TryTry 
About to call doIt(). 
In the doIt method. 
In the exception handler. 
Exception says: java.lang.Exception: Hello there! 
1

Это не является идеальным для использования исключений для управления потоком. Из вашего кода неясно, какие исключения могут быть выбраны. Может быть, вы можете подробнее разобраться.

1

только часть вашего кода, который может возможно бросить исключение является вызов:

scan.nextInt(); 

Согласно JavaDocs, это может бросить следующие возможные исключения:

  • InputMismatchException (если следующий токен не соответствует регулярному выражению Integer или находится вне диапазона )
  • NoSuchElementException (есливхода исчерпан)
  • IllegalStateException (если это сканера закрыт)

Так что если вы хотите, ваш код для учета возможностей этих исключений бросают, вы должны переписать его следующим образом:

try { 
    choice = scan.nextInt(); 
} 
catch (InputMismatchException e) { 
    System.out.println(e.getMessage()); 
} 
catch (NoSuchElementException e) { 
    System.out.println(e.getMessage()); 
} 
catch (IllegalStateException e) { 
    System.out.println(e.getMessage()); 
} 

Как правило, вы хотите, чтобы ваши блоки «catch» начинались с определенной или, скорее всего, с менее вероятным/более общим по своей природе.

Вы можете дополнительно «выбросить» исключения, чтобы любой метод, из которого исключение не выполнялся, не обрабатывает его - метод, который вызвал этот метод, вызывающий исключение, должен был бы обработать его (или выбросить его снова и т. Д., До тех пор, пока он переходит в среду выполнения Java).

В случае это «если» заявление вы хотите заменить, я бы порекомендовал «переключатель» заявление:

switch (choice) { 
    case 1: N95.loadDeduct(load); 
      break; 
    case 2: N95.loadDeduct(load, greet); 
      break; 
    default: System.out.println("Invalid Option!!!"); 
} 
0

Я не вижу никаких причин, чтобы использовать исключения вместо If- else block. вы можете попробовать использовать оператор switch, он будет выглядеть лучше.

Вы должны использовать исключения для обработки ошибок, которые могут возникнуть внутри методов loadDeduct. то вы бы окружили линии, вызывающие N95.loadDeduct блоком try-catch, чтобы написать, что произойдет, если loadDeduct пойдет не так.

1

Метод Scanner.nextInt() может занять несколько исключений. На связанной странице спецификаций API перечислены три исключения, которые могут быть выбраны.

Например, если введено нецелое значение, например "one", а не 1, то может быть выбрано InputMismatchException.

В общем, try-catch используется для перехвата исключений, как показано в следующем коде:

try 
{ 
    Integer.parseInt("one");  // Statement that can cause an exception. 
} 
catch (NumberFormatException e) // Specify which exception to catch. 
{ 
    // Code to handle the NumberFormatException. 
} 

Более подробную информацию о исключений могут быть найдены в Lessons: Exceptions из The Java Tutorials. В частности, может оказаться полезным раздел Catching and Handling Exceptions.

2

Один важный принцип, чтобы рассмотреть с исключениями в Java является то, что существует два типа: 1. Время воспроизведения 2. типизированных/Явный (за неимением лучшего слова)

исключения времени выполнения должны быть брошены, когда есть ошибка программирования и, как правило, они не должны быть пойманы, если вы не поймаете верхний уровень, чтобы сообщить об ошибке.

Типизированные/Явные исключения украшены вызовами методов и должны быть там, чтобы вызывающий абонент мог принять какое-то действие на них.

В случае с кодом выше, на самом деле нет места, которое чувствует, что должно использовать обработку исключений.

Как указывал Патрик, вы обычно не хотите использовать исключения для управления потоком.

1

Добавление исключений в этом фрагменте кода не придает большого значения. Что я могу придумать:

public static void main (String [] args){ 

..... 

try{ 
handleUserChoice(choice);//new method 
} 
catch(InvalidChoiceException e){ 
System.out.println("Invalid Option!!!"); 
} 
} 
Смежные вопросы