关键点:
- 构造Pet_Count类:pet 为动物实例,count记录该动物实例进入队列的顺序号码
- 两个队列:dogQ,catQ
- 要求实现的CatDogQueue中存储的对象类型为Pet_Count类型
代码:
class Pet{
private String type;
public Pet(String type) {
this.type = type;
}
public String getPetType() {
return this.type;
}
}
class Dog extends Pet{
public Dog() {
super("dog");
}
}
class Cat extends Pet{
public Cat() {
super("cat");
}
}
class Pet_Count{
private Pet pet;
private long count;
public Pet_Count(Pet pet,long count) {
this.pet = pet;
this.count = count;
}
public Pet getPet() {
return this.pet;
}
public long getCount() {
return this.count;
}
public String getPetType() {
return this.pet.getPetType();
}
}
class CatDogQueue{
private Queue<Pet_Count> dogQ;
private Queue<Pet_Count> catQ;
private long count;
public CatDogQueue() {
this.dogQ = new LinkedList<Pet_Count>();
this.catQ = new LinkedList<Pet_Count>();
this.count = 0;
}
public void add(Pet pet) {
if(pet.getPetType().equals("dog")) {
this.dogQ.add(new Pet_Count(pet, count++));
}else if(pet.getPetType().equals("cat")) {
this.catQ.add(new Pet_Count(pet,count++));
}else{
throw new RuntimeException("没有动物加入!!");
}
}
public Pet pollAll() {
if(!this.isDogEmpty() && !this.isCatEmpty()) {
if(this.dogQ.peek().getCount() < this.catQ.peek().getCount()) {
return this.dogQ.poll().getPet();
}else{
return this.catQ.poll().getPet();
}
}else if(!this.isDogEmpty()) {
return this.dogQ.poll().getPet();
}else if(!this.isCatEmpty()) {
return this.catQ.poll().getPet();
}else {
throw new RuntimeException("Queue is empty!");
}
}
public Dog pollDog() {
if(!this.isDogEmpty()) {
return (Dog)this.dogQ.poll().getPet();
}else {
throw new RuntimeException("Dog queue is empty!");
}
}
public Cat pollCat() {
if(!this.isCatEmpty()) {
return (Cat)this.catQ.poll().getPet();
}else {
throw new RuntimeException("Cat queue is empty!");
}
}
public boolean isEmpty() {
return this.dogQ.isEmpty() && this.catQ.isEmpty();
}
public boolean isDogEmpty() {
return this.dogQ.isEmpty();
}
public boolean isCatEmpty() {
return this.catQ.isEmpty();
}
}