一、要求:
定义一个整型数组类,要求包含构造方法,增加数据及输出数据成员方法,并利用数组实现动态分配。
同时定义:(1)排序类:实现排序;(2)反转类:实现数据反向存放;
要求数组实现动态的内存分配(即其中数组的大小是由程序外部决定的),则在本类的构造方法中应该为类中的数组进行初始化操作,之后每次增加数据时都应该判断数组的内容是否是满的,如果不是满的则可以向其添加;
如果是满的,则不能添加,另外要添加数据时,肯定需要有一个指向可以插入的下标,用于记录插入的位置。
数组的动态分配:
二、代码实现
- 测试反转类
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;//此处返回的是一个数组,在声明处已经写出了返回的数组类型
}
};
class ReverseArray extends Array{ //定义数组及翻转类
public ReverseArray(int len){//设置数组大小
super(len);//调用父类构造
}
public int[] getArray(){ //覆写getArray方法
int center = super.getArray().length/2;//取得中间索引
int head =0;//头部索引
int tail = super.getArray().length - 1;//尾部索引
for(int x=0;x<center;x++){//循环交换数据
int temp = super.getArray()[head];
super.getArray()[head] = super.getArray()[tail];
super.getArray()[tail] = temp;
head++;
tail--;
}
return super.getArray();//返回数组内容
}
}
class SortArray extends Array{//数组排序子类
public SortArray(int len){
super(len);
}
public int[] getArray(){
java.util.Arrays.sort(super.getArray());//数组排序处理
return super.getArray();//返回排序后的数组
}
}
public class Test{
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] + "、");
}
}
}
- 测试排序类
public class Test{
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] + "、");
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18