题目描述:
1、创建Pet抽象类,有喂养的方法,宠物的名称,其它的子类派生自该类。
2、创建一个商店类,商店中有多种可以购买的宠物列表,可以选择购买的宠物,购买一只宠物需要花费10个金币。
3、可以将购买的宠物显示在自己的商店中。
4、可以销售自己的宠物,喂养1次一次以上的宠物才可以销售,宠物的价格按:初始价格为10金币+成长价格来计算。
5、可以喂养宠物,每天最多喂养3次;喂养1次以上,才可以销售,每次喂养成长值+5,可以增加5个金币。
6、每个人的初始金币是10金币,通过不断的购买、喂养、销售宠物来增加自己的金币。
7、可以随时查看自己商店中的宠物和自己账户的金币。
我的思路:
Pet建立抽象类,属性有名字、品种、价格,有抽象喂养方法与打印方法,子类有Bird、Dog、Tiger。Shop建立类,包含属性:名字、品种、价格给我的宠物建立myPets集合,shop建立shops集合,考虑到输出要有排序,且查询的操作较多,都定为ArrayList集合,且在主程序中呈静态变量。天数、每天喂养次数、金币也设为静态变量且赋初值。当购买宠物时,从商店选中指定的Pet类实例,取出姓名、品种、价格,赋值到new的Pet中,由于Pet子类不同有各自的喂养方法,因此switch判断一下品种,分别建立不同子类的Pet实例,加入myPets集合中去。加入时将价值折半。出售时从myPets中remove掉,通过临时变量赋值给shop中去,出售时价值*2.(奸商!!)每次喂养成长值加3~7的随机数。且count++,一旦count>= 3则不能喂养。进入下一天,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); } 12345678
主程序:
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; } } }
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178