4

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");
    }
}

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

public 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()){
                this.dogQ.poll().getPet();
            }else{
                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();
    }
}

 

posted @ 2018-09-27 11:11  chan_ai_chao  阅读(128)  评论(0编辑  收藏  举报