学习了一点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);
}
这段代码错误太多!
1.java的main函数启动参数是在执行时一次性传入的;
2.出现死循环的dowhile;
3.代码如果需要健壮,那么参数个数是必须要判断的其长度的;
建议:
1.循环使用数组长度界定;
2.如果要逐个写入参数执行可以调用标准控制台输入System.in,当然Scanner对输入流进行了封装,使用也方便;
这样就可以实时在程序执行中对输入的命令执行想要的操作。
希望可以帮到你。
ArrayIndexOutOfBoundsException
下标越界,看下你传入的参数是不是不足,如果只有一个参数,args[i+1]会报错,如果没有参数,args[i]就报错了。
switch中的break只能跳出switch语句,而且while的一直是true,所以do while循环是个死循环.
无论输入几个参数或者不输入参数,都会报出下标越界.
这个do while 是个死循环啊,i从0开始递增的,所以 i!=-1 条件永远是true