求一个JAVA∶猫狗案例代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求一个JAVA∶猫狗案例代码相关的知识,希望对你有一定的参考价值。

接口练习:猫狗案例
猫狗共性:会吃饭
差异性(额外功能):猫会跳高、狗会算数
1.抽取猫狗的共性作为父类,这个父类是一个抽象类;
2.定义2个接口,分别实现2个额外功能。

代码如下

abstract class Dongwu

void chi()

System.out.println("吃");



interface Tiao

void tiao();


interface Suan

void suan();


class Mao extends Dongwu implements Tiao

public void tiao()

System.out.println("猫会跳高");



class Gou extends Dongwu implements Suan

public void suan()

System.out.println("狗会算数");


如果有帮助到你,请点击采纳

参考技术A 代表表的话,可以在百度网盘或百度知道上查询

算法优解-猫狗队列

来自左神书中的一道题,不过左神的Java代码有几个问题,自己亲自Coding实现了一遍,麻烦小伙伴们帮忙转转,让左神下一版时能纠正这个错误,另,转载请注明出处哈。

题目:

已知有宠物、狗、猫类如下,实现一种猫狗队列的结构,要求实现add、pollAll、pollDog、pollCat、isEmpty、isDogEmpty、isCatEmpty等方法。

class Pet 
	private String type;

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

	public String getType() 
		return this.type;
	


class Dog extends Pet 

	public Dog() 
		super("Dog");
	



class Cat extends Pet 

	public Cat() 
		super("Cat");
	


分析:本题考查实现特殊数据结构及针对特殊功能的算法设计能力。

现在我们定义新类PetEnterQueue,将不同实例盖上时间戳,同时不改变原来的类。

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.getType();
	


我们实现的队列就是PetEnterQueue类的实例,首先有一个不断累加的数据项count用来表示实例进队列的时间,同时有两个队列,一个只存放Dog,另一个只存放Cat。

public class DogCatQueue 

	private Queue<PetEnterQueue> dogQ;
	private Queue<PetEnterQueue> catQ;
	private static long count;

	public DogCatQueue() 
		this.dogQ = new LinkedList<PetEnterQueue>();
		this.catQ = new LinkedList<PetEnterQueue>();
		this.count = 0;
	
···


接下来我们依次实现题目要求的各个方法:(我将原代码返回值置空,改为打印,这样最后跑main时比较直观)

add:(左神之前用的add,我改为offer,更适用于队列)

	public void add(Pet pet) 
		if (pet.getType().equals("Dog")) 
			this.dogQ.offer(new PetEnterQueue(pet, ++this.count));
			System.out.println("add:"
					+ ((LinkedList<PetEnterQueue>) dogQ).peekLast()
							.getEnterPetType() + "-"
					+ ((LinkedList<PetEnterQueue>) dogQ).peekLast().getCount());
		 else if (pet.getType().equals("Cat")) 
			this.catQ.offer(new PetEnterQueue(pet, ++this.count));
			System.out.println("add:"
					+ ((LinkedList<PetEnterQueue>) catQ).peekLast()
							.getEnterPetType() + "-"
					+ ((LinkedList<PetEnterQueue>) catQ).peekLast().getCount());
		 else 
			throw new RuntimeException("Error:Not Dog or Cat");
		
	

pollAll:(左神之前用的if,那样跑一次就没了,应该用while,同时左神忘了清空count,我在末尾补上了)

	public void pollAll() 
		if (this.dogQ.isEmpty() && this.catQ.isEmpty()) 
			System.out.println("Queue is impty.");
		
		while (!this.dogQ.isEmpty() || !this.catQ.isEmpty()) 
			if (!this.dogQ.isEmpty() && !this.catQ.isEmpty()) 
				if (this.dogQ.peek().getCount() < this.catQ.peek().getCount()) 
					System.out.println("pollAll:"
							+ dogQ.peek().getEnterPetType() + "-"
							+ dogQ.peek().getCount());
					this.dogQ.poll();
				 else 
					System.out.println("pollAll:"
							+ catQ.peek().getEnterPetType() + "-"
							+ catQ.peek().getCount());
					this.catQ.poll();
				
			 else if (!this.dogQ.isEmpty()) 
				System.out.println("pollAll:" + dogQ.peek().getEnterPetType()
						+ "-" + dogQ.peek().getCount());
				this.dogQ.poll();
			 else if (!this.catQ.isEmpty()) 
				System.out.println("pollAll:" + catQ.peek().getEnterPetType()
						+ "-" + catQ.peek().getCount());
				this.catQ.poll();
			
		
		this.count = 0;
	

