今天看到一个问题,有朋友提问说,main方法里参数想测试下,结果老提示java.lang.ArrayIndexOutOfBoundsException,不知道出错在什么地方。原程序是这样的。
public class Test2{
public static int find_e(String[][] x, String y){
for(int k = 0; k < x.length; k ++)
if(x[k][0].equals(y))
return k;
return -1;
}
public static int find_c(String[][] x, String y){
for(int k = 0; k < x.length; k ++)
if(x[k][1].equals(y))
return k;
return -1;
}
public static void main(String[] args){
String[][] x = {
{"good", "好"}, {"bad", "坏"}, {"work", "工作"}};
int k;
String in = args[0];
if((k = find_e(x, in)) != -1)
System.out.println(x[k][1]);
else if((k = find_c(x, in)) != -1)
System.out.println(x[k][0]);
else
System.out.println("无此单词");
}
}
第一眼看到,我以为是在调用方法的时候没有new一个类对象而直接调用方法的原因,但是有static,实际还是没有问题的,可以调用成功。提示的内容不是方法错误,而是数组越界,args[0]这里调用的时候出错。
我明白过来,是调用程序后面参数的时候出错了。网上查资料,main方法里面参数调用问题,果然很多高手都给出了答案。main方法有参数需要调用但是直接运行不带参数,就出现数组越界的错误提示。
main方法里面是可以有参数的,还可以有多个参数,因为String[] args本来就是能够接收多个字符串参数。所以为什么默认的写法是下面的样子,那就是给参数留有余地
public static void main(String[] args){
但是定义了参数而且在程序里面调用的时候是数组形式,实际运行的时候没有带参数,程序就会提示数组越界错误。
解决的办法,如果是命令行模式,使用java Test2 good,这样带上参数的方式来运行就没有问题,顺利的进行。
如果是netbeans或者eclipse,需要在运行的方式里做调整,netbeans里面是运行->设置项目配置->定制,选择定制后出来界面里面在参数一栏里面填上运行时的参数就可以,再运行程序就正常走。