猫狗队列问题

1、猫狗队列问题

宠物、狗和猫的类如下

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

实现一种猫狗队列结构,要求如下:
①用户可以调用add方法将cat类或dog类的实例放进队列中;
②用户可以调用pollAll方法, 将队列中所有的实例按照进队列的先后顺序依次弹出;
③用户可以调用pollDog方法,将队列中所有的Dog类的实例按照进队列的先后顺序依次弹出;
④用户可以调用pollCat方法,将队列中所有的Cat类的实例按照进队列的先后顺序依次弹出;
⑤用户可以调用isEmpty方法,检查队列里,是否还有Dog或Cat类的实例;
⑥用户可以调用isDogEmpty方法,检查队列里,是否还有Dog类的实例;
⑦用户可以调用isCatEmpty方法,检查队列里,是否还有Cat类的示例;


import javax.management.RuntimeErrorException;
import java.util.LinkedList;
import java.util.Queue;
class Pet{
    private String type;
    public Pet(String type){
        this.type=type;
    }
    public String getType(){
        return this.type;
    }
}
class Dog extends Pet{
    public Dog(){
        super("Dog");
    }
}
class Cat extends Pet{
    public Cat(){
        super("Cat");
    }
}
//为了代码清晰明了,不在题目给出的类上直接修改,而选择构建一个结构class PetEntry
//该结构在Pet的基础上添加了count来记录,添加Pet的次序
class PetEntry{
    private Pet pet;
    private long count;
    public PetEntry(Pet pet,long count){
        this.pet=pet;
        this.count=count;
    }
    public Pet getPet() {
        return this.pet;
    }
    public long getCount() {
        return this.count;
    }
    public String getEntryPettype(){

        return this.pet.getType();
    }
}
class CatDogQueue{
    private Queue<PetEntry> catQueue=new LinkedList<PetEntry>();
    private Queue<PetEntry> dogQueue=new LinkedList<PetEntry>();
    private long count;
    public CatDogQueue(){
        Queue<PetEntry> catQueue= new LinkedList<PetEntry>();
        Queue<PetEntry> dogQueue= new LinkedList<PetEntry>();
        long  count= 0;
    }
    public void add(Pet  pet){
        if (pet.getType().equals("Dog")){
            this.dogQueue.add(new PetEntry(pet,this.count++));
        }else if (pet.getType().equals("Cat")){
            this.catQueue.add(new PetEntry(pet,this.count++));
        }
        else throw new RuntimeException("error! input not dog or cat!");
    }
    public Pet popAll(){
        if (!catQueue.isEmpty()&&!dogQueue.isEmpty()){
            if (catQueue.peek().getCount()<dogQueue.peek().getCount()){
                return  catQueue.poll().getPet();
            }else {
                return  dogQueue.poll().getPet();
            }
        } else if(!catQueue.isEmpty()){
            return catQueue.poll().getPet();
        }else if (!dogQueue.isEmpty()){
            return dogQueue.poll().getPet();
        }else {
            throw new RuntimeException("err! queue is empty");
        }
    }
    public Pet popDog(){
        if (!dogQueue.isEmpty()){
            return dogQueue.poll().getPet();
        }
        else throw new RuntimeException("DogQueue is Empty");
    }
    public Pet popCat(){
        if (!catQueue.isEmpty()){
            return catQueue.poll().getPet();
        }
        else throw new RuntimeException("DogQueue is Empty");
    }
    public boolean isEmpty(){
        return  dogQueue.isEmpty()&&catQueue.isEmpty();
    }
    public boolean dogqueueisEmpty(){
        return  dogQueue.isEmpty();
    }
    public boolean catqueueisEmpty(){
        return  catQueue.isEmpty();
    }
    public static void main(String[] args) {
        CatDogQueue cdq=new CatDogQueue();
        //add
        System.out.println("add four Pets");
        cdq.add(new Pet("Dog"));
        cdq.add(new Pet("Cat"));
        cdq.add(new Pet("Cat"));
        cdq.add(new Pet("Dog"));
        cdq.add(new Pet("Cat"));
        System.out.println("--------------------------");
        //popAll
        System.out.println("popAll  2");
        System.out.println( cdq.popAll().getType());
        System.out.println( cdq.popAll().getType());
        System.out.println("--------------------------");
        //popCat
        System.out.println("popCat  1");
        System.out.println(cdq.popCat().getType());
        System.out.println("--------------------------");
        //popDog
        System.out.println("popDog  1" );
        System.out.println(cdq.popDog().getType());
        System.out.println("--------------------------");
        System.out.println("dogQueque is empty?");
        System.out.println(cdq.dogqueueisEmpty());
        System.out.println("--------------------------");
        System.out.println("catQueque is empty?");
        System.out.println(cdq.catqueueisEmpty());
        System.out.println("--------------------------");
        System.out.println(" is  all Empty");
        System.out.println(cdq.isEmpty());
        System.out.println("--------------------------");
        cdq.popCat();
        System.out.println(" now  is  all Empty");
        System.out.println(cdq.isEmpty());
        System.out.println("--------------------------");

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值