当前位置: 代码迷 >> Java相关 >> "main" java.lang.ArrayIndexOutOfBoundsException: 0
  详细解决方案

"main" java.lang.ArrayIndexOutOfBoundsException: 0

热度:6046   发布时间:2013-02-25 21:50:11.0
程序有个问题 请教大家 谢谢帮忙~~~
这是个 掉转数组的程序 我知道 可以很简单的写 可是本人菜鸟 在练 继承~~~就出现了个小问题 大虾们 可以 不看全我代码 直接看我红色部分  


class Array{

private int temp[]=null;
private int foot;

public Array(int lenght){
if(lenght>0){

this.temp=new int[lenght];
}
else{

this.temp=new int[1];
}
}

public boolean add(int i){

if(temp.length>foot){
temp[foot++]=i;
return true;
}
else{
return false;
}
}

public int[] getTemp(){
return this.temp;
}
public int getFoot(){
return this.foot;
}

public void println(int[] temp){

for(int i=0;i<this.foot;i++)
System.out.println(temp[i]);
}

}


class ReverseArray extends Array{


public ReverseArray(int len){

super(len);
}
int i=super.getFoot();
int temp1[]=new int[i];//为什么这样申请就错哪 编译无问题 但是 没有输出 而是输出一些错误信息 如果在 下面那个getArray()方法里定义 就没问题???为甚么 啊 谢谢大家 帮忙~~!!
  public int[] getArray(){
i--;
for(;i>=0;i--){

temp1[i]=super.getTemp()[super.getFoot()-1-i];

}

return temp1;

}
}




public class ExtendsDemo07{

public static void main(String args[]){
ReverseArray reverse=new ReverseArray(1024);
reverse.add(1);
reverse.add(2);
reverse.add(3);
reverse.add(4);
reverse.add(5);
reverse.println(reverse.getArray());

}

}

------解决方案--------------------------------------------------------
Java code
//写程序不注释(特别是要给别人看的程序),先批评一下class Array {    private int temp[] = null;    private int foot ;    public Array(int lenght) {    if (lenght > 0) {        this.temp = new int[lenght];    } else {        this.temp = new int[1];//默认建立能够存放一个元素的数组    }    }    public boolean add(int i) {    if (temp.length > foot) {// foot 没有初始化                temp[foot++] = i;        return true;    } else {        return false;    }    }    public int[] getTemp() {//获取当前整个数组    return this.temp;    }    public int getFoot() {//获取当前下标    return this.foot;    }    public void println(int[] temp) {//输出整个数组    for (int i = 0; i < this.foot; i++)        System.out.println(temp[i]);    }}/*  初始化顺序应该是:开始--->父类的静态代码--->子类的静态代码-->父类的非静态代码--->父类构造函数--->子类非静态代码--->子类构造函数--->完成所以写程序的时候,不要随便调转顺序,虽然不会报错,但是可读性差到极点*/class ReverseArray extends Array {    //int i = super.getFoot();//不要随便改变代码的位置,同时将这一句放到 getArray()中,也许能满足你    int temp1[] = null;// 你要根据上面的初始化顺序,//这里的初始化一点用都没有    public ReverseArray(int len) {    super(len);    }    public int[] getArray() {    int i = super.getFoot();    int temp2[] = new int[i];    i--;    for (; i >= 0; i--) {        temp2[i] = super.getTemp()[super.getFoot() - 1 - i];    }    temp1 = temp2;    return temp2;    }}public class ExtendsDemo07 {    public static void main(String args[]) {    ReverseArray reverse = new ReverseArray(1024);    reverse.add(1);    reverse.add(2);    reverse.add(3);    reverse.add(4);    reverse.add(5);    //System.out.println(reverse.i);//原来的程序 这时 i将会输出 0    //System.out.println(reverse.temp1.length);//原先的程序 这时 length  将会输出 0           //所以请注意初始化顺序         reverse.println(reverse.getArray());    }}
------解决方案--------------------------------------------------------
我觉得你的没有理解局部变量和全局变量的区别。
你的变量i和变量temp1是要在getArray()里用,所以应该在方法体体里定义。
写在方法体外(就是你红字的地方)的话,一般定义成public static int i;
------解决方案--------------------------------------------------------
Java code
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0        at Array.println(Demo.java:47)        at Demo.main(Demo.java:9)
  相关解决方案