2009-11-15 35 views
0

我希望從我從命令行讀取用戶輸入的方式上獲得一些有關最佳實踐和評論的意見。有沒有推薦的方法來做到這一點,我正確地使用try/catch塊嗎?以正確的方式從java中的命令行讀取用戶輸入

我的例子在這裏工作正常,但仍然希望聽到如果有一個'乾淨'的方式來做到這一點。非常感謝。例如,他是否需要在每個catch塊中返回語句? 或者,我應該把我的邏輯(條件)放在try塊內嗎?

公共類客戶{

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 2009-11-15 14:54:31

+0

它不需要它,但它會將它們投入不良輸入。 – monksy 2009-11-15 16:04:36