实现猫狗队列问题:
import java.util.Queue;
import java.util.LinkedList;
//实现猫狗队列的问题
public class CatDogQueue{
//宠物 类
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 RuntimeException("err, not dog or cat");
}
}
//依次弹出所有的猫狗类
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("err, 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("Cat 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();
}
}
public static void main(String[] args)
{
DogCatQueue dogcat=new DogCatQueue();
dogcat.add(new Dog());
dogcat.add(new Cat());
dogcat.add(new Dog());
while(!dogcat.isCatQueueEmpty())
{
System.out.println(dogcat.pollCat().getPetType());
}
while(!dogcat.isDogQueueEmpty())
{
System.out.println(dogcat.pollDog().getPetType());
}
}
}