这道题主要锻炼了类的包装,考察面向对象的思想
题目:
宠物、猫和狗的类如下:
public class Pet{ private String type; public Pet(String type){ this.type = type; } public String getPetType(){ return this.type; } } public class Dog extends Pets{ public Dog(){ super("Dog"); } } public class Cat extends Pet{ public Cat(){ super("Cat"); } } 实现一种猫狗队列的结构,要求如下: 用户可以调用add方法将cat类或dog类的实例放入队列中; 用户可以调用pollAll方法,将队列中所有的实例按照进队列的先后顺序依次弹出; 用户可以调用pollDog方法,将队列中Dog类的实例按照进队列的先后顺序依次弹出; 用户可以调用pollCat方法,将队列中Cat类的实例按照进队列的先后顺序依次弹出; 用户可以调用isEmpty方法,检查队列中是否还有dog或cat的实例; 用户可以调用isDogEmpty方法,检查队列中是否还有dog类的实例 用户可以调用isCatEmpty方法,检查队列中是否还有cat类的实例 要求所有实现的方法,时间复杂度都为O(1) public class DogCat{ public static class Pet{ private String type; public Pet(String type){ this.type = type; } public String getPetType(){ return this.type; } } public static class Dog extends Pet{ public Dog(){ super("dog"); } } public static class Cat extends Pet{ public Cat(){ super("cat"); } } public static class PetEnterQueue{ private Pet pet; private long count; public PetEnterQueue(Pet pet, long count){ this.pet = pet; this.count = count; } public Pet getPet{ return this.pet; } public long getCount(){ return this.count; } public String getEnterPetType(){ return this.pet.getPetType(); } } public static class DogCatQueue{ private Queue<PetEnterQueue> dogQ; private Queue<PetEnterQueue> catQ; private long count; public DogCatQueue(){ this.dogQ = new LinkedList<PetEnterQueue>(); this.catQ = new LinkedList<PetEnterQueue>(); this.count = 0; } public void add(Pet pet){ if(pet.getPetType().equals("dog")){ this.dogQ.add(new PetEnterQueue(pet, this.count++)); }else if(pet.getPetType().equals("cat")){ this.catQ.add(new PetEnterQueue(pet, this.count++)); }else{ throw new RuntimException("No dogs or cats"); } } public Pet pollAll(){ if(!this.dogQ.isEmpty() && !this.catQ.isEmpty()){ if(this.dogQ.peek().getCount() < this.catQ.peek().getCount()){ return this.dogQ.poll().getPet(); }else{ return this.catQ.poll().getPet(); } }else if(!this.dogQ.isEmpty()){ return this.dogQ.poll().getPet(); }else if(!this.catQ.isEmpty()){ return this.catQ.poll().getPet(); }else{ throw new RuntimeException("queue is empty!");`` } } public Dog pollDog(){ if(!this.isDogQueueEmpty()){ return (Dog)this.dogQ.poll().getPet(); }else{ throw new RuntimeException("Dog queue is empty!"); } } public Cat pollCat(){ if(!this.isCatQueueEmpty()){ return (Cat)this.catQ.poll().getPet(); }else{ throw new RuntimeException("Cat3 queue is empty!"); } } public boolean isEmpty(){ return this.dogQ.isEmpty() && this.catQ.isEmpty(); } public boolean isDogQueueEmpty(){ return this.dogQ.isEmpty(); } public boolean isCatQueueEmpty(){ return this.catQ.isEmpty(); } } }