继承的应用

问题描述:定义一个整型数组类,要求包含构造方法,增加数据及输出数据成员方法,并利用数组实现动态内存分布。在此基础上定义除一下子类:

(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)正确输入

延伸:大家可以试一试先排序后反转输出

希望对大家有帮助!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值