題目描述:
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);
}
主程式:
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;
}
}
}