2 tina leo tina_leo 于 2016.03.28 21:26 提问

java中命令行参数的问题

学习了一点java ,写程序时遇到一个问题,想让从命令行中读取的参数来指导下一步工作可以吗?

下面是我写的实现优先级队列的一个主函数,总是报错说“Exception in thread "main" the current array has been sortes,now you can execut four commend like:Maximum”
java.lang.ArrayIndexOutOfBoundsException: 0
at com.nana.Queues.main(Queues.java:72)

 public static void main(String[] args){
            System.out.println("the current array has been sortes,now you can execut four commend like:Maximum,");
            int i=0;
            Queues Qu=new Queues();
            Qu.BUILDMAXHEAP(A);
            do{
            switch(args[i]){
                case "Maximum":Qu.Maximum(A);break;
                case"Extract-max":Qu.Extractmax(A);break;
                case"increasekey":System.out.println("please input the number you want to increase and the target:");
                Qu.Increasekey(A, Integer.parseInt(args[i+1]), Integer.parseInt(args[i+2]));break;
                case "exit":i=-2;break;
                case"insert":System.out.println("please input the number you want to insert:");
                    Qu.Insert(A,Integer.parseInt(args[i+1]) );break;
            }
            i++;
        }while(i!=-1);
        } 

5个回答

w172087242
w172087242   Ds   Rxr 2016.03.29 17:28
已采纳

这段代码错误太多!
1.java的main函数启动参数是在执行时一次性传入的;
2.出现死循环的dowhile;
3.代码如果需要健壮,那么参数个数是必须要判断的其长度的;

建议:
1.循环使用数组长度界定;
2.如果要逐个写入参数执行可以调用标准控制台输入System.in,当然Scanner对输入流进行了封装,使用也方便;
这样就可以实时在程序执行中对输入的命令执行想要的操作。

希望可以帮到你。

caozhy
caozhy   Ds   Rxr 2016.03.29 06:39

ArrayIndexOutOfBoundsException
下标越界,看下你传入的参数是不是不足,如果只有一个参数,args[i+1]会报错,如果没有参数,args[i]就报错了。

caozhy
caozhy 回复tina_leo: 一次性的。在程序启动前指定
一年多之前 回复
tina_leo
tina_leo 参数必须一下子都传完吗?java中不能根据输入的参数进行下一步动作然后还可以写命令吗?
一年多之前 回复
cxh269083073
cxh269083073   2016.03.29 11:52

switch中的break只能跳出switch语句,而且while的一直是true,所以do while循环是个死循环.
无论输入几个参数或者不输入参数,都会报出下标越界.

w172087242
w172087242 回复tina_leo: 当执行参数exit排在i>=2时,也是死循环,循环过程不会再接收外部参数了
一年多之前 回复
tina_leo
tina_leo 可是如果我输入的是exit,就会满足跳出while循环的条件啊
一年多之前 回复
hengyuetao
hengyuetao   2016.03.29 16:06

这个do while 是个死循环啊,i从0开始递增的,所以 i!=-1 条件永远是true

CSDNXIAON
CSDNXIAON   2016.03.30 11:29

java命令行参数
Java命令行参数
Java--命令行参数
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!