当前位置:网站首页>多個類的設計
多個類的設計
2022-06-27 08:46:00 【萬伏小太陽】
//package ListTest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//創建飲料屋,傳入本飲料屋有什麼飲料
BeverageHouse house = new BeverageHouse(ExamTools.data());
System.out.print("輸入:");
//接收點單數據,並分解若幹對整數,格式看題目說明
List<int[]> codeAndAmounts = ExamTools.inputCodesAndAmounts();
//系統依次處理點飲料的請求
for (int[] codeAndAmount : codeAndAmounts)
house.order(codeAndAmount[0], codeAndAmount[1]);
//結算
house.settle();
}
}
/** * 飲料屋 * 1 1,2 8,6 3,6 -2,1 1, 2 -100 */
class BeverageHouse {
private final Cart cart = new Cart();
private final BeverageList beverageList;
public BeverageHouse(Beverage[] beverages) {
beverageList = new BeverageList(beverages);
}
/** * 點一種飲料,如果所點的飲料不存在,程序什麼也不做 * @param beverageCode 飲料代碼 * @param amount 點amount杯飲料,可以是負數 */
public void order(int beverageCode, int amount) {
//TODO 補全代碼
Beverage beverage = beverageList.getBeverageByCode(beverageCode);
if (beverage != null) {
cart.adjust(beverage, amount);
}
}
/** * 模擬結算,輸出所購飲料的數量和總價 */
public void settle() {
System.out.printf("總金額:%.2f 總杯數:%d",cart.getTotalPrice(),cart.getTotalAmount());
}
}
/** * 購物車 */
class Cart {
/** * 增减某種飲料的數量,如果將導致該種飲料點的杯數<=0,錶示不要該飲料 */
private final HashMap<Beverage,Integer> cart = new HashMap<>();
public void adjust(Beverage beverage, int amount) {
//TODO 補全代碼
if(cart.containsKey(beverage)){
cart.put(beverage,cart.get(beverage)+amount);
}else{
cart.put(beverage,amount);
}
}
/** * 返回購物車中的飲料總件數 */
public int getTotalAmount() {
//TODO 補全代碼
int sum = 0;
for (Map.Entry<Beverage, Integer> entry : cart.entrySet()) {
if(entry.getValue()>0) sum += entry.getValue();
}
return sum;
}
/** * 返回購物車的飲料總價格 */
public float getTotalPrice() {
//TODO 補全代碼
float sum = 0;
for (Map.Entry<Beverage, Integer> entry : cart.entrySet()) {
if(entry.getValue()>0&&entry.getKey().getPrice()>0) sum += entry.getKey().getPrice() * entry.getValue();
}
return sum;
}
}
/** * 飲料錶類 */
class BeverageList {
private final Map<Integer, Beverage> beverageMap;
public BeverageList(Beverage[] beverages) {
this.beverageMap = new HashMap<>();
for (Beverage beverage : beverages) {
this.beverageMap.put(beverage.getCode(), beverage);
}
}
/** * 根據飲料代碼返回飲料 * @param beverageCode */
public Beverage getBeverageByCode(int beverageCode) {
return beverageMap.get(beverageCode);
}
}
/** * 飲料類 */
class Beverage implements Comparable<Beverage>{
private final int code;//代碼(編號)
private final String name;//名字
private final float price;//價格
public Beverage(int code, String name, float price) {
this.code = code;
this.name = name;
this.price = price;
}
public Integer getCode() {
return code;
}
public float getPrice() {
return price;
}
/** * code相同的飲料是相同的 */
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Beverage beverage = (Beverage) o;
return code == beverage.code;
}
@Override
public int hashCode() {
return Objects.hash(code);
}
/** * 各種排序用 */
@Override
public int compareTo(Beverage o) {
return this.code-o.getCode();
}
@Override
public String toString() {
return "["+ code +
"," + name +String.format(",%.2f",price) +
']';
}
}
class ExamTools{
/** * 從鍵盤接收輸入,並按c a,c a ...(c 是飲料代碼,a 是數量)的格式解析<br/> * 返回的List中每個元素都是一個數組,數組的元素0是飲料代碼,元素1是該飲料點幾杯<br/> */
static List<int[]> inputCodesAndAmounts() {
ArrayList<int[]> list = new ArrayList<>();
String line;
try (Scanner scanner = new Scanner(System.in)) {
line = scanner.nextLine();
}
String[] codesAndAmounts;
if (line.matches("^\\+?\\d+\\s+[+-]?\\d+(\\s*,*\\s*\\+?\\d+\\s+[+-]?\\d+)*$")) {
codesAndAmounts = line.split("[^\\d+-]+");
} else {
throw new IllegalArgumentException("error input");
}
for (int i = 0; i < codesAndAmounts.length - 1; i += 2) {
list.add(new int[]{
Integer.parseInt(codesAndAmounts[i]),
Integer.parseInt(codesAndAmounts[i + 1])});
}
return list;
}
/** * 考試用的測試數據 */
static Beverage[] data() {
return new Beverage[]{
new Beverage(1, "紅茶", 5.55f),
new Beverage(2, "咖啡", 6.66f),
new Beverage(3, "奶茶", 8.18f),
new Beverage(4, "綠茶", 5.32f),
new Beverage(5, "參茶", 66.6f),
new Beverage(6, "燕窩", 22.2f),
new Beverage(7, "梨汁", 7.77f),
new Beverage(8, "開水", 0.55f),
new Beverage(9, "柳丁汁", 4.44f),
new Beverage(10, "豆漿", 3.43f)
};
}
}
边栏推荐
猜你喜欢
随机推荐
关于el-date-picker点击清空参数变为null的问题
DV scroll board width of datav rotation table component
AQS underlying source code of concurrent programming JUC
第十一章 信号(一)- 概念
Several cases that do not initialize classes
Mysql事务中MVCC理解超简单
快捷键 bug,可复现(貌似 bug 才是需要的功能 [滑稽.gif])
sql注入之order by注入
Rough reading DS transunet: dual swing transformer u-net for medical image segmentation
Digital ic-1.9 understands the coding routine of state machine in communication protocol
The most direct manifestation of memory leak
ThreadLocal digs its knowledge points again
C# 解决使用SQLite 的相对路径问题
Matlab tips (19) matrix analysis -- principal component analysis
Rockermq message sending mode
100%弄明白5种IO模型
【mysql篇-基础篇】通用语法1
I'm almost addicted to it. I can't sleep! Let a bug fuck me twice!
2022.06.26 (LC Luo 6101 Luo determines whether the matrix is an X matrix)
About the problem that the El date picker Click to clear the parameter and make it null









