设计一个“宠物商店”,在宠物商店中可以有多种宠物,试表示出此种关系,并要求可以根据宠物的关键字查找相应的宠物信息。

//=================================================
// File Name : factory
//------------------------------------------------------------------------------
// Author : Common // 接口名:Pet
// 属性:
// 方法:
interface Pet{
public String getName();
public String getColor();
public int getAge();
} //类名:Cat
//属性:
//方法:
class Cat implements Pet{
private String Name;
private String Color;
private int Age; public Cat(String name, String color, int age) { //构造方法
this.setName(name);
this.setColor(color);
this.setAge(age);
} public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getColor() {
return Color;
}
public void setColor(String color) {
Color = color;
}
public int getAge() {
return Age;
}
public void setAge(int age) {
Age = age;
}
} //类名:Dog
//属性:
//方法:
class Dog implements Pet{
private String Name;
private String Color;
private int Age; public Dog(String name, String color, int age) { //构造方法
this.setName(name);
this.setColor(color);
this.setAge(age);
} public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getColor() {
return Color;
}
public void setColor(String color) {
Color = color;
}
public int getAge() {
return Age;
}
public void setAge(int age) {
Age = age;
}
} //类名:PetShop
//属性:
//方法:
class PetShop{ private Pet[] pets; //定义一个Pet形数组,此数字的大小由传入的len决定
private int foot; //定义数组的当前元素下标 public PetShop(int len){ //数组的大小由len决定,构造方法
if(len>0){ //判断传入的长度是否大于0
this.pets = new Pet[len]; //根据传入的大小开辟空间
}else{
this.pets = new Pet[1]; //否则只开辟长度为1的空间
}
} public boolean add(Pet pet){
if(this.foot < this.pets.length){ //判断数组是否已经满了
this.pets[foot] = pet; //没有存满则继续添加
this.foot++; //修改下标
return true; //添加成功
}else{
return false; //添加失败,已经存满了
}
} public Pet[] search(String keyWord){ //关键字查找
Pet p[] = null; //存放查找的结果,此处的大小不是固定的
int count = 0; //记录下多少个宠物符合查询结果 for (int i=0;i<this.pets.length;i++){
if(this.pets[i] != null){
if(this.pets[i].getName().indexOf(keyWord) != -1 || this.pets[i].getColor().indexOf(keyWord) != -1){
count++; //统计符合条件的宠物个数
}
}
}
p = new Pet[count]; //根据已经确定的记录数开辟对象数组
int f = 0; //设置增加的位置标记
for (int i=0;i<this.pets.length;i++){
if(this.pets[i] != null){
if(this.pets[i].getName().indexOf(keyWord) != -1 || this.pets[i].getColor().indexOf(keyWord) != -1){
p[f] = this.pets[i]; //将符合查询条件的宠物信息保存
f++;
}
}
}
return p;
} } //主类
//Function : 适配器设计模式
public class Pet_demo { public static void main(String[] args) {
// TODO 自动生成的方法存根
PetShop ps = new PetShop(5);
ps.add(new Cat("白猫","白",2));
ps.add(new Cat("黑猫","黑",4));
ps.add(new Cat("黄猫","黄",3));
ps.add(new Cat("白狗","白",2));
ps.add(new Cat("黑狗","黑",2));
ps.add(new Cat("黄狗","黄",3));
print(ps.search("黑"));
} public static void print(Pet p[]){
for (int i = 0;i<p.length;i++){
if(p[i] != null){
System.out.println(p[i].getName()+p[i].getAge()+p[i].getColor());
}
}
} }

