Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >猫狗队列

猫狗队列

作者头像
名字是乱打的
发布于 2022-05-13 01:59:46
发布于 2022-05-13 01:59:46
31600
代码可运行
举报
文章被收录于专栏:软件工程软件工程
运行总次数:0
代码可运行

猫狗队列 【题目】 宠物、狗和猫的类如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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");
 }
} 

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

代码实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.day1.practice;

import java.util.LinkedList;
import java.util.Queue;

public class DogCatQueueDemo {

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

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Java设计模式】006-原型模式
用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。
訾博ZiBo
2025/01/06
670
左程云算法一星难度题目刷题(1)
一.栈 1.getmin栈 class MyStack{     public MyStack(Stack<Integer> stackData, Stack<Integer> stackMin) {         this.stackData = stackData;         this.stackMin = stackMin;     }     private Stack<Integer> stackData; //存所有值的     private Stack<Integer> stac
盒光曈辰
2021/11/27
3860
两个栈实现队列 && 两个队列实现栈
一.两个栈实现队列 public static class TwoStacksQueue { private Stack<Integer> stackPush; private Stack<Integer> stackPop; public TwoStacksQueue() { stackPush = new Stack<Integer>(); stackPop = new Stack<Integer>(); } public void push(
大学里的混子
2019/02/18
1.1K0
C++-面向对象(五)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/10/28
3100
C++-面向对象(五)
猫狗队列
题目 实现一个猫狗队列 // 宠物类 public class Pet { private String mType; public Pet(String type) { mType = type; } public String getType() { return mType; } } // 狗 public class Dog extends Pet { public Dog(String type) {
HelloVass
2018/09/12
6640
Spring | Bean自动装配详解
由于在手动配置xml过程中,常常发生字母缺漏和大小写等错误,而无法对其进行检查,使得开发效率降低。
啵啵鱼
2022/11/23
7620
Spring | Bean自动装配详解
Go语言核心36讲(Go语言进阶技术八)--学习笔记
在 Go 语言的语境中,当我们在谈论“接口”的时候,一定指的是接口类型。因为接口类型与其他数据类型不同,它是没法被实例化的。
冬夜先生
2021/10/28
3720
面向对象编程3
1. 定义一个动物类,里面有一个方法voice(), 定义一个类Cat,实现voice方法 然后增加一种新的动物类型:Pig(猪),实现voice()方法。 定义一个Dog类,实现voice方法 定义一个Store(宠物店)类的getInstance方法: 如果传入的参数是字符串dog,则返回一个Dog对象; 如果传入pig,则返回一个Pig对象;否则,返回一个Cat对象。
一缕82年的清风
2021/12/06
4460
【commons-beanutils专题】004- BeanUtils 专题
訾博ZiBo
2025/01/06
970
Unity 使用快速教程
Unity是微软在CodePlex上的一个开源项目,可用于依赖注入、控制反转,类似Spring,下面是使用示例: 1.先来定义几个接口、类 1 namespace UnityTest 2 { 3
菩提树下的杨过
2018/01/24
1.2K0
Unity 使用快速教程
java--第7章 抽象类与接口
它包含一个抽象方法getArea(),从Shape类派生出Rectangle类和Circle类,这两个类都用getArea()方法计算对象的面积。编写应用程序使用Rectangle类和Circle类输出长5.2、宽13.25的矩形的面积及半径为5.2的圆的面积,要求输出结果保留两位小数。
北山啦
2022/11/27
5070
java--第7章  抽象类与接口
Ruby(3):基本语法中
字符串分割成数组: 可以使用先scan再join的方法,当然其实有更好的 split方法,专门用来分割字符串 1 # 在Ruby中,如果不使用inspect,直接使用puts输出数组,那么每个元素会占用一行输出 2 irb(main):001:0> puts "Short sentence.Another.No more".split(/\./) 3 Short sentence 4 Another 5 No more 6 => nil 7 irb(main):002:0> puts "Short se
SecondWorld
2018/03/14
1K0
Java描述设计模式(05):原型模式
一、原型模式简介 1、基础概念 原型模式属于对象的创建模式。通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象。 2、模式结构 原型模式要求对象实现一
知了一笑
2019/07/29
4120
Java描述设计模式(05):原型模式
两个队列实现栈结构
实现思路: 一个存放我们数据的栈,每次我们添数据时候把数据放到我们这个data队列中 一个help队列,每次我们data队列出数据时候,将前面的数据都复制导入我们help队列,留最后一个数据弹出.最后交换引用,让help队列成为新的data队列,让空的data队列成为新的help队列
名字是乱打的
2022/05/13
3600
两个队列实现栈结构
Java 实践
/** *宠物就是一个标准,包含多类宠物 *定义宠物标准接口Pet *定义Cat和Dog两个Pet接口的子类 *使用链表结构动态存储宠物信息 *定义商店类(工厂类),负责宠物的上架(链表添加)、下架(链表删除)、查找(模糊查找) * *所有数据类型均为 接口————Pet * * */ class Link { //链表类(外部可调用) class Node { //节点类,定义该内部类,只可服务于Link类
Mirror王宇阳
2020/11/10
3980
聊一聊观察者模式
今天和大家来聊一下观察者模式,观察者模式在我们编程的过程中非常常用,关于编程的模式,我的个人的理解是代码写多了之后,提炼总结出来的一套经验、方法。
挥刀北上
2020/07/14
5190
聊一聊观察者模式
补习系列-springboot restful实战
摘自百科的定义:REST即表述性状态转移(英文:Representational State Transfer,简称REST) 是Roy Fielding博士(HTTP规范主要贡献者)在2000年的论文中提出来的一种软件架构风格。 是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
美码师
2018/08/27
7470
补习系列-springboot restful实战
两个栈实现队列以及两个队列实现栈
两个队列实现栈 思路:队列queue是专职进出栈的,队列help只是个中转站,起辅助作用。 入栈:直接入队列queue即可 出栈:把queue的除最后一个元素外全部转移到队help中,然后把刚才剩下queue中的那个元素出队列。之后把q2中的全部元素转移回q1中(或者两个队列互换) 入栈:
用户5513909
2023/04/25
2340
两个栈实现队列以及两个队列实现栈
一文详解「队列」,手撸队列的3种方法!
前面我们介绍了栈(Stack),队列和栈是比较像的一种数据结构。我们可以想象有很多辆汽车正在通过单行道的隧道,所有车辆不能插队、不能掉头,先进来的车也先出去,我们可以把这种特征的数据结构称之为队列。
磊哥
2020/10/27
6030
一文详解「队列」,手撸队列的3种方法!
Java创建对象的方式【仅代码记录】
Java创建对象的方式有好几种,有:使用new关键字、Class反射调用、使用Clone方法、使用序列化、Unsafe.allocateInstance(),这里不讨论这些内容,仅做一些代码的记录;
訾博ZiBo
2025/01/06
920
相关推荐
【Java设计模式】006-原型模式
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验