第三天 猫狗队列

 实现一种猫狗队列的结构,要求如下:
       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 看到的球球了 告诉孩子一声,我去改改

还有!某🐂有这个 你们去试试哎~~~冲啊

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值