基本思路:1.创建公司数组,单车数组,在公司类里面写主程序,单车管理类里面写用户交互程序; 2.接口制定增删改查规则,创建三家单车子公司类继承父类,父类作为实现类去实现接口(因本案例 三家公司增删改查方法一致,所以只需父类重写方法,其他三家公司直接用父类方法即可); 3.难点已在注视标出; 一.接口 package com.edu.java.pdfexercise.sharebike; //接口 具备对单车的操作功能只能是公司 //接口 具备 对单车进行CRUD操作的功能 public interface ShareBikeDao { //投放的单车数量 void addBike(int bikeNum); //根据id操作单车对象 void removeBike(int bikeId); void queryBike(); void borrowBike(int bikeId); void backBike(int bikeId); }
二.公司类 package com.edu.java.pdfexercise.sharebike; import java.util.Arrays; import java.util.Date; //父类:公司类 public abstract class SharedBikeCompany implements ShareBikeDao { private int CompanyId;// 公司id private String bikeName;// ofo 哈罗 摩拜 private ShareBike[] shareBikes;// 公司持有共享单车的最大容量[取决于中括号的数字] private int sum;//公司真正拥有单车总量 private int count;// 公司单车借出次数 private int bikeIndex = 1;//为了生成单车的id public SharedBikeCompany() { } public SharedBikeCompany(int CompanyId, String bikeName, ShareBike[] shareBikes, int sum, int count) { this.CompanyId = CompanyId; this.bikeName = bikeName; this.shareBikes = shareBikes; this.sum = sum; this.count = count; } @Override public void addBike(int bikeNum) { //判断数组扩容(第二次投放的时候可能索引越界) if ((sum + bikeNum) > shareBikes.length) { System.out.println("需要扩容,开始扩容"); shareBikes = Arrays.copyOf(shareBikes, (shareBikes.length + bikeNum) * 2); System.out.println("扩容后的数组长度:" + shareBikes.length); } //单车遍历难点:单车id唯一性;数组元素的索引值用sum for (int i = 0; i < bikeNum; i++) { shareBikes[sum] = new ShareBike(bikeIndex++, 1, null); sum++; } System.out.println("投放成功"); } @Override public void removeBike(int bikeId) { for (int i = 0; i <sum ; i++) { ShareBike shareBike =shareBikes[i]; if (bikeId==shareBike.getId()){ //开始进行删除,元素一定 for (int j = i; j <sum-1; j++) { shareBikes[j]=shareBikes[j+1]; } sum--; //将最后一个元素置为null shareBikes[sum]=null; System.out.println("删除成功"); return; } } System.out.println("没有此id:" + bikeId + ",对应的单车,请重新录入"); } @Override public void queryBike() { } @Override public void borrowBike(int bikeId) { //根据id找到单车对象 for (int i = 0; i < sum; i++) { ShareBike shareBike = shareBikes