一个把整型数组包装成类的例子

来源:互联网 发布:java获取本地ip地址 编辑:程序博客网 时间:2024/05/17 22:47

本程序共有四个类,在同一个包下,其中,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();
 }
}

原创粉丝点击