当前位置:网站首页>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)
};
}
}
边栏推荐
猜你喜欢
随机推荐
MySQL environment variable configuration tutorial
Associated GIS: all roads lead to ue5 City
CLassLoader
Several cases that do not initialize classes
win10为任意文件添加右键菜单
即构「畅直播」,全链路升级的一站式直播服务
SPARQL basic introductory exercise
ThreadLocal再次挖掘它的知识点
C# 解决使用SQLite 的相对路径问题
Correctly understand MySQL mvcc
Rman-08137 main library failed to delete archive file
Ready to migrate to the cloud? Please accept this list of migration steps
JVM common garbage collector
ServletConfig与ServletContext
Matlab tips (18) matrix analysis -- entropy weight method
The markdown plug-in of the browser cannot display the picture
Read datasets iteratively with xgboost
JVM层次上的对象的创建过程和内存布局
About the problem that the El date picker Click to clear the parameter and make it null
That is, a one-stop live broadcast service with "smooth live broadcast" and full link upgrade