日期:2014-05-20 浏览次数:20928 次
//写程序不注释(特别是要给别人看的程序),先批评一下
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;
------解决方案--------------------
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at Array.println(Demo.java:47) at Demo.main(Demo.java:9)