Java实例分析:宠物商店的更多相关文章

  1. 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:宠物商店实例分析

    interface Pet{ // 定义宠物接口 public String getName() ; public String getColor() ; public int getAge() ; ...

  2. Java实验项目三——宠物商店

    Program:宠物商店的设计(继承,接口,线性线性表) Description:本题未实现图形用户界面,项目结构描述如下: classes.Pet:定义宠物接口,只要实现该接口的宠物类,都可存储进宠 ...

  3. java基础学习05(面向对象基础01--类实例分析)

    面向对象基础01(类实例分析) 实现的目标 1.如何分析一个类(类的基本分析思路) 分析的思路 1.根据要求写出类所包含的属性2.所有的属性都必须进行封装(private)3.封装之后的属性通过set ...

  4. RPC原理及RPC实例分析

    在学校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 1 2 3 4 5 6 public class ...

  5. 从.NET的宠物商店到Android MVC MVP

    1 一些闲话 记得刚进公司的时候,我们除了做常规的Training Project外,每天还要上课,接受各种技术培训和公司业务介绍.当时第一次知道QA和SQA的区别.Training Project时 ...

  6. Protocol Buffer技术详解(Java实例)

    Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...

  7. Android Touch事件原理加实例分析

    Android中有各种各样的事件,以响应用户的操作.这些事件可以分为按键事件和触屏事件.而Touch事件是触屏事件的基础事件,在进行Android开发时经常会用到,所以非常有必要深入理解它的原理机制. ...

  8. JVM 字节码执行实例分析

    前言 最近在看<Java 虚拟机规范>和<深入理解JVM虚拟机>,对于字节码的执行有了进一步的了解.字节码就像是汇编语言,是 JVM 的指令集.下面我们先对 JVM 执行引擎做 ...

  9. OutOfMemoryError/OOM/内存溢出异常实例分析--虚拟机栈和本地方法栈溢出

    关于虚拟机栈和本地方法栈,在JVM规范中描述了两种异常: 1.如果线程请求的栈深度大于JVM所允许的深度,将抛出StackOverflowError异常: 2.如果虚拟机在扩展栈时无法申请到足够的内存 ...

随机推荐

  1. Tomcat5通过cardadm.xml启动项目

    配置tomcat5\conf\Catalina\localhost下的   cardadm.xml  ,然后在MyEclipse中,直接启动Tomcat5,不需要部署项目

  2. Android NestedScrolling与分发机制

    在Android5.0之间要实现控件的嵌套滑动,都是要自己处理View事件即分发机制. 共有三个方法:    dispatchTouchEvent().onInterceptTouchEvent()和 ...

  3. 折叠ListView

    转自 http://blog.csdn.net/hnyzwtf/article/details/50487228 1 activity_main.xml <?xml version=" ...

  4. C#查看各种变量的指针地址

    将项目的“可编译不安全代码”属性设置为true就可以了,方法如下:项目属性对话框->配置属性->生成->允许不安全代码块 namespace Pointer { struct XYZ ...

  5. 强连通 HDU3072

    n个点m条边 m条边 权值 简单点说就是求把所有强连通分量连在一起所需的最小花费 不用双向 图是联通的  cost[] 维护到这里的最小花费求和 #include<stdio.h> #in ...

  6. 如何设置让iis服务器支持.apk文件的下载

    随着智能手机的普及,越来越多的人使用手机上网,很多网站也应手机上网的需要推出了网站客户端,.apk文件就是安卓(Android)的应用程序后缀名,默认情况下,使用IIS作为Web服务器的无法下载此文件 ...

  7. C#-面向对象的三大特性——封装(封装成员变量、封装成员方法)

    封装: 封装就是将数据或函数等集合在一个个的单元中(我们称之为类).被封装的对象通常被称为抽象数据类型. 封装的意义在于保护或者防止代码(数据)被我们无意中破坏. 封装既可以封装成员变量,又可以封装成 ...

  8. JAVA 一个或多个空格分割字符串

    知识补充 String的split方法支持正则表达式: 正则表达式\s表示匹配任何空白字符,+表示匹配一次或多次. 有了以上补充知识,下面的内容就很好理解了. 一.待分割字符串 待分割字符串为如下: ...

  9. 【转】解决eclipse无法设置NDK问题

    参考:http://jingyan.baidu.com/album/4d58d5413000a09dd4e9c0fe.html?picindex=1  到android sdk官网下载r23版本的ad ...

  10. 非编码RNA

    生命的基本过程是从DNA转录成mRNA,再翻译成蛋白质发挥功能.DNA就像一张绝密的密码图,不能随意被移动,只能被锁在细胞核里.要想知道这些密码,只能像复印一样,将密码图复印到mRNA上,由它们把这些 ...