实现一种猫狗队列的结构,要求如下: 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 看到的球球了 告诉孩子一声,我去改改
还有!某🐂有这个 你们去试试哎~~~冲啊