实现一种猫狗队列的结构,要求如下:
1. 用户可以调用 add 方法将 cat 或者 dog 放入队列中
2. 用户可以调用 pollAll 方法将队列中的 cat 和 dog 按照进队列的先后顺序依次弹出
3. 用户可以调用 pollDog 方法将队列中的 dog 按照进队列的先后顺序依次弹出
4. 用户可以调用 pollCat 方法将队列中的 cat 按照进队列的先后顺序依次弹出
5. 用户可以调用 isEmpty 方法检查队列中是否还有 dog 或 cat
6. 用户可以调用 isDogEmpty 方法检查队列中是否还有 dog
7. 用户可以调用 isCatEmpty 方法检查队列中是否还有 cat
额,这道题,我当时提前看了左神的思路
他明确指出不能创建三个栈,一个放猫,一个放狗,一个混合放,其实我看到题目浅浅思考了一下,就想要拿这个方法写,然后,被直接否定
我不理解,于是,我去写了一个多小时的代码,在某🐂上找了类似题,测试了一下结果 -- '泪流满面'

- import java.util.LinkedList;
- import java.util.Queue;
- import java.util.Scanner;
-
-
- class CatDogQueue1{
- Queue<String> catQueue;
- Queue<String> dogQueue;
- Queue<String> catdogQueue;
-
- public CatDogQueue1(){
- catQueue = new LinkedList<String>();
- dogQueue = new LinkedList<String>();
- catdogQueue = new LinkedList<String>();
- }
-
- // 1. 用户可以调用 add 方法将 cat 或者 dog 放入队列中
- public void add(String input){
- catdogQueue.add(input);
- if(input.substring(0,3).equals("cat")){
- catQueue.add(input);
- }else{
- dogQueue.add(input);
- }
- }
-
- // 2. 用户可以调用 pollAll 方法将队列中的 cat 和 dog 按照进队列的先后顺序依次弹出
- public void pollAll(){
- while(!catdogQueue.isEmpty()){
- System.out.println(catdogQueue.poll());
- }
- return;
- }
- // 3. 用户可以调用 pollDog 方法将队列中的 dog 按照进队列的先后顺序依次弹出
- public void pollDog(){
- while(!dogQueue.isEmpty()){
- System.out.println(dogQueue.poll());
- }
- }
- // 4. 用户可以调用 pollCat 方法将队列中的 cat 按照进队列的先后顺序依次弹出
- public void pollCat(){
- while(!catQueue.isEmpty()){
- System.out.println(catQueue.poll());
- }
- }
- // 5. 用户可以调用 isEmpty 方法检查队列中是否还有 dog 或 cat
- public void isEmpty(){
- if(dogQueue.isEmpty()&&catQueue.isEmpty()){
- System.out.println("yes");
- }else{
- System.out.println("no");
- }
-
- }
- // 6. 用户可以调用 isDogEmpty 方法检查队列中是否还有 dog
- public void isDogEmpty(){
- if(dogQueue.isEmpty()){
- System.out.println("yes");
- }else{
- System.out.println("no");
- }
- }
- // 7. 用户可以调用 isCatEmpty 方法检查队列中是否还有 cat
- public void isCatEmpty(){
- if(catQueue.isEmpty()){
- System.out.println("yes");
- }else{
- System.out.println("no");
- }
- }
-
- }
-
- public class Text{
-
- // add pollAll pollDog pollCat isEmpty isDogEmpty isCatEmpty
- public static void main(String[] args) {
- CatDogQueue1 catDogQueue = new CatDogQueue1();
- Scanner scanner = new Scanner(System.in);
- int sum = scanner.nextInt();
- while(sum>0){
- String intput = scanner.next();
- sum--;
- if(intput.equals("add")){
- catDogQueue.add(scanner.nextLine());
- }else if(intput.equals("pollAll")){
- catDogQueue.pollAll();
- }else if(intput.equals("pollDog")){
- catDogQueue.pollDog();
- }else if(intput.equals("pollCat")){
- catDogQueue.pollCat();
- }else if(intput.equals("isEmpty")){
- catDogQueue.isEmpty();
- }else if(intput.equals("isDogEmpty")){
- catDogQueue.isDogEmpty();
- }else{
- catDogQueue.isCatEmpty();
- }
- }
- }
-
- }
我简单总结一下,我的失败原因:
是因为如果排序猫猫狗狗猫 然后用单独的猫的队列出了三个猫 整个的队列没有办法将第三个猫出去 所以 难以更新队列
然后 左神的方法加了一个时间戳,就可以删除了
于是我就觉得六六六,在之后,代码重新改 而一生要强的中国女人表示 这代码必须要敲完-于是我又搞了一个多小时
- import java.util.LinkedList;
- import java.util.Queue;
- import java.util.Scanner;
-
-
- // 实现一种猫狗队列的结构,要求如下:
- // 1. 用户可以调用 add 方法将 cat 或者 dog 放入队列中
- // 2. 用户可以调用 pollAll 方法将队列中的 cat 和 dog 按照进队列的先后顺序依次弹出
- // 3. 用户可以调用 pollDog 方法将队列中的 dog 按照进队列的先后顺序依次弹出
- // 4. 用户可以调用 pollCat 方法将队列中的 cat 按照进队列的先后顺序依次弹出
- // 5. 用户可以调用 isEmpty 方法检查队列中是否还有 dog 或 cat
- // 6. 用户可以调用 isDogEmpty 方法检查队列中是否还有 dog
- // 7. 用户可以调用 isCatEmpty 方法检查队列中是否还有 cat
- class PetQuenue{
- private String s;
- private long count;
- public PetQuenue(String s, long count){
- this.s = s;
- this.count = count;
- }
- public String getString(){
- return this.s;
- }
-
- public long getCount(){
- return this.count;
- }
- }
-
- class CatDogQueue{
- Queue<PetQuenue> catQueue;
- Queue<PetQuenue> dogQueue;
- int count = 0;
-
- public CatDogQueue(){
- catQueue = new LinkedList<PetQuenue>();
- dogQueue = new LinkedList<PetQuenue>();
- count = 0;
- }
-
- // 1. 用户可以调用 add 方法将 cat 或者 dog 放入队列中
- public void add(String input){
- if(input.substring(0,3).equals("cat")){
- catQueue.add(new PetQuenue(input,count++));
- }else{
- dogQueue.add(new PetQuenue(input,count++));
- }
- }
-
- // 2. 用户可以调用 pollAll 方法将队列中的 cat 和 dog 按照进队列的先后顺序依次弹出
- public void pollAll(){
- while(!catQueue.isEmpty() && !dogQueue.isEmpty()){
- if(catQueue.peek().getCount()>dogQueue.peek().getCount()){
- System.out.println(dogQueue.poll().getString().trim());
- }else{
- System.out.println(catQueue.poll().getString().trim());
- }
- }
- while(!catQueue.isEmpty()){
- System.out.println(catQueue.poll().getString().trim());
- }
- while(!dogQueue.isEmpty()){
- System.out.println(dogQueue.poll().getString().trim());
- }
- }
- // 3. 用户可以调用 pollDog 方法将队列中的 dog 按照进队列的先后顺序依次弹出
- public void pollDog(){
- while(!dogQueue.isEmpty()){
- System.out.println(dogQueue.poll().getString().trim());
- }
- }
- // 4. 用户可以调用 pollCat 方法将队列中的 cat 按照进队列的先后顺序依次弹出
- public void pollCat(){
- while(!catQueue.isEmpty()){
- System.out.println(catQueue.poll().getString().trim());
- }
- }
- // 5. 用户可以调用 isEmpty 方法检查队列中是否还有 dog 或 cat
- public void isEmpty(){
- if(dogQueue.isEmpty()&&catQueue.isEmpty()){
- System.out.println("yes");
- }else{
- System.out.println("no");
- }
-
- }
- // 6. 用户可以调用 isDogEmpty 方法检查队列中是否还有 dog
- public void isDogEmpty(){
- if(dogQueue.isEmpty()){
- System.out.println("no");
- }else{
- System.out.println("yes");
- }
- }
- // 7. 用户可以调用 isCatEmpty 方法检查队列中是否还有 cat
- public void isCatEmpty(){
- if(catQueue.isEmpty()){
- System.out.println("no");
- }else{
- System.out.println("yes");
- }
- }
-
- }
-
- public class Main{
-
- // add pollAll pollDog pollCat isEmpty isDogEmpty isCatEmpty
- public static void main(String[] args) {
- CatDogQueue catDogQueue = new CatDogQueue();
- Scanner scanner = new Scanner(System.in);
- int sum = scanner.nextInt();
- while(sum>0){
- String intput = scanner.next();
- sum--;
- if(intput.equals("add")){
- catDogQueue.add(scanner.nextLine());
- }else if(intput.equals("pollAll")){
- catDogQueue.pollAll();
- }else if(intput.equals("pollDog")){
- catDogQueue.pollDog();
- }else if(intput.equals("pollCat")){
- catDogQueue.pollCat();
- }else if(intput.equals("isEmpty")){
- catDogQueue.isEmpty();
- }else if(intput.equals("isDogEmpty")){
- catDogQueue.isDogEmpty();
- }else{
- catDogQueue.isCatEmpty();
- }
- }
- }
-
-
-
-
- }
再然后,这个代码还是跑不过,yes和no 就一直有点问题,我就又去读了一边题,发现是不是我语文原因,就改了一下, 结果 自测过了,提交运行不行
最后,我觉得要相信自己,改回来了yes no 去自己的idea跑了一下 好家伙!
看图吧


就是说 这个故事告诉我们
1.相信自己(我的语文没毛病!!!!!!!!!)
2.不要轻易 '泪流满面 ',因为 还有更值得 '泪流满面' 的 呜呜呜
补充一下 这个代码 maybe有bug 看到的球球了 告诉孩子一声,我去改改
还有!某🐂有这个 你们去试试哎~~~冲啊