当前位置:网站首页>Design of multiple classes
Design of multiple classes
2022-06-27 08:46:00 【Ten thousand volt sun】
//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) {
// Create a beverage house , What kind of drinks are there in this beverage house
BeverageHouse house = new BeverageHouse(ExamTools.data());
System.out.print(" Input :");
// Receiving point single data , And decompose several pairs of integers , See the title description for the format
List<int[]> codeAndAmounts = ExamTools.inputCodesAndAmounts();
// The system processes requests for drinks in turn
for (int[] codeAndAmount : codeAndAmounts)
house.order(codeAndAmount[0], codeAndAmount[1]);
// Settlement
house.settle();
}
}
/** * Beverage house * 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);
}
/** * Order a drink , If the drink you ordered doesn't exist , The program does nothing * @param beverageCode Drink code * @param amount spot amount A drink , It could be negative */
public void order(int beverageCode, int amount) {
//TODO The completion code
Beverage beverage = beverageList.getBeverageByCode(beverageCode);
if (beverage != null) {
cart.adjust(beverage, amount);
}
}
/** * Simulated settlement , Output the quantity and total price of the beverage purchased */
public void settle() {
System.out.printf(" Total sum :%.2f Total cups :%d",cart.getTotalPrice(),cart.getTotalAmount());
}
}
/** * The shopping cart */
class Cart {
/** * Increase or decrease the quantity of a drink , If the number of cups that will lead to the ordering of this kind of beverage <=0, Do not drink */
private final HashMap<Beverage,Integer> cart = new HashMap<>();
public void adjust(Beverage beverage, int amount) {
//TODO The completion code
if(cart.containsKey(beverage)){
cart.put(beverage,cart.get(beverage)+amount);
}else{
cart.put(beverage,amount);
}
}
/** * Return the total number of drinks in the shopping cart */
public int getTotalAmount() {
//TODO The completion code
int sum = 0;
for (Map.Entry<Beverage, Integer> entry : cart.entrySet()) {
if(entry.getValue()>0) sum += entry.getValue();
}
return sum;
}
/** * Return the total beverage price of the shopping cart */
public float getTotalPrice() {
//TODO The completion code
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;
}
}
/** * Beverage list */
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);
}
}
/** * Return the beverage according to the beverage code * @param beverageCode */
public Beverage getBeverageByCode(int beverageCode) {
return beverageMap.get(beverageCode);
}
}
/** * Beverages */
class Beverage implements Comparable<Beverage>{
private final int code;// Code ( Number )
private final String name;// name
private final float price;// 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 The same drink is the same */
@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);
}
/** * For various sorts */
@Override
public int compareTo(Beverage o) {
return this.code-o.getCode();
}
@Override
public String toString() {
return "["+ code +
"," + name +String.format(",%.2f",price) +
']';
}
}
class ExamTools{
/** * Receiving input from the keyboard , And press c a,c a ...(c It's the drink code ,a It's quantity ) Format analysis of <br/> * Back to List Each element in is an array , Elements of array 0 It's the drink code , Elements 1 How many drinks should I order <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;
}
/** * Test data for the exam */
static Beverage[] data() {
return new Beverage[]{
new Beverage(1, " black tea ", 5.55f),
new Beverage(2, " coffee ", 6.66f),
new Beverage(3, " Milk tea ", 8.18f),
new Beverage(4, " Green tea ", 5.32f),
new Beverage(5, " Ginseng tea ", 66.6f),
new Beverage(6, " Bird's nest ", 22.2f),
new Beverage(7, " Pear juice ", 7.77f),
new Beverage(8, " Boiled water ", 0.55f),
new Beverage(9, " Orange Juice ", 4.44f),
new Beverage(10, " Soya-bean milk ", 3.43f)
};
}
}
边栏推荐
猜你喜欢

The largest rectangle in the bar graph of force buckle 84

DataV轮播表组件dv-scroll-board宽度问题

100%弄明白5种IO模型

Redis主从复制以及哨兵模式

2022.06.26(LC_6101_判断矩阵是否是一个 X 矩阵)

AQS underlying source code of concurrent programming JUC

即构「畅直播」,全链路升级的一站式直播服务

Game asset reuse: a new way to find required game assets faster

Redis的事务

DV scroll board width of datav rotation table component
随机推荐
Nosql 数据库 -Redis 安装
IMX8QXP DMA资源和使用(未完结)
RockerMQ消息发送与消费模式
vim 从嫌弃到依赖(19)——替换
RockerMQ消息发送模式
C # solve the relative path problem using SQLite
win10为任意文件添加右键菜单
Associated GIS: all roads lead to ue5 City
March into machine learning -- Preface
Matlab tips (18) matrix analysis -- entropy weight method
Flow chart of Alipay wechat payment business
ServletConfig and ServletContext
SIG associé: toutes les routes mènent à ue5
How much memory does the data type occupy? LongVsObject
MATLAB小技巧(19)矩阵分析--主成分分析
[MySQL basic] general syntax 1
並發編程JUC的AQS底層源碼
我大抵是卷上瘾了,横竖睡不着!竟让一个Bug,搞我两次!
针对直播痛点的关键技术解析——首帧秒开、清晰度、流畅度
Coggle 30 days of ML July competition learning