2009-11-15 2 views
0

Я надеялся получить некоторые мнения относительно лучших практик и комментариев о том, как я читаю пользовательский ввод из командной строки. Есть ли рекомендуемый способ сделать это, я правильно использую блоки try/catch?Правильный способ чтения пользовательского ввода из командной строки в java

Мой пример здесь работает нормально, но все равно хотел бы услышать, есть ли «чистый» способ сделать это. Большое спасибо. Например, он возвращает утверждения в каждом блоке catch? Или, должен ли я поместить свою логику (условные выражения) в блок try?

общественного класса Client {

public static void main(String[] args) { 
    begin(); 
} 

private static void begin(){ 
    Machine aMachine = new Machine(); 
    String select=null; 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    while(aMachine.stillRunning()){ 
     try { 
      select = br.readLine(); 
     } catch (IOException ioe) { 
      System.out.println("IO error trying to read your selection"); 
      return; 
     }catch(Exception ex){ 
      System.out.println("Error trying to evaluate your input"); 
      return; 
     } 

     if (Pattern.matches("[rqRQ1-6]", select)) { 
      aMachine.getCommand(select.toUpperCase()).execute(aMachine); 
     } 
     /* 
     * Ignore blank input lines and simply 
     * redisplay options 
     */ 
     else if(select.trim().isEmpty()){ 
      aMachine.getStatus(); 
     } 
     else {     
      System.out.println(aMachine.badCommand()+select); 
      aMachine.getStatus(); 
     } 
    } 
} 

}

ответ

1

Я обычно perfer использовать класс сканера для чтения из строки ввода. С классом сканера вы можете запросить конкретные типы (double, int, ..., string). Это также проведет проверку достоверности.

Я бы не рекомендовал писать парсинг ввода так, как вы это делали. Захват родового исключения будет захватывать что угодно, из MemoryError и т. Д. Придерживайтесь особых исключений и обрабатывайте их оттуда. Сканер будет использовать InvalidInputException (или что-то подобное), если вход не соответствует ожидаемому типу.

+0

Сканер не требует использования блоков try/catch и обработки исключений? – denchr

+0

Он не требует этого, но он будет бросать их на плохой вход. – monksy

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

  • Нет связанных вопросов^_^