pollDog:(因为题目中要求将所有Dog实例依次弹出,因此应该用while,左神用了if)

	public void pollDog() 
		if (this.dogQ.isEmpty()) 
			System.out.println("Dog Queue is impty.");
		
		while (!this.dogQ.isEmpty()) 
			System.out.println("poll:" + dogQ.peek().getEnterPetType() + "-"
					+ dogQ.peek().getCount());
			this.dogQ.poll();
		
	

pollCat:(因为题目中要求将所有Cat实例依次弹出,因此应该用while,左神用了if)

	public void pollCat() 
		if (this.catQ.isEmpty()) 
			System.out.println("Cat Queue is impty.");
		
		while (!this.catQ.isEmpty()) 
			System.out.println("poll:" + catQ.peek().getEnterPetType() + "-"
					+ catQ.peek().getCount());
			this.catQ.poll();
		
	

接下来是3个判空函数:

	public void isEmpty() 
		System.out.println("isEmpty:"
				+ Boolean.toString((this.dogQ.isEmpty() && this.catQ.isEmpty())));
	

	public void isDogQueueEmpty() 
		System.out.println("isDogQueueEmpty:"
				+ Boolean.toString(this.dogQ.isEmpty()));
	

	public void isCatQueueEmpty() 
		System.out.println("isCatQueueEmpty:"
				+ Boolean.toString(this.catQ.isEmpty()));
	

最后简单的跑一下测试代码:

	public static void main(String[] args) 
		// TODO Auto-generated method stub
		DogCatQueue q = new DogCatQueue();

		q.add(new Dog());
		q.add(new Cat());
		q.isEmpty();
		q.pollAll();
		q.isEmpty();

		q.add(new Dog());
		q.add(new Cat());
		q.add(new Dog());
		q.add(new Cat());
		q.isDogQueueEmpty();
		q.pollDog();
		q.isDogQueueEmpty();
		q.isCatQueueEmpty();
		q.pollCat();
		q.isCatQueueEmpty();
	

输出结果:

add:Dog-1
add:Cat-2
isEmpty:false
pollAll:Dog-1
pollAll:Cat-2
isEmpty:true
add:Dog-1
add:Cat-2
add:Dog-3
add:Cat-4
isDogQueueEmpty:false
poll:Dog-1
poll:Dog-3
isDogQueueEmpty:true
isCatQueueEmpty:false
poll:Cat-2
poll:Cat-4
isCatQueueEmpty:true


左神犀利,学习了,不过左神也有疲惫的时候,我百度左神的联系方式(邮箱、QQ、微信、微博等),然而并没有找到,希望各位小伙伴们帮忙转一下,让左神尽早看到,下一版中勘正这个错误。

谢谢左神,我们也会在我们的算法之路上越走越远!

另,Coding不易,转载请注明出处哈。


权兴权意

http://blog.csdn.net/hxqneuq2012/article/details/52680161



以上是关于求一个JAVA∶猫狗案例代码的主要内容,如果未能解决你的问题,请参考以下文章

高分:求案例代码:java Socket 加请求参数,访问http服务端,并打印返回的数据!

JAVA之旅——多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例

“猫狗大战”的代码能实现单一图片识别吗?

求一本完整的(java)项目开发实战书籍

java8-3 多态的好处和弊端以及多态的理解

神经网络-入门实践综合篇——物体识别花朵分类猫狗识别风格迁移文本分类