004-猫狗队列

package com.my.util;

public class Pet {
	private String type;
	public Pet(String type) {
		this.type = type;
	}
	public String getPetType() {
		return this.type;
	}
}

package com.my.util;

public class Dog extends Pet {
	public Dog() {
		super("dog");
	}
}

package com.my.util;

public class Cat extends Pet {
	public Cat() {
		super("cat");
	}
}

package com.my.util;

public 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();
	}
}

package com.my.suanfa;

import java.util.LinkedList;
import java.util.Queue;

import com.my.util.Cat;
import com.my.util.Dog;
import com.my.util.Pet;
import com.my.util.PetEnterQueue;

public class DogCatQueue {
	//声明变量
	private Queue<PetEnterQueue> catQ;
	private Queue<PetEnterQueue> dogQ;
	private long count;
	//给变量赋初值
	public DogCatQueue() {
		this.catQ = new LinkedList<PetEnterQueue>();
		this.dogQ = new LinkedList<PetEnterQueue>();
		this.count = 0;
	}
	//猫狗入队列
	public void add(Pet pet) {
		if(pet.getPetType().equals("cat")) {
			catQ.add(new PetEnterQueue(pet, count++));
		} else if(pet.getPetType().equals("dog")) {
			dogQ.add(new PetEnterQueue(pet, count++));
		} else {
			throw new RuntimeException("err, no dog or cat!");
		}
	}
	//猫狗出队列
	public Pet pollAll() {
		if(!isCatQueueEmpty() && !isDogQueueEmpty()) {
			if(catQ.peek().getCount() < dogQ.peek().getCount()) {
				return catQ.poll().getPet();
			} else {
				return dogQ.poll().getPet();
			}
		} else if(!isCatQueueEmpty()) {
			return catQ.poll().getPet();
		} else if(!isDogQueueEmpty()) {
			return dogQ.poll().getPet();
		} else {
			throw new RuntimeException("err,your queue is empty!");
		}
		
	}
	//猫出队列
	public Cat pollCat() {
		if(!isCatQueueEmpty()) {
			return (Cat)catQ.poll().getPet();
		} else {
			throw new RuntimeException("your cat queue is empty!");
		}
	}
	//狗出队列
	public Dog pollDog() {
		if(!isDogQueueEmpty()) {
			return (Dog)dogQ.poll().getPet();
		} else {
			throw new RuntimeException("your dog queue is empty!");
		}
	}
	//判断猫狗队列是否为空
	public boolean isEmpty() {
		return catQ.isEmpty() && dogQ.isEmpty();
	}
	//判断猫队列是否为空
	public boolean isCatQueueEmpty() {
		return catQ.isEmpty();
	}
	//判断狗队列是否为空
	public boolean isDogQueueEmpty() {
		return dogQ.isEmpty();
	}
}

上一篇:了解多态的及使用


下一篇:多态实现主人喂养宠物