天天看点

练习 - 宠物市场

题目描述:

1、创建Pet抽象类,有喂养的方法,宠物的名称,其它的子类派生自该类。

2、创建一个商店类,商店中有多种可以购买的宠物列表,可以选择购买的宠物,购买一只宠物需要花费10个金币。

3、可以将购买的宠物显示在自己的商店中。

4、可以销售自己的宠物,喂养1次一次以上的宠物才可以销售,宠物的价格按:初始价格为10金币+成长价格来计算。

5、可以喂养宠物,每天最多喂养3次;喂养1次以上,才可以销售,每次喂养成长值+5,可以增加5个金币。

6、每个人的初始金币是10金币,通过不断的购买、喂养、销售宠物来增加自己的金币。

7、可以随时查看自己商店中的宠物和自己账户的金币。

我的思路:

  1. Pet建立抽象类,属性有名字、品种、价格,有抽象喂养方法与打印方法,子类有Bird、Dog、Tiger。
  2. Shop建立类,包含属性:名字、品种、价格
  3. 给我的宠物建立myPets集合,shop建立shops集合,考虑到输出要有排序,且查询的操作较多,都定为ArrayList集合,且在主程序中呈静态变量。
  4. 天数、每天喂养次数、金币也设为静态变量且赋初值。
  5. 当购买宠物时,从商店选中指定的Pet类实例,取出姓名、品种、价格,赋值到new的Pet中,由于Pet子类不同有各自的喂养方法,因此switch判断一下品种,分别建立不同子类的Pet实例,加入myPets集合中去。加入时将价值折半。
  6. 出售时从myPets中remove掉,通过临时变量赋值给shop中去,出售时价值*2.(奸商!!)
  7. 每次喂养成长值加3~7的随机数。且count++,一旦count>= 3则不能喂养。
  8. 进入下一天,count置零,day++

然后就可以开始写了。

效果:

练习 - 宠物市场
练习 - 宠物市场

然后其实并没有写输入保护

代码:

其中一个Pet的子类的喂养方法,成长值随机加:

public void feed() {
        System.out.println(getName() + "吃了武大郎烧饼……");
        Random r = new Random();
        int addPrice = r.nextInt(5)+3;
        this.setPrice(getPrice()+addPrice);
        System.out.println(getName() + "的成长值增加了"+addPrice+"!");
        setCanSell(true);
    }
           

主程序:

public class Demo02PetShop {

    static Scanner sc = new Scanner(System.in);

    static List<Shop> shop = new ArrayList<>();
    static List<Pet> myPets = new ArrayList<>();

    static int myMoney = 10;
    static int feedCount = 0;
    static int day = 1;

    public static void main(String[] args) {
        loadDefault();
        mainMenu();
        System.out.println("再见");
    }

    // 加载初始化
    private static void loadDefault() {
        shop.add(new Shop("成成", "bird", 5));
        shop.add(new Shop("露露", "bird", 10));
        shop.add(new Shop("富贵", "dog", 30));
        shop.add(new Shop("大宝", "tiger", 100));
    }

    private static void mainMenu() {
        while (true) {
            System.out.println(">首页");
            System.out.println("0.退出系统");
            System.out.println("1.进入商店");
            System.out.println("2.我的宠物");
            System.out.println("3.进入下一天");
            System.out.println("-------------");
            System.out.println("今天是第" + day + "天    我的金币:" + myMoney);
            System.out.println("输入序号:");
            int index = sc.nextInt();
            switch (index) {
                case 0:
                    return;
                case 1:
                    goShop();
                    break;
                case 2:
                    myPet();
                    break;
                case 3:
                    nextDay();
                    break;
                default:
                    System.out.println("重新输入:");
                    break;
            }
        }

    }

    private static void nextDay() {
        System.out.println("又过去了一天……");
        feedCount = 0;
        day++;
    }

    private static void myPet() {

        while (true) {
            System.out.println(">首页>我的宠物");

            for (int i = 0; i < myPets.size(); i++) {
                System.out.print(i + "\t");
                myPets.get(i).show();
            }

            System.out.println("-------------");
            System.out.println("0.返回");
            System.out.println("1.喂养宠物");
            System.out.println("2.出售宠物");
            int index = sc.nextInt();
            switch (index) {
                case 0:
                    return;
                case 1:
                    feedPets();
                    break;
                case 2:
                    sellPets();
                    break;
                default:
                    System.out.println("输入有误,重新输入:");
                    break;
            }
        }
    }

    private static void sellPets() {
        System.out.println("输入要出售的编号:");
        int i = sc.nextInt();
        Pet pet = myPets.get(i);
        String name = pet.getName();
        String type = pet.getType();
        int price = pet.getPrice();

        myMoney += price;

        Shop petToShop = new Shop(name, type, (int) (price * 1.5));
        shop.add(petToShop);
        myPets.remove(i);
        System.out.println("出售完成,获得了" + price + "个金币!");
    }

    private static void feedPets() {
        if (feedCount < 3) {
            System.out.println("输入要喂养的编号:");
            int i = sc.nextInt();
            myPets.get(i).feed();
            feedCount++;
        } else {
            System.out.println("今天已经喂得太多了……");
        }
    }

    private static void goShop() {
        while (true) {
            System.out.println(">首页>商店");
            int i = 0;
            for (Shop shop1 : shop) {
                System.out.print(i + "\t");
                shop1.show();
                i++;
            }
            System.out.println("0.离开商店");
            System.out.println("1.购买宠物");
            int index = sc.nextInt();
            if (index == 0) {
                return;
            }
            if (index == 1) {
                System.out.println("要买哪只?输入序号:");
                int index2 = sc.nextInt();
                if (index2 < shop.size()) {
                    if (shop.get(index2).getPrice() <= myMoney) {
                        buy(index2);
                    } else System.out.println("你的钱不够!");
                }
            }
        }
    }

    private static void buy(int index) {
        String name = shop.get(index).getName();
        String type = shop.get(index).getType();
        int price = shop.get(index).getPrice() / 2;   // 购买来的宠物售价要减半

        myMoney -= shop.get(index).getPrice();  // 扣钱
        shop.remove(index);     // 从商店移除

        switch (type) {  //加入自己的宠物列表
            case "bird":
                Pet pet = new Bird(name, type, price);
                myPets.add(pet);
                System.out.println("购买成功!");
                break;
            case "dog":
                Pet pet1 = new Dog(name, type, price);
                myPets.add(pet1);
                System.out.println("购买成功!");
                break;
            case "tiger":
                Pet pet2 = new Tiger(name, type, price);
                myPets.add(pet2);
                System.out.println("购买成功!");
                break;
            default:
                System.out.println("购买失败");
                break;
        }
    }
}