欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

宠物店系统

最编程 2024-05-23 11:27:56
...

要求:

实现一个宠物商店,在宠物商店中可以有多种宠物(由商店决定宠物的数量,提示:构造方法 传入数量),试着表示出这种关系,并要求可以根据宠物的关键字查找相应的宠物信息。所需 要的宠物信息自行设计。(猫,狗,老鼠)

实现功能:

添加宠物,删除宠物 ,查找宠物信息,修改宠物信息 ;

角色名 类或者抽象类 成员信息
宠物商店 成员变量:宠物数组,宠物数量<br />成员方法:添加宠物,删除宠物,<br />查找宠物信息,修改宠物信息成员
宠物 抽象类 成员变量:名称、颜色、年龄<br />成员方法:吃、睡;
继承宠物类
继承宠物类
老鼠 继承宠物类

基本代码实现:

商店类

package Temp.src.PetShop;

import java.util.Scanner;

public class PetShop {

    public Pet[] petList;
    public int petNum;

    public PetShop(int petNum) {
        this.petNum = petNum;
        petList = new Pet[petNum];
    }

    public void showAll() {
        System.out.println("当前宠物店还有:");
        for (Pet p : petList) {
            if (p != null) {
                p.show();
            }
        }
    }

    public boolean petAdd(Pet pet) {
        if (pet != null) {
            for (int i = 0; i < petNum; i++) {
                if (petList[i] == null) {
                    petList[i] = pet;
                    return true;
                }
            }
            System.err.println("宠物店已满员...");
        }
        System.err.println("请输入正确的宠物...");
        return false;
    }

    public boolean petDel(Pet pet) { //
        if (pet != null) {
            for (int i = 0; i < petNum; i++) {
                if (petList[i] == pet) {
                    petList[i] = null;
                    return true;
                }
            }
        }
        System.err.println("删除宠物失败...");
        return false;
    }

    public Pet petFind(Pet pet) {
        if (pet != null) {
            for (int i = 0; i < petNum; i++) {
                if (petList[i] == pet) {
                    return petList[i];
                }
            }
        }
        System.err.println("找不到该宠物...");
        return null;
    }

    public Pet petFind(String str) { // 关键字查找
        Scanner scan = new Scanner(System.in);
        if (str != null) {
            for (int i = 0; i < petNum; i++) {
                if (petList[i] == null) {
                    break;
                }
                if (petList[i].name.equals(str)) { // 名字
                    System.out.print("找到了宠物:");
                    petList[i].show();
                    System.out.print("你要的是这只宠物吗?(Y/y)");
                    String temp = scan.next();
                    if (temp.equals("Y") || temp.equals("y")) {
                        scan.close();
                        return petList[i];
                    }
                }
                if (petList[i].color.equals(str)) { // 颜色
                    System.out.print("找到了宠物:");
                    petList[i].show();
                    System.out.println("你要的是这只宠物吗?(Y/y)");
                    String temp = scan.next();
                    if (temp.equals("Y") || temp.equals("y")) {
                        scan.close();
                        return petList[i];
                    }
                }
            }
            System.err.println("找不到该宠物...");
        }
        scan.close();
        return null;
    }

    public void petChanged(String str, Pet pet) {
        Pet p = petFind(str);
        if (pet != null) {
            for (int i = 0; i < petNum; i++) {
                if (petList[i] == p) {
                    petList[i] = pet;
                    System.err.println("修改成功...");
                }
            }
        }
        System.err.println("修改宠物失败...");
    }
}

宠物类(抽象)

package Temp.src.PetShop;

public abstract class Pet {
    public String name;
    public String color;
    public int age;

    public Pet(String name, String color, int age) {
        this.name = name;
        this.color = color;
        this.age = age;
    }

    public abstract void eat();

    public abstract void sleep();

    @Override
    public String toString() {
        return "Pet [age=" + age + ", color=" + color + ", name=" + name + "]";
    }

    public void show() {
        if (this != null) {
            System.out.println("名字:" + name + " 颜色:" + color + " 年龄:" + age);
        }
    }

}

三个子类(猫、狗、老鼠)

package Temp.src.PetShop;

public class Cat extends Pet {

    public Cat(String name, String color, int age) {
        super(name, color, age);
    }

    @Override
    public void eat() {
        System.out.println("猫" + name + "吃鱼...");

    }

    @Override
    public void sleep() {
        System.out.println("猫" + name + "睡觉...");

    }

}

package Temp.src.PetShop;

public class Dog extends Pet {

    public Dog(String name, String color, int age) {
        super(name, color, age);
    }

    @Override
    public void eat() {
        System.out.println("狗" + name + "吃肉...");

    }

    @Override
    public void sleep() {
        System.out.println("狗" + name + "睡觉...");

    }

}

package Temp.src.PetShop;

public class Rat extends Pet {

    public Rat(String name, String color, int age) {
        super(name, color, age);
    }

    @Override
    public void eat() {
        System.out.println("老鼠" + name + "吃奶酪...");

    }

    @Override
    public void sleep() {
        System.out.println("老鼠" + name + "睡觉...");

    }

}

测试类
package Temp.src.PetShop;

public class Demo {
    public static void main(String[] args) {
        PetShop ps = new PetShop(20);
        ps.petAdd(new Cat("胖橘", "橙", 4));
        ps.petAdd(new Dog("柯基", "橙", 5));
        ps.petAdd(new Rat("风车车", "橙", 2));

        //ps.petFind("橙");

        //ps.petDel(ps.petFind("柯基"));

        //ps.petChanged("风车车", new Cat("假老练", "蓝", 6));
        
        /**
         * !无法同时使用含有petFind相关的方法,但单独使用这些方法都没有问题
         * !如果使用Scanner从终端输入确认要寻找的目标,将存在该问题
         * !理由是Scanner类中的迭代器(iterator)的next()方法不应该在一个循环中多次使用
         * !暂无合理解决办法,除非不在终端输入确认目标
         */

        ps.showAll();

    }
}

存在的Bug:

在测试中,petFind方法、petDel方法、petChanged方法无法实现同时使用,原因是抛出了NoSuchElementException异常,参考****的相关问题,得出的解释是Scanner方法中迭代器(iterator)的next()方法在同一个循环中多次使用了,由于需要确认删除的目标,目前暂无合理解决办法。

NoSuchElementException异常的处理_何日可揽雀捉鳖的博客-****博客_nosuchelementexception
java为何抛出NoSuchElementException异常?_迁就100-****博客_nosuchelementexception