2009-11-15 3 views
0

J'espérais obtenir des opinions sur les meilleures pratiques et des commentaires sur la façon dont je lis les entrées de l'utilisateur à partir de la ligne de commande. Y a-t-il une manière recommandée de faire ceci, est-ce que j'utilise les blocs try/catch correctement?bonne façon de lire l'entrée de l'utilisateur à partir de la ligne de commande dans java

Mon exemple ici fonctionne bien, mais j'aimerais quand même savoir s'il y a une façon plus propre de le faire. Merci beaucoup. Par exemple, est-ce que les déclarations de retour dans chaque bloc catch sont nécessaires? Ou, devrais-je mettre ma logique (les conditions) dans le bloc try?

client public class {

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(); 
     } 
    } 
} 

}

Répondre

1

Je perfer généralement utiliser la classe du scanner pour lire de la ligne d'entrée. Avec la classe scanner, vous pouvez demander des types spécifiques (double, int, ..., string). Cela fera également des tests de validation pour vous.

Je ne recommanderais pas d'écrire l'analyse d'entrée comme vous l'avez fait. Attraper une exception générique va attraper n'importe quoi, à partir d'un MemoryError etc. Stick avec des exceptions spécifiques et les traiter à partir de là. Un scanner passera par une exception InvalidInputException (ou quelque chose à cet effet) si l'entrée ne correspond pas au type attendu.

+0

Le scanner ne nécessite donc pas l'utilisation de blocs try/catch et le traitement des exceptions? – denchr

+0

Il ne l'exige pas, mais il va les jeter sur une mauvaise entrée. – monksy

Questions connexes