6.猫狗队列问题

问题:宠物、狗、猫的类如下

class Pet {
    private String type;

    public Pet(String type) {
        this.type = type;
    }

    public String getType() {
        return this.type;
    }
    public String toString(){
        return this.getType();
    }
}

class Dog extends Pet {
    public Dog(String type) {
        super(type);
    }

    @Override
    public String toString() {
        return super.toString();
    }
}

class Cat extends Pet {
    public Cat(String type) {
        super(type);
    }

    @Override
    public String toString() {
        return super.toString();
    }
}

  实现一个猫狗队列,要求如下:

  1.可以调用add()方法,将cat类和dog类添加到队列中;

  2.可以调用pollAll()方法,将队列中的所有实例按入队列的顺序依次弹出;

  3.可以调用pollCat()方法,将队列中的所有Cat对象实例按入队列的顺序依次弹出;

  4.可以调用pollDog()方法,将队列中的所有Dog对象实例按入队列的顺序依次弹出;

  5.可以调用isEmpty()方法,判断对队列是否为空;

  6.可以调用isCatEmpty()方法,判断队列是否有Cat对象实例;

  7.可以调用isDogEmpty()方法,判断队列是否有Dog对象实例;

思路:队列是先进先出,由于要存放两种不同的对象,因此可以用两个队列分别存放Dog对象和Cat对象。由于要维持进入队列的顺序,在不改变原有类的情况下,我们可以构造一个类EnterPetQueue,在类中引入计数变量,来记录对象的入队顺序。

EnterPetQueue构造类

class EnterPetQueue{
    private Pet pet;
    private Integer count;
    public EnterPetQueue(Pet pet,Integer count){
        this.pet=pet;
        this.count=count;
    }
    public Pet getPet(){
        return this.pet;
    }
    public Integer getCount(){
        return this.count;
    }

}

CatAndDogQueue类

public class CatAndDogQueue {
    private LinkedList<EnterPetQueue> catQueue;
    private LinkedList<EnterPetQueue> dogQueue;
    private Integer count=0;
    public CatAndDogQueue() {
        catQueue = new LinkedList<>();
        dogQueue = new LinkedList<>();
    }
    public void add(Pet pet){
        if(pet.getType().contains("cat")){
            catQueue.addLast(new EnterPetQueue(pet,count++));
        }else if(pet.getType().contains("dog")){
            dogQueue.addLast(new EnterPetQueue(pet,count++));
        }else{
            throw new RuntimeException("只能添加Cat和Dog实例,不能添加其他实例");
        }
    }
    public boolean isDogEmpty(){
        return dogQueue.isEmpty();
    }
    public boolean isCatEmpty(){
        return catQueue.isEmpty();
    }
    public boolean isEmpyt(){
        return isCatEmpty()&&isDogEmpty();
    }
    public Pet poolAll(){
        if(isEmpyt()){
            return null;
        }else if(isDogEmpty()){
            return catQueue.pollFirst().getPet();
        }else if(isCatEmpty()){
            return dogQueue.pollFirst().getPet();
        }else{
            if(catQueue.getFirst().getCount()<dogQueue.getFirst().getCount()){
                return catQueue.pollFirst().getPet();
            }else{
                return dogQueue.pollFirst().getPet();
            }
        }

    }
    public Dog pollDog(){
        if(isDogEmpty()){
            return null;
        }else{
            return (Dog)dogQueue.pollFirst().getPet();
        }
    }
    public Cat pollCat(){
        if(isCatEmpty()){
            return null;
        }else{
            return (Cat)catQueue.pollFirst().getPet();
        }
    }
}

测试类Test

public class Test {

    public static void main(String[] args) {
        Cat cat1=new Cat("cat1");
        Cat cat2=new Cat("cat2");
        Cat cat3=new Cat("cat3");

        Dog dog1=new Dog("dog1");
        Dog dog2=new Dog("dog2");
        Dog dog3=new Dog("dog3");

        CatAndDogQueue catAndDogQueue=new CatAndDogQueue();
        catAndDogQueue.add(cat1);
        catAndDogQueue.add(dog3);
        catAndDogQueue.add(cat3);
        catAndDogQueue.add(dog1);
        catAndDogQueue.add(cat2);
        catAndDogQueue.add(dog2);
        while (!catAndDogQueue.isEmpyt()){
            System.out.println(catAndDogQueue.poolAll());
        }
        while(!catAndDogQueue.isCatEmpty()){
            System.out.println(catAndDogQueue.pollCat());
        }
        while(!catAndDogQueue.isDogEmpty()){
            System.out.println(catAndDogQueue.pollDog());
        }
        System.out.println(catAndDogQueue.poolAll());
    }
}

原文地址:https://www.cnblogs.com/quxiangxiangtiange/p/10322380.html

