JAVA学习笔记总结(六):用面向对象的方法实现数组的插入,删除,查找,显示

第一个例子:我们把数据存储结构,也就是数组从程序的其他部分中分离出来,程序的其他部分将成为这个结构的用户。我们把程序分成两个class,:

    一个class用来封装数组(LowArray),外界不能直接访问这个数组,但是该封装提供了供外界访问的方法setElem()和getElem(),该方法是外界应用和该数组之间通信的方式。

    另一个class创建了一个LowArray的对象,用这个对象来操作数组中的数据。

container class - 像LowArray这样用来封装数据对象的类称为容器类。一般容器类不仅提供数据的存储,还提供访问该数据的方法,也许还会封装更复杂的操作。

class interface - 类的接口是用户访问该类的方法。由于class fields一般都是private的,所以我们说的接口一般指的都是类的方法。

abstrction - The process of seperating the how from the what - how an operation is performed inside a class, as oppose to what's visible to the class user.

第二个例子:我们进一步改进数组这个数据存储结构使其更好的面向对象(HighArray)。class用户不用再考虑数组的index, 数组的封装不再使用getElem()和setElem()这样的方法,取而代之的是insert(), find() 和delete(). 这使得class用户可以把注意力放在what而不是how, 也就是说用户只用考虑要插入/删除/查找什么,而不用担心怎么去插入/删除/查找。

class LowArray {
 private long[] a;
 
 // constructor
 public LowArray(int size) {
  a = new long[size];
 }
 // set value
     public void setElem(int index, long value) {
      a[index] = value;
     }
     //get value
     public long getElem(int index) {
      return a[index];
     }
    
}  // end class LowArray


class LowArrayApp {
 public static void main(String[] args) {
  LowArray arr;
  arr = new LowArray(100);
  int nElems = 0;
  int j;
  
  // insert 10 items
  arr.setElem(0, 77);
  arr.setElem(1, 99);
  arr.setElem(2, 44);
  arr.setElem(3, 55);
  arr.setElem(4, 22);
  arr.setElem(5, 88);
  arr.setElem(6, 11);
  arr.setElem(7, 00);
  arr.setElem(8, 66);
  arr.setElem(9, 33);
  nElems = 10;
  
  // display items
  for(j=0; j<nElems;j++) {
   System.out.print(arr.getElem(j) + " ");
  }
  System.out.println("");
  
  // search for data item 26
  int searchKey=26;
  for(j=0; j<nElems; j++) {
   if(arr.getElem(j) == searchKey) {
    break;
   }
  }
  if(j == nElems) {
   System.out.println("Cannot find " + searchKey);
  }
  else {
   System.out.println("Found " + searchKey);
  }
  
  // delete value 55
  for(j=0; j<nElems;j++) {
   if(arr.getElem(j) == 55) {
    break;
   }
  }
  for(int k=j; k<nElems-1; k++) {
   arr.setElem(k, arr.getElem(k+1));
  }
  nElems--;
  
  // display items
  for(j=0; j<nElems; j++) {
   System.out.print(arr.getElem(j) + " ");
  }
  System.out.println("");
 } // end main()
}  // end class LowArrayApp

 

==========================================================================================================================

class HighArray {
 private long[] a;
 private int nElems;
 
 // constructor
 public HighArray(int max) {
  a = new long[max];
  nElems = 0;
 }
 
 // find specified value
 public boolean find(long searchKey) {
  int j;
  for(j=0; j<nElems; j++) {
   if(a[j] == searchKey) {
    break;
   }
  }
     if(j == nElems) {
      return false;
     }
     else {
      return true;
     }
 }  // end find()
 
 // put element into array
 public void insert(long value) {
  a[nElems] = value;
  nElems++;
 }
 
 // delete specified value
 public boolean delete(long value) {
  int j;
  for(j=0; j<nElems; j++) {    // look for it
   if(value == a[j]) {
    break;
   }
  }
  if(j == nElems) {
   return false;            // can't find it
  }
  else {
   for(int k=j; k<nElems; k++) {
    a[k] = a[k+1];         // move higher ones down
   }
   nElems--;
   return true;
  }
 }  // end delete()
 
 // display items
 public void display() {
  for(int j=0; j<nElems; j++) {
   System.out.print(a[j] + " ");
  }
  System.out.println("");
 } // end display()

} // end class HighArray

class HighArrayApp {
 public static void main(String[] args) {
  int maxSize = 100;
  HighArray arr;
  arr = new HighArray(maxSize);
  
  // insert 10 items
  arr.insert(77);
  arr.insert(99);
  arr.insert(44);
  arr.insert(55);
  arr.insert(22);
  arr.insert(88);
  arr.insert(11);
  arr.insert(00);
  arr.insert(66);
  arr.insert(33);
  
  // display items
  arr.display();
  
  // search for item 35
  int searchKey = 35;
  if(arr.find(searchKey)) {
   System.out.println("Found " + searchKey);
  }
  else {
   System.out.println("Can't find " + searchKey);
  }
  
  // delete 3 items
  arr.delete(00);
  arr.delete(55);
  arr.delete(99);
  
  // display items
  arr.display();
  
 }  // end main()
} // end class HighArrayApp

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计要求: 1. 设计实现一个出版物的输入输出系统,出版物包括书,CD和磁带,用户选择对某一个出版物输入相关信息,并将输入的信息显示。 2. 各类出版物信息包括名字,作者或演唱者,出版社或唱片社,价格,出版日期等相关信息。 3. 使用循环来完成,以接受用户的循环操作。 4. 对于不合要求的输入,给出提示,允许再重输入。 5. 当用户选择退出时,程序结束。 设计思路: 设计书,CD,磁带三个类,每个类含有名字,作者或演唱者,出版社或唱片社,价格,出版日期等相关信息。 由于这三个类又相关的相同内容,故可设计一个含有公共信息的父类。 class MyMedia{ String mediaName; //出版物名称 float price; //出版物价格 String press; //出版社(磁带发行商) String artist; //作者(演唱者) void mediaNameInput() //出版物名称输入 void mediaPriceInput(){ //出版物价格输入 void mediaPressInput(){ //出版社(磁带发行商)输入 void artistInput(){ //作者或演唱者输入 然后分别定义书,CD,磁带三个子类,并在各个子类中添加的成员变量。 class MyBook extends MyMedia{ //书子类 String editor; //书的编辑 Date publishDate=null; //出版日期 String bookISBN; //书的ISBN } class MyCD extends MyMedia{ //CD子类 String cdISRC; //CD的ISRC String cdPublisher; //CD的发行商 } class MyTape extends MyMedia{ //磁带子类 String tapeISRC; } 相应改变各个子类中的成员函数。 主程序中用下述语句输出选项供用户选择: System.out.println("\n请选择你要进行的操作(请输入1-4中人一个数字):\n" +"1:输入书的信息;\n" +"2:输入CD的信息;\n" +"3:输入磁带的信息;\n" +"4:退出系统;\n"); 用户输入的值保存于变量choice中,程序根据它的值分情况处理: switch(choice){ case 1: //选择为书 //要求输入书的名称,价格等信息的输入相关信息,然后程序输出这些信息 break; case 2: //选择为CD //要求输入CD的名称,价格等信息的输入相关信息,然后程序输出这些信息 break; case 3: //选择为磁带 //要求输入磁带的名称,价格等信息的输入相关信息,然后程序输出这些信息 break; default: //选择错误 continue_e=false; }

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值