2015-04-25 4 views
-1

У меня только небольшой вопрос, который я не могу понять, надеюсь, что смогу помочь. Я хочу написать программу, которая получает информацию в мою программу, используя командную строку, например (java xx 10 20). В моей программе я получил что-то вроде этогоJAVA Аргументы командной строки для получения информации

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

Я хочу войти только два положительных чисел на мою командную строку .. в противном случае он должен отказаться от своих входов, но дело в том, что когда-то я пришел с собственной ошибки, как, что (Исключение в потоке «main» java.lang.ArrayIndexOutOfBoundsException: 0), а иногда моя программа работает, даже не введя никаких двух целых чисел в COMMAND LINE ... Я должен закончить свой код как можно скорее, и я ценю помощь ур PS Не беспокойтесь о моей идентификации, поскольку моя программа еще не завершена

ответ

0

Прежде всего, вы можете использовать command-line-arguments parsing facility.

Вы пытаетесь индексы доступа, которые не существуют:

// 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]); 

Вы должны сначала проверить , то доступ:

// 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"); 
} 

Существует также случай, в котором аргументы не являются Integer s. Вы получите NumberFormatException, если это так ...

Примечания:

Короткие if обозначения (x ? y : z) используется для возврата y в случае x верно, в противном случае она возвращает z.

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