2015-04-04 3 views
0

Нужно ли обрабатывать исключения при использовании класса Scanner в java. Как вы можете объяснить об этом?Обработка исключений в сканере

У меня нет правильного представления об этом. Кто-нибудь может мне помочь?

+0

Что вы пробовали? Пожалуйста, опубликуйте фрагмент кода, в котором вы столкнулись с проблемой. –

+0

@ Самера, что ты пытаешься сделать? Пожалуйста, поделитесь некоторыми примерами – Neo

ответ

1

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

В Scanner, если вы принимаете метод nextDouble(), он выбрасывает различные исключения в зависимости от состояния сканера. Вы должны заботиться об этом.
Но способ заботы зависит от вашей логики программы.

Тем не менее, большинство исключений в Scanner являются RuntimeException, то есть вам не нужно явно поймать их в вашем коде. Предполагая, что вы находитесь в main, если возникает исключение, он будет обрабатываться JVM на верхнем уровне. В этом случае ваша программа выйдет с кодом ошибки и stacktrace.

Единственное исключение в Scanner которые проверена и что вы должны обращаться с каким-то образом, когда вы строите Scanner от А-файлов. IOException и FileNotFoundException нельзя игнорировать.


В качестве примера (злоупотребляют) использование исключений, когда вы читаете double, вы можете захотеть сделать:

public static void testScanDoubleWithException() { 
    Scanner sin = new Scanner(System.in); 
    System.out.println("Enter a double: "); 
    while (true) { 
     try { 
      double d = sin.nextDouble(); // Throw if not a double 
      System.out.println("Read double value: "+d); 
      break; 
     } 
     catch (InputMismatchException e) { 
      System.out.println("Invalid double, shoot again:"); 
      sin.nextLine(); // consume bad input 
     } 
    } 
    sin.close(); 
} 

Но Scanner класс предоставляет более простой/явный способ:

public static void testScanDouble() { 
    Scanner sin = new Scanner(System.in); 
    System.out.println("Enter a double: "); 
    while (!sin.hasNextDouble()) { 
     System.out.println("Invalid double, shoot again:"); 
     sin.nextLine(); 
    } 
    double d = sin.nextDouble(); 
    System.out.println("Read double value: "+d); 
    sin.close(); 
} 
0

Java поддерживает обработку исключений, чтобы мы могли избежать нежелательного поведения в наших приложениях. Во время любой транзакции, если мы предвидим любое нежелательное поведение, мы должны обрабатывать исключения. Класс сканера может вызывать любое исключение, основанное на типе используемой операции, например, Runtime, незаконныйArgument, numberformat и т. Д., Поэтому в качестве хорошей практики мы всегда должны улавливать все конкретные исключения отдельно и лучше выполнять.

0

Да. Например, если вы используете объект Scanner для чтения файла, вы должны обрабатывать FileNotFoundException, иначе будет ошибка. Однако, если вы просто используете System.in в качестве входных данных, ошибка не будет отображаться. Но в то же время вы должны проверить, соответствует ли вход в соответствии с тем, что вы хотели от пользователя, поэтому всегда рекомендуется использовать обработку исключений.

Смежные вопросы