获取信息的JAVA命令行参数

时间:2015-04-25 01:01:20

标签: java input jvm args

我只是有一个我无法理解的小问题,希望我能得到一些帮助。 我想编写一个程序,使用命令行将信息输入我的程序,例如(java xx 10 20)。在我的程序中,我得到了类似的东西

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

我想只输入两个正整数进入我的命令行..否则它应该拒绝我的输入,但事实是我有时会带来这样的错误(线程中的异常“主”java.lang.ArrayIndexOutOfBoundsException: 0)有时我的程序运行甚至没有在命令行中输入任何两个整数... 我必须尽快完成我的代码,我很感激你的帮助 附:因为我的程序尚未完成,所以不要担心我的身份

1 个答案:

答案 0 :(得分: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的情况。如果是这样的话,你会得到NumberFormatException ......

备注:

if符号(x ? y : z)用于在y为真的情况下返回x,否则返回z