当前位置:网站首页>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)
        };
    }
}

原网站

版权声明
本文为[Ten thousand volt sun]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/178/202206270845379201.html