问题描述:定义一个整型数组类,要求包含构造方法,增加数据及输出数据成员方法,并利用数组实现动态内存分布。在此基础上定义除一下子类:
(1)排序类———实现排序。
(2)反转类———实现数据反向存放。
关键点:实现数组的动态内存分布,也就是说里面的数组的大小由程序外部决定。
相关类的代码:
class Array{ //定义一个整型数组类
private int temp[]; //声明一个整形数组
private int foot=0; //脚标,记录添加数据的位置
//构造方法(因题目中要实现动态内存分配-->数组大小由程序外部决定,故传递一个数组大小len)
public Array(int len){
if(len>0) { //对传递的len进行判断是否为非法输入
temp=new int[len]; //为数组开辟空间
}else { //非法输入
System.out.println("传递的数组大小错误、错误、错误!!!");
System.out.println(" 程序终止!!!");
System.exit(0); //终止程序
}
}
//添加数据
public boolean add(int i) { //i为添加的数据
if(this.foot<temp.length) { //判断下标是否越界
temp[foot]=i;
foot++;
return true;
}else { //如果下标越界
return false;
}
}
//返回数据
public int[] getArray() {
return temp;
}
}
class SortArray extends Array{ //定义一个排序子类
public SortArray(int len) {
super(len); //开辟数组
}
public int[] getArray() {
java.util.Arrays.sort(super.getArray()); //排序
return super.getArray();
}
}
class ReverseArrays extends Array{ //定义一个翻转类
public ReverseArrays(int len){
super(len); //开辟大小为len的数组大小
}
public int[] getArray(){
int center=super.getArray().length/2;
int head=0;
int tail=super.getArray().length-1;
int t; //中间变量
for(int i=0;i<center;i++) {
t=super.getArray()[head]; //head下标数组与tail实现交换
super.getArray()[head]=super.getArray()[tail];
super.getArray()[tail]=t;
head++;
tail++;
}
return super.getArray();
}
}
数组排序的验证(主方法):
public class RefDemo03{
public static void main(String args[]) {
//验证排序
Scanner sc = new Scanner(System.in); //创建Scanner对象input
System.out.println("请输入数组的大小:");
int a = sc.nextInt(); //接收数据
SortArray s=new SortArray(a);
System.out.print(s.add(5)+"\t"); //向数组中添加数据并返回结果(是否添加成功)
System.out.print(s.add(76)+"\t");
System.out.print(s.add(34)+"\t");
System.out.print(s.add(67)+"\t");
System.out.print(s.add(45)+"\t");
System.out.print(s.add(75)+"\t");
System.out.print(s.add(3)+"\t"+"\n");
System.out.print("排序后数组的内容:");
print(s.getArray());
sc.close();
}
public static void print(int temp[]) { //输出方法
for(int i=0;i<temp.length;i++) {
System.out.print(temp[i]+"\t ");
}
}
}
结果:
(1)输入正确数组的大小:
(2)输入错误的数组大小(即输入负数)
数组反转的验证:
相关代码(主函数):
public class RefDemo03{
public static void main(String args[]) {
//验证排序
Scanner sc = new Scanner(System.in); //创建Scanner对象input
System.out.println("请输入数组的大小:");
int a = sc.nextInt(); //接收数据
ReverseArrays r=new ReverseArrays(a);
System.out.print(r.add(5)+"\t"); //向数组中添加数据并返回结果(是否添加成功)
System.out.print(r.add(76)+"\t");
System.out.print(r.add(34)+"\t");
System.out.print(r.add(67)+"\t");
System.out.print(r.add(45)+"\t");
System.out.print(r.add(75)+"\t");
System.out.print(r.add(3)+"\t"+"\n");
System.out.print("反转后数组的内容:");
print(r.getArray());
sc.close();
}
public static void print(int temp[]) { //输出方法
for(int i=0;i<temp.length;i++) {
System.out.print(temp[i]+"\t ");
}
}
}
结果:(eclipse)
(1)正确输入
延伸:大家可以试一试先排序后反转输出
希望对大家有帮助!!!