Java的列舉簡單應用
阿新 • • 發佈:2020-07-20
/**
* 請用列舉方式實現如下應用:
* 客戶去旅店住房,
* 客戶分普通客戶,和vip客戶,vip分白金和鑽石客戶
* 不同的客戶有不同的折扣
* 入住的房間分單人房,雙人房和套房
* 不同的房間房費不同
* 入住的時間分一週七天,每天費用也不同
* 請設計程式碼實現某客戶住房一天,計算出應付房費.
* 完成的同學可以嘗試計算連續N天的房費如何計算
**/
根據題意客戶有普通客戶,白金客戶,鑽石客戶,則可以建一個列舉類,內容如下:
1 public enum Customer { 2 common("普通", 0), 3 WhiteGold("白金", 0.8), 4 diamond("鑽石", 0.9);5 private String name; 6 private double discount; 7 8 Customer(String name, double discount) { 9 this.name = name; 10 this.discount = discount; 11 } 12 13 public String getName() { 14 return name; 15 } 16 17 public void setName(String name) {18 this.name = name; 19 } 20 21 public double getDiscount() { 22 return discount; 23 } 24 25 public void setDiscount(double discount) { 26 this.discount = discount; 27 } 28 }
之後是一週每一天也有不同價格折扣
1 public enum Week { 2 DAY1("週一", 0.9), 3 DAY2("週二", 0.9),4 DAY3("週三", 0.8), 5 DAY4("週四", 0.8), 6 DAY5("週五", 0.5), 7 DAY6("週六", 0.6), 8 DAY7("週日", 0.6); 9 10 private String name;//獲取每週的名字 11 private double per; 12 13 Week(String name, double per) { 14 this.name = name; 15 this.per = per; 16 } 17 18 public String getName() { 19 return name; 20 } 21 22 public void setName(String name) { 23 this.name = name; 24 } 25 26 27 public double getPer() { 28 return per; 29 } 30 31 public void setPer(double per) { 32 this.per = per; 33 } 34 }
房間也有單人房間、雙人房間和套房
1 public enum Room { 2 SINGLE("單人房間", 100), 3 DUETBED("雙人房間", 150), 4 SUITE("套房", 180); 5 private String roomName; 6 private int f; 7 8 Room(String roomName, int f) { 9 this.roomName = roomName; 10 this.f = f; 11 } 12 13 public String getRoomName() { 14 return roomName; 15 } 16 17 public void setRoomName(String roomName) { 18 this.roomName = roomName; 19 } 20 21 public int getF() { 22 return f; 23 } 24 25 public void setF(int f) { 26 this.f = f; 27 } 28 }
如果是住一天的話,呼叫getPrice方法,傳來星期、顧客以及房間等級並將對應的價格累加。
1 public class Util { 2 private static Week wk; 3 private static Customer customer; 4 private static Room room; 5 6 static double total = 0; 7 8 /** 9 * 客戶住一天 10 * 11 * @param week 12 * @param customer 顧客 13 * @param room 房間類別 14 */ 15 public static void getPrice(Week week, Customer customer, Room room) { 16 if (customer != Customer.common) { 17 total = (room.getF() * week.getPer() * customer.getDiscount()); 18 } else { 19 total = (room.getF() * week.getPer()); 20 } 21 System.out.println("客戶型別:" + customer.getName() + 22 "\n======================\n" + 23 "日期:" + week.getName() + "\n" + 24 "今日折扣:" + week.getPer() + "\n" + 25 "房間型別:" + room.getRoomName() + "\n" 26 + "房間價格:" + room.getF() + "元"); 27 System.out.println("房價;" + total + "元"); 28 }
如果是連續住N天,就要考慮一個問題,就是星期的天數的控制,如果天數大於星期天則星期要從星期一開始算起,下面程式碼我使用index變數來記錄傳來的星期引數並通過If判斷後賦值,並將Week的每一天新增到ArrayList裡,通過迴圈訪問呢ArrayList獲取每一天的金額並計算,使用一個money陣列來統計每一天的金額最後通過for迴圈進行累加輸出。
1 /** 2 * 住N天 3 * 4 * @param week 星期 5 * @param customer 顧客 6 * @param room 房間型別 7 * @param day 住的天數 8 */ 9 public static void getPrice(Week week, Customer customer, Room room, int day) { 10 ArrayList<Week> weeks = new ArrayList<>(); 11 int index = 0;//記錄陣列下標 12 total = 0;//總金額置為0 13 double money[] = new double[day]; //用來存放每天使用者的費用 14 if (week == wk.DAY1) { 15 index = 0; 16 } else if (week == wk.DAY2) { 17 index = 1; 18 } else if (week == wk.DAY3) { 19 index = 2; 20 } else if (week == wk.DAY4) { 21 index = 3; 22 } else if (week == wk.DAY5) { 23 index = 4; 24 } else if (week == wk.DAY6) { 25 index = 5; 26 } else if (week == wk.DAY7) { 27 index = 6; 28 } 29 30 weeks.add(wk.DAY1); 31 weeks.add(wk.DAY2); 32 weeks.add(wk.DAY3); 33 weeks.add(wk.DAY4); 34 weeks.add(wk.DAY5); 35 weeks.add(wk.DAY6); 36 weeks.add(wk.DAY7); 37 38 for (int i = 0; i < day; i++) { 39 if (index > 6) { //如果星期(ArrayList下標)>6 40 index = 0;//重新回到星期一 41 } 42 //將每天的費用加到money數組裡 43 money[i] = (weeks.get(index).getPer() * customer.getDiscount() * room.getF()); 44 index++; 45 } 46 47 //累加money數組裡的金額 48 for (int i = 0; i < day; i++) { 49 total += money[i]; 50 } 51 52 System.out.println("客戶型別:" + customer.getName() + 53 "\n===================\n" 54 + "住" + day + "天"); 55 System.out.println("房價共;" + total + "元"); 56 } 57 }
主程式測試如下,可以預設住一天,也可以通過Util的getPrice住N天。
1 public class Water { 2 public static void main(String[] args) { 3 Week wk = Week.DAY5; //星期3 4 Customer customer = Customer.diamond; //鑽石客戶 5 Room room = Room.DUETBED; //雙人房間 6 7 //預設住1天 8 Util.getPrice(wk, customer, room); 9 System.out.println("\n===========================================\n"); 10 //住N天 11 Util.getPrice(wk, customer, room, 3); 12 } 13 }
執行效果如下: