猫狗队列问题
2017-10-17 10:15
162 查看
实现猫狗队列问题:
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());
}
}
}
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());
}
}
}
相关文章推荐
- hdu 1276 士兵队列训练问题(队列)
- 球钟问题的解决--栈和队列
- 队列问题1
- 编程之美读书笔记_3.7_队列中取最大数操作问题
- hdoj--1276--士兵队列训练问题(数组模拟)
- HDOJ 1276 士兵队列训练问题(queue队列)
- 【BZOJ1342】【Baltic2007】Sound静音问题 单调队列
- [转]网络服务器中生产者/消费者模型中的队列问题
- 疯狂队列问题
- 1276 士兵队列训练问题
- 优先队列解哈夫曼编码问题之带权路径长度
- 关于android Handler进行线程处理消息队列与线程队列线程无法停止的问题
- 队列中取最大值操作问题
- 程序员面试金典: 9.3栈与队列 3.4汉诺塔问题
- 队列的应用——求解迷宫问题
- 栈和队列(6)--用栈来求解汉诺塔问题①
- hdu---1276 士兵队列训练问题
- 《剑指offer2》问题9 用两个栈实现队列 Java实现
- 用链表实现的无锁栈和无锁队列存在的ABA问题
- 《编程之美》读书笔记18: 3.7 队列中取最大数操作问题