zoukankan      html  css  js  c++  java
  • 猫狗队列

    public class Pet{
    		private String type;
    		public Pet(String type){
    			this.type = type;			
    		}
    		public String getPetType(){
    			return this.type;
    		}
    	}
    	public class Dog extends Pet {
    		public Dog(){
    			super("dog");
    		}
    	}
    	public class Cat extends Pet{
    		public Cat(){
    			super("cat");
    		}
    	}
    

    实现一种猫狗队列的结构,要求如下: 

    1. 用户可以调用add方法将cat类或者dog类的实例放入队列中;
    2. 用户可以调用pollAll方法,将队列中所有的实例按照队列的先后顺序依次弹出;
    3. 用户可以调用pollDog方法,将队列中dog类的实例按照队列的先后顺序依次弹出;
    4. 用户可以调用pollCat方法,将队列中cat类的实例按照队列的先后顺序依次弹出;
    5. 用户可以调用isEmpty方法,检查队列中是否还有dog和cat的实例;
    6. 用户可以调用isDogEmpty方法,检查队列中是否还有do的实例;
    7. 用户可以调用isCatEmpty方法,检查队列中是否还有cat的实例。

    思路:猫和狗两个队列设计一个类PetEnterQueue ,用于记录放入队列的每个元素的时间戳,取出时按时间戳来判断从dog队列或cat队列取出元素

    package chapter_1_stackandqueue;
    
    import java.util.LinkedList;
    import java.util.Queue;
    
    
    public class Problem04_DogAndCat {
        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 test = new DogCatQueue();
    
            Pet dog1 = new Dog();
            Pet cat1 = new Cat();
            Pet dog2 = new Dog();
            Pet cat2 = new Cat();
            Pet dog3 = new Dog();
            Pet cat3 = new Cat();
    
            test.add(dog1);
            test.add(cat1);
            test.add(dog2);
            test.add(cat2);
            test.add(dog3);
            test.add(cat3);
    
            test.add(dog1);
            test.add(cat1);
            test.add(dog2);
            test.add(cat2);
            test.add(dog3);
            test.add(cat3);
    
            test.add(dog1);
            test.add(cat1);
            test.add(dog2);
            test.add(cat2);
            test.add(dog3);
            test.add(cat3);
            while (!test.isDogQueueEmpty()) {
                System.out.println(test.pollDog().getPetType());
            }
            while (!test.isEmpty()) {
                System.out.println(test.pollAll().getPetType());
            }
        }
    
    }

    代码运行结果:

    dog
    dog
    dog
    dog
    dog
    dog
    dog
    dog
    dog
    cat
    cat
    cat
    cat
    cat
    cat
    cat
    cat
    cat
  • 相关阅读:
    java_oop_方法2
    POJ 3276 Face The Right Way(反转)
    POJ 3276 Face The Right Way(反转)
    POJ 2566 Bound Found(尺取法,前缀和)
    POJ 2566 Bound Found(尺取法,前缀和)
    POJ 3320 Jessica's Reading Problem(尺取法)
    POJ 3320 Jessica's Reading Problem(尺取法)
    POJ 3061 Subsequence(尺取法)
    POJ 3061 Subsequence(尺取法)
    HDU 1222 Wolf and Rabbit(欧几里得)
  • 原文地址:https://www.cnblogs.com/xiyuan2016/p/6810256.html
Copyright © 2011-2022 走看看