当前位置:网站首页>Conception de plusieurs classes
Conception de plusieurs classes
2022-06-27 08:46:00 【10 000 volts petit soleil】
//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) {
//Créer une maison de boissons,Qu'est - ce qu'il y a dans cette maison de boissons
BeverageHouse house = new BeverageHouse(ExamTools.data());
System.out.print("Entrée:");
//Données uniques du point de réception,Et décomposer plusieurs paires d'entiers,Format voir la description du sujet
List<int[]> codeAndAmounts = ExamTools.inputCodesAndAmounts();
//Le système traite successivement les demandes de commande de boissons
for (int[] codeAndAmount : codeAndAmounts)
house.order(codeAndAmount[0], codeAndAmount[1]);
//Règlement
house.settle();
}
}
/** * La Maison des boissons * 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);
}
/** * Commande une boisson , Si la boisson commandée n'existe pas ,Le programme ne fait rien * @param beverageCode Code de la boisson * @param amount PointamountUn verre.,Peut être négatif */
public void order(int beverageCode, int amount) {
//TODO Code complet
Beverage beverage = beverageList.getBeverageByCode(beverageCode);
if (beverage != null) {
cart.adjust(beverage, amount);
}
}
/** * Règlement simulé , Exporter la quantité et le prix total des boissons achetées */
public void settle() {
System.out.printf("Montant total:%.2f Nombre total de tasses :%d",cart.getTotalPrice(),cart.getTotalAmount());
}
}
/** * Panier */
class Cart {
/** * .Augmenter ou diminuer la quantité d'une boisson , Si le nombre de tasses qui causeront ce point de boisson <=0, Ça veut dire ne pas boire */
private final HashMap<Beverage,Integer> cart = new HashMap<>();
public void adjust(Beverage beverage, int amount) {
//TODO Code complet
if(cart.containsKey(beverage)){
cart.put(beverage,cart.get(beverage)+amount);
}else{
cart.put(beverage,amount);
}
}
/** * .Retour au total des boissons dans le panier */
public int getTotalAmount() {
//TODO Code complet
int sum = 0;
for (Map.Entry<Beverage, Integer> entry : cart.entrySet()) {
if(entry.getValue()>0) sum += entry.getValue();
}
return sum;
}
/** * Retour au panier prix total des boissons */
public float getTotalPrice() {
//TODO Code complet
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;
}
}
/** * Table de boissons */
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);
}
}
/** * Retour à la boisson selon le Code de la boisson * @param beverageCode */
public Beverage getBeverageByCode(int beverageCode) {
return beverageMap.get(beverageCode);
}
}
/** * Boissons */
class Beverage implements Comparable<Beverage>{
private final int code;//Code(No.)
private final String name;//Nom
private final float price;//Prix
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 La même boisson est la même */
@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);
}
/** * Pour toutes sortes de tri */
@Override
public int compareTo(Beverage o) {
return this.code-o.getCode();
}
@Override
public String toString() {
return "["+ code +
"," + name +String.format(",%.2f",price) +
']';
}
}
class ExamTools{
/** * Recevoir l'entrée du clavier ,Et appuyez surc a,c a ...(c C'est le Code de la boisson ,a Oui, la quantité.) Résolution de format pour <br/> * Retour àList .Chaque élément est un tableau ,Éléments du tableau0 C'est le Code de la boisson ,Élément1 Il est temps de commander quelques verres <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;
}
/** * Données d'essai pour l'examen */
static Beverage[] data() {
return new Beverage[]{
new Beverage(1, "Thé noir", 5.55f),
new Beverage(2, "Café", 6.66f),
new Beverage(3, "Thé au lait", 8.18f),
new Beverage(4, "Thé vert", 5.32f),
new Beverage(5, " Thé ", 66.6f),
new Beverage(6, "Nid d'hirondelle", 22.2f),
new Beverage(7, "Jus de poire", 7.77f),
new Beverage(8, "Eau bouillante", 0.55f),
new Beverage(9, "Jus d'orange", 4.44f),
new Beverage(10, "Lait de soja", 3.43f)
};
}
}
边栏推荐
- Obsidian 一周使用心得(配置、主题和插件)
- A classic interview question covering 4 hot topics
- vim 从嫌弃到依赖(19)——替换
- 即构「畅直播」,全链路升级的一站式直播服务
- SIG associé: toutes les routes mènent à ue5
- The markdown plug-in of the browser cannot display the picture
- Game asset reuse: a new way to find required game assets faster
- orthofinder直系同源蛋白分析及结果处理
- Enumeration? Constructor? Interview demo
- Redis五种基本类型
猜你喜欢

MySQL index details

C # solve the relative path problem using SQLite

Read datasets iteratively with xgboost

SIG associé: toutes les routes mènent à ue5

Coggle 30 days of ML July competition learning

Redis installation under Linux

I'm almost addicted to it. I can't sleep! Let a bug fuck me twice!

Win10 add right-click menu for any file

2022.06.26(LC_6100_统计放置房子的方式数)

正确的理解MySQL的MVCC
随机推荐
我大抵是卷上瘾了,横竖睡不着!竟让一个Bug,搞我两次!
The background prompt module for accessing fastadmin after installation does not exist
Redis master-slave replication and sentinel mode
[ 扩散模型(Diffusion Model) ]
June 26, 2022 (LC 6100 counts the number of ways to place houses)
Creation process and memory layout of objects at JVM level
oracle怎样将字符串转为多行
分析日志.log
高等数学第七章微分方程
When multiple network devices exist, how to configure their Internet access priority?
ThreadLocal digs its knowledge points again
支付宝微信支付业务流程图
0号进程,1号进程,2号进程
SPARQL basic introductory exercise
Order by injection of SQL injection
Modify the contents of /etc/crontab file directly, and the scheduled task will not take effect
Matlab tips (19) matrix analysis -- principal component analysis
使线程释放锁资源的操作/方法重载一点注意事项
IO pin configuration and pinctrl drive
DataV轮播表组件dv-scroll-board宽度问题