阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第14章:综合案例:课时70:案例分析四(数组操作)

案例分析四

建立一个可以实现整型数组的操作类(Array),而后在里面可以操作的数组的大小由外部来决定,而后在Array类里面需要提供有数组的如下处理:进行数据的增加(如果数据满了则无法增加)、可以实现数组的容量扩充、取得数组全部内容。
完成之后在此基础上再派生出两个子类:
数组排序类:返回的数据必须是排序后的结果;
数组反转类:可以实现内容的首尾交换。

对于本程序而言首先要考虑的一定都是父类如何定义完善。

第一步:实现基本的数组操作类定义

class Array { // 数组的操作类
	private int [] data ; // 整型数组
	private int foot ; // 进行数组索引控制
	public Array(int len) {
		if (len > 0) {
			this.data = new int [len] ; // 开辟数组
		} else {
			this.data = new int [1] ; // 开辟一个空间
		}
	}
	// 实现数组的容量扩充,给出的是扩充大小,实际大小:已有大小 + 扩充大小
	public void increment(int num) {
		int newData [] = new int [this.data.length + num] ;
		System.arraycopy(this.data,0,newData,0,this.data.length) ;
		this.data = newData ; // 改变数组引用
	}
	public boolean add(int num) { // 数据增加
		if (this.foot < this.data.length) { // 有位置
			this.data[this.foot ++] = num ;
			return true ;
		}
		return false ;
	}
	public int[] getData() {
		return this.data ;
	}
}
public class JavaDemo {
	public static void main(String args[]) {
		Array arr = new Array(5) ;
		System.out.println(arr.add(10)) ;
		System.out.println(arr.add(5)) ;
		System.out.println(arr.add(20)) ;
		System.out.println(arr.add(3)) ;
		System.out.println(arr.add(6)) ;
		arr.increment(3) ;
		System.out.println(arr.add(1)) ;
		System.out.println(arr.add(7)) ;
		System.out.println(arr.add(0)) ;
	}
}

第二步:进行排序子类定义

class SortArray extends Array { // 定义排序子类
	public SortArray(int len) {
		super(len) ;
	}
	public int [] getData() { // 获得排序结果
		java.util.Arrays.sort(super.getData()) ; // 排序
		return super.getData() ;
	}
}
public class JavaDemo {
	public static void main(String args[]) {
		SortArray arr = new SortArray(5) ;
		System.out.println(arr.add(10)) ;
		System.out.println(arr.add(5)) ;
		System.out.println(arr.add(20)) ;
		System.out.println(arr.add(3)) ;
		System.out.println(arr.add(6)) ;
		arr.increment(3) ;
		System.out.println(arr.add(1)) ;
		System.out.println(arr.add(7)) ;
		System.out.println(arr.add(0)) ;
		int result [] = arr.getData() ;
		for (int temp : result ) {
			System.out.println(temp + "、 ") ;
		}
	}
}

第三步:定义反转子类

class ReverseArray extends Array { // 定义反转子类
	public ReverseArray(int len) {
		super(len) ;
	}
	public int [] getData() { // 获得排序结果
		int center = super.getData().length / 2 ;
		int head = 0 ;
		int tail = super.getData().length - 1 ;
		for (int x = 0; x < center ; x ++ )	{
			int temp = super.getData()[head] ;
			super.getData()[head] = super.getData()[tail] ;
			super.getData()[tail] = temp ;
			head ++ ;
			tail -- ;
		}
		return super.getData();
	}
}
public class JavaDemo {
	public static void main(String args[]) {
		ReverseArray arr = new ReverseArray(5) ;
		System.out.println(arr.add(10)) ;
		System.out.println(arr.add(5)) ;
		System.out.println(arr.add(20)) ;
		System.out.println(arr.add(3)) ;
		System.out.println(arr.add(6)) ;
		arr.increment(3) ;
		System.out.println(arr.add(1)) ;
		System.out.println(arr.add(7)) ;
		System.out.println(arr.add(0)) ;
		int result [] = arr.getData() ;
		for (int temp : result ) {
			System.out.print(temp + "、 ") ;
		}
	}
}

父类之中定义的方法名称往往都很重要,如果功能相同的时候子类应该以覆写父类的方法为优先考虑。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值