实例要求
定义一个整型数组类,要求包含构造方法,增加数据及输出数据成员方法,并利用数组实现动态内存分配。在此基础上定义出以下子类:
——A、 排序类 —— 实现排序
——B、 反转类 —— 实现数据反向存放
分析
本程序要求数组实现动态的内存分配,也就是说里面的数组的大小是由程序外部决定的,则在本类的构造方法中应该为类中的数组进行初始化操作,之后的每次增加数据的时候都应该判断数组的内容是否已经是满的,如果不是满的,则可以向里面增加,如果是满的,则不能增加,另外如果要增加数据的时候则肯定需要有一个指向可以插入的下标,用于记录插入的位置
数组类
public class Array {
private int temp[];//定义一个整型数组,此数组大小由外部决定
private int foot;//定义数组添加的下标
public Array(int len){//数组的大小由外部决定
if(len>0){//判断传入的长度是否大于 0
this.temp = new int[len];//根据传入的大小开辟空间
}else{
this.temp = new int[1];//最小维持一个空间
}
}
public boolean add(int i){
if(this.foot < this.temp.length){//判断数组是否已经满了
this.temp[foot]=i;//没有存满则继续添加
foot++;//修改成功
return true;//添加成功
}else{//数组已经存满,不能添加
return false;//添加失败
}
}
public int[] getArray(){//得到全部的数组
return this.temp;
}
}
排序数组
public class SortArray extends Array {//定义排序类
public SortArray(int len){//调用父类中的构造方法
super(len);//为数组开辟大小
}
public int[] getArray(){//覆写得到数组的方法,排序返回
java.util.Arrays.sort(super.getArray());//排序操作
return super.getArray();
}
}
测试排序类
public class ArrayDemo02 {
public static void main(String[] args) {
SortArray a= null;//声明排序类对象
a = new SortArray(5);//实例化排序类对象
System.out.print(a.add(23)+"\t");//添加内容
System.out.print(a.add(21)+"\t");//添加内容
System.out.print(a.add(2)+"\t");//添加内容
System.out.print(a.add(42)+"\t");//添加内容
System.out.print(a.add(5)+"\t");//添加内容
System.out.print(a.add(6)+"\n");//添加内容
print(a.getArray());//输出内容
}
public static void print(int i[]){
for(int x=0; x<i.length; x++){//循环输出数组中的内容
System.out.print(i[x]+"、");
}
}
}
反转数组
public class ReverseArray extends Array {//定义反转类
public ReverseArray(int len){//调用父类中的构造方法
super(len);
}
public int[] getArray(){//覆写得到数组的方法,反转返回
int t[] = new int[super.getArray().length];
int count = t.length -1;//数组的下标,倒序开始
for(int x=0; x < t.length; x++){
t[count] = super.getArray()[x];//数组反转
count--;
}
return t;
}
}
测试反转类
public class ArrayDemo01 {
public static void main(String[] args) {
ReverseArray a= null;//声明反转类对象
a = new ReverseArray(5);//实例化反转类对象
System.out.print(a.add(23)+"\t");//添加内容
System.out.print(a.add(21)+"\t");//添加内容
System.out.print(a.add(2)+"\t");//添加内容
System.out.print(a.add(42)+"\t");//添加内容
System.out.print(a.add(5)+"\t");//添加内容
System.out.print(a.add(6)+"\n");//添加内容
print(a.getArray());//输出内容
}
public static void print(int i[]){
for(int x=0; x<i.length; x++){//循环输出数组中的内容
System.out.print(i[x]+"、");
}
}
}