2015-04-25 2 views
-1

J'ai juste une petite question que je ne comprends pas, j'espère que je peux obtenir de l'aide s'il vous plaît. Je veux écrire un programme qui obtient l'information dans mon programme en utilisant la ligne de commande, exemple (java xx 10 20). Dans mon programme, je suis quelque chose comme çaarguments de ligne de commande JAVA pour obtenir des informations

int coffeeCups= Integer.parseInt(args[0]); 
    int coffeeShots= Integer.parseInt(args[1]); 
    if (args.length==0) 
     { 
     System.out.print ("No arguments.."); 
        System.exit(0); 
     } 
     else if (args.length==1) 
     {System.out.println("not enough arg.."); 
        System.exit(0); 
    } 
     else if (args.length>2) 
     {System.out.println("too many arg."); 
        System.exit(0); 
    } 
     else if (Integer.parseInt(args[0]<0) && Integer.oarseInt(args[1]<0) 
     {system.out.println("negative chain arg"); 
     System.exit(0); } 
        else if (Integer.parseInt(args[0]<0) || Integer.oarseInt(args[1]<0) 
     {system.out.println("negative arg"); 
     System.exit(0);} 

Je veux entrer seulement deux entiers positifs DANS MA LIGNE DE COMMANDE .. sinon il devrait rejeter mes entrées, mais la chose est que je suis venu quelque temps avec en erreur comme ça (Exception dans le thread "principal" java.lang.ArrayIndexOutOfBoundsException: 0) et parfois mon programme s'exécute sans même entrer deux entiers dans la ligne de commande ... Je dois finir mon code dès que possible, et j'apprécierais votre aide PS ne vous inquiétez pas de mon identité car mon programme n'est pas encore terminé

Répondre

0

Tout d'abord, vous pouvez utiliser un command-line-arguments parsing facility.

Vous essayez d'indices d'accès qui n'existent pas:

// who said there is a first argument? 
int coffeeCups = Integer.parseInt(args[0]); 
// who said there is a second argument? 
int coffeeShots = Integer.parseInt(args[1]); 

Vous devez premier chèque, puis l'accès:

// this is just like using sentinel value. If you're not familiar with 
// shortend `if` see notes. 
int coffeeCups = args.length > 1 ? Integer.parseInt(args[0]) : null; 
int coffeeShots = args.length > 2 ? Integer.parseInt(args[1]) : null; 

if (coffeeCups == null || coffeeShots == null){ 
    throw new Exception("Not enough arguments"); 
} 

if (args.length > 2){ 
    throw new Exception("Too many arguments"); 
} 

Il y a aussi le cas où les arguments ne sont pas Integer s. Vous obtiendrez un NumberFormatException si tel est le cas ...

Notes:

courte notation if (x ? y : z) est utilisé pour revenir y en cas x est vrai, sinon il retourne z.