时间: 2024-08-11 22:09:54

6.猫狗队列问题的相关文章

猫狗队列

1,add方法将Dog实例或Cat实例加入猫狗队列 2,pollAll将猫狗队列中的实例按插入顺序弹出 3,pollDog将猫狗队列中的Dog实例按插入顺序弹出 4,pollCat将猫狗队列中的Cat实例按插入顺序弹出 5,isEmpty判断猫狗队列中是否还有实例 6,isDogEmpty判断猫狗队列中是否还有Dog实例 7,isCatEmpty判断猫狗队列中是否还有Cat实例 #!/usr/bin/env python3 # --*-- coding: utf-8 --*-- from col

[Daily]猫狗队列——”子类管理器“

[题目] 有猫狗类如下: class Pet { private: string m_type; public: Pet(string _type){ m_type=_type; } string GetPetType(){ return m_type; } }; class Dog : public Pet { public: Dog() : Pet("dog"){} }; class Cat : public Pet { public: Cat() : Pet("cat&

猫狗收养所

两种方法实现,用两个vector实现,一个为领养的动物(输出),一个为收养的动物(输入):用两个queue实现(都为输入),一个为收养的猫,一个收养的狗,vetor(输出). /***************************************************** * \file CatDogAsylum.cpp * \date 2016/05/09 15:19 * \问题描述: 题目描述 有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养

当当变“猴子”后能敌“猫狗”?

后知后觉虽然能看清竞争形势,可以谋而后动,弥补自身不足,增强自身竞争力,不过这也意味着将失去先机,与那些先行者的差距越来越大.即使通过让自己处于一个完美态势,却难敌用户"先入为主"的观念.已经成立15年的当当就面对着这样一个难题,在阿里.京东接连发力,独霸网购市场前两名的态势下,当当却还在和苏宁易购.1号店.亚马逊等在第二阵营中惨烈搏杀. 即使当下通过各种手段提升自己的"逼格",但终究慢了对手好几步,想让自己处于第一集团军中,再多的挣扎似乎也是徒然.而在转型的路上,

卷积神经网络入门(1) 识别猫狗

一下来自知乎 按照我的理解,CNN的核心其实就是卷积核的作用,只要明白了这个问题,其余的就都是数学坑了(当然,相比较而言之后的数学坑更难). 如果学过数字图像处理,对于卷积核的作用应该不陌生,比如你做一个最简单的方向滤波器,那就是一个二维卷积核,这个核其实就是一个模板,利用这个模板再通过卷积计算的定义就可以计算出一幅新的图像,新的图像会把这个卷积核所体现的特征突出显示出来.比如这个卷积核可以侦测水平纹理,那卷积出来的图就是原图水平纹理的图像. 现在假设要做一个图像的分类问题,比如辨别一个图像里是

自己训练卷积模型实现猫狗

原数据集:包含 25000张猫狗图像,两个类别各有12500 新数据集:猫.狗 (照片大小不一样) 训练集:各1000个样本 验证集:各500个样本 测试集:各500个样本 # 将图像复制到训练.验证和测试的目录 import os,shutil orginal_dataset_dir = 'kaggle_original_data/train' base_dir = 'cats_and_dogs_small' os.mkdir(base_dir)#保存新数据集的目录 train_dir = o

猫狗图像识别

这里,我们介绍的是一个猫狗图像识别的一个任务.数据可以从kaggle网站上下载.其中包含了25000张毛和狗的图像(每个类别各12500张).在小样本中进行尝试 我们下面先尝试在一个小数据上进行训练,首先创建三个子集:每个类别各1000个样本的训练集.每个类别各500个样本的验证集和每个类别各500个样本的测试集. import os, shutil original_dataset_dir = '/media/erphm/DATA/kaggle猫狗识别/train'    # 原始文解压目录b

类入门例-猫狗互咬

以下例子演示动物类的写法,其中用到了构造函数. 在Main函数中,使用动物类创造出一只猫,一条狗. 猫狗互相攻击,直到一方死去. 代码如下: class Animal { public string name;//动物名称 public int hp, attack, speed;//动物血量.攻击力.攻击速度 public Animal(string n,int life,int force,int s) { name = n; hp = life; attack = force; speed

人们捐款保护猫狗是为了自己

无利不起早 做一件事情绝对有一个利益 人们捐款去救助猫狗,只是为了自己.感到满足. 去除掉好坏,善恶的定义,只从行为上来看,在没有善恶定义之前,也会做这些事情,利益无论是为了自己还是为了更大的群体.只是被动的被环境选择来做这些事情 如果生命是环境选择出来的,环境是否也会被生命选择. 其实没有所谓选择不选择,天地不仁. 原文地址:https://www.cnblogs.com/yangzihong/p/11562210.html