本程序共有四个类,在同一个包下,其中,ArrayTest为main()方法所在的类,Array为基本类,SortedArray和SortedArray1分别用两种方法实现排序功能,体会一下设计思想。
ArrayTest.java
/*
* 这个程序演示的是用一个包装的数组类Array实现整型数组的功能,同时还用两种方法实现了排序功能。这两种方法均设计了两个类:一个类是将数组类Array作为成员来操作的;一个类是将数组类Array作为基类来操作的。
*/
package com.lwj.demo;
public class ArrayTest {
public static void main(String[] args) {
Array ar = new Array(10);
try {
ar.add(1);
ar.add(12);
ar.add(21);
ar.add(41);
ar.add(31);
ar.add(21);
ar.add(4);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("————————原数组————————");
System.out.println(ar);
/*
* SortedArray s_ar = new SortedArray(ar);
*/
SortedArray1 s_ar = new SortedArray1(11);
try {
s_ar.add(2);
s_ar.add(12);
s_ar.add(22);
s_ar.add(32);
s_ar.add(4);
s_ar.add(5);
s_ar.add(33);
s_ar.add(1);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("————————已排完序的数组————————");
System.out.println(s_ar);
System.out.println("你要找的数在数组中的位置(从0开始,-1表示没有找到): " + s_ar.search(5));//与SortedArray类的对象不同,SortedArray1类的对象可以直接访问基类的方法,如:search()。
}
}
Array.java
package com.lwj.demo;
class Array {
protected int[] data;
protected int foot = 0;//表示数组实际的长度,由于包装的数组类在实例化时需指定最大长度,但实际使用时数组不一定达到最大长度,这样没有用完的数组空间便被初始化为0,为以后的排序等操作带来麻烦。
public Array(int length) {
data = new int[length];
}
//给包装的数组类中添加元素
public void add(int element) throws Exception {
if (foot < data.length) {
data[foot++] = element;
} else {
throw new Exception("数组越界!");
}
}
//查询指定值的整型数在数组中的位置(从0开始),-1表示没有找到
public int search(int key) {
int[] temp=this.getData();
for (int i = 0; i < temp.length; i++) {
if (temp[i] == key)
return i;
}
return -1;
}
public String toString() {
StringBuffer sb = new StringBuffer("");
for (int i = 0; i < foot; i++) {
sb.append(this.getData()[i]).append(" ");
}
sb.append("/n");
return sb.toString();
}
/*
* 这个getData()方法不是按照以往的getter方法写的,这个getData()方法返回的是不含未用空间的数组,方便以后操作。其实这个getData()方法在本类中可能用处不大,因为用foot照样可以完成search()和toString()操作。
*/
public int[] getData() {
int[] data1 = new int[foot];
System.arraycopy(data, 0, data1, 0, foot);
return data1;
}
public void setData(int[] data) {
this.data = data;
}
}
SortedArray.java
/*
* 这个类用数组类作成员来实现排序功能
*/
package com.lwj.demo;
import java.util.*;
class SortedArray {
Array ar;
public SortedArray(Array ar) {
this.ar = ar;
}
private void sort() {
int[] temp = ar.getData();
Arrays.sort(temp);
ar.setData(temp);
}
public String toString() {
this.sort();
return ar.toString();
}
}
SortedArray1.java
/*
* 这个类用Array作基类实现排序功能。
*/
package com.lwj.demo;
import java.util.*;
class SortedArray1 extends Array {
public SortedArray1(int length) {
super(length);
}
/*
* sort()方法被私有化后,这个类的对外界面就看似用Array对象实例化,访问它的方法就可以得到排序后的结果。
*/
private void sort() {
int[] temp = super.getData();
Arrays.sort(temp);
super.data=temp;
}
public String toString() {
this.sort();
return super.toString();
}
}