实例分析——宠物商店

文章描述了一个使用Java实现的宠物商店系统,其中包含了宠物类(如猫、狗)的接口设计,以及一个宠物商店类用于存储和管理宠物。系统支持根据宠物的名字、颜色或年龄进行模糊查找。主函数展示了如何添加不同种类的宠物并进行查找操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 设计要求

实现一个宠物商店,在宠物商店中可以有多种(由用户决定数量)宠物,试表示出此种关系,并要求可以根据宠物的关键字查找到相应的宠物信息。所需要的宠物信息自行设计。

2. 程序分析

1)本要求中提示宠物信息可以自行设计,所以这里简单设计出3个属性:名字、颜色、年龄。 

2)宠物的类别很多,如猫、狗等都属于宠物,所以宠物应该是一个标准。

3)在宠物商店中,只要是符合此宠物标准的都可以放进宠物商店中。

4)宠物商店中要保存多种宠物,则肯定应该是一个宠物的对象数组,宠物的个数由用户决定的话,则应该创建宠物商店的时候,就分配好可以保存的宠物个数。

3. 代码

1)展示

2)代码

  • Pet.java
interface Pet{
    String getName();
    String getColor();
    int getAge();
}
  • Cat.java(具体实现宠物猫)
class Cat implements Pet{    //宠物猫,实现接口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 void setName(String name) {
        this.name = name;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String getName() {
        return name;
    }

    @Override
    public String getColor() {
        return color;
    }

    @Override
    public int getAge() {
        return age;
    }
}
  • Dog.java(与Cat.java类似)
class Dog implements Pet{    //宠物猫,实现接口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 void setName(String name) {
        this.name = name;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String getName() {
        return name;
    }

    @Override
    public String getColor() {
        return color;
    }

    @Override
    public int getAge() {
        return age;
    }
}
  • PetShop.java

模糊查找的思路:确定结果数组的大小--》开辟结果数组并存放结果。

此代码是实现了通过姓名、颜色、年龄进行模糊查找。

class PetShop{
    private Pet[] pets;   //用于存放宠物
    private int foot=0;  //用于表示添加的下标
    public PetShop(int len){    //通过构造方法来确定宠物的个数
        if(len>0){
            pets=new Pet[len];
        }else{
            pets=new Pet[1];   //至少开辟一个
        }
    }
    //添加宠物
    public boolean add(Pet pet){
        if(foot<this.pets.length){  //宠物商店还可存放宠物
            this.pets[foot]=pet;
            foot++;
            return true;
        }else{
            return false;
        }
    }
    //关键字查找(可通过姓名、颜色和年龄进行模糊查找)
    //找到的不一定是一个,所以用Pet数组
    public Pet[] search(String keyword){
        Pet[] p=null;   //声明数组p,用于存放结果
        int count=0;   //记录有多少个符合条件的结果
        for(int i=0;i<this.foot;i++){    //获得符合条件的个数
            //indexOf从头开始查找指定的字符串位置,没有返回-1
            //int和String类型判断相等与否--》将int类型的变量转换为String类型,然后使用equals()方法进行比较,相同返回true,反之false。
            if(this.pets[i].getName().indexOf(keyword)!=-1||this.pets[i].getColor().indexOf(keyword)!=-1||
            Integer.toString(this.pets[i].getAge()).equals(keyword)==true)
                count++;
            }
        p=new Pet[count];  //开辟结果数组
        int f=0;    //记录结果存储到的位置
        for(int i=0;i<this.foot;i++){
            if(this.pets[i].getName().indexOf(keyword)!=-1||this.pets[i].getColor().indexOf(keyword)!=-1||
                    Integer.toString(this.pets[i].getAge()).equals(keyword)==true){
                p[f]=this.pets[i];
                f++;
            }
        }
        return p;
    }
}
  • Main.java(进行验证)
public class Main {
    public static void main(String[] args) {
        PetShop ps=new PetShop(5);   //5只宠物
        ps.add(new Cat("白猫","白色",5));   //添加宠物,均能添加成功(向上转型)
        ps.add(new Cat("红猫","红色",2));
        ps.add(new Dog("拉布拉多","黄色",1));
        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++){
            System.out.println(p[i].getName()+" "+p[i].getColor()+" "+p[i].getAge());
        }
    }
}

3) 运行结果

将符合要求的全部输出,要注意一点的是在用年龄进行模糊处理的时候,要像这样:

keyword关键字必须是String类型。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值