Кассовый аппарат выводит строку наименований, в которую можно внести изменения. Вводится цена покупки и наличные деньги - PullRequest
0 голосов
/ 15 октября 2019

Я не знаю, почему при итерации по моей связанной хэш-карте, чтобы найти наименьшую возможную комбинацию деноминаций, которая может быть изменена в этом куске кода, при итерации по «Пять пенсов» программа завершается ошибкой и выдает ошибочный окончательный результат.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap;


public class Main {
    /**
     * Iterate through each line of input.
     */

    public static LinkedHashMap<Integer, String> cashMap = new LinkedHashMap<Integer, String>(){{
        put(5000,"Fifty Pounds");
        put(2000, "Twenty Pounds");
        put(1000, "Ten Pounds");
        put(500, "Five Pounds");
        put(200, "Two Pounds");
        put(100, "One Pound");
        put(50, "Fifty Pence");
        put(20, "Twenty Pence");
        put(10, "Ten Pence");
        put(5, "Five Pence");
        put(2, "Two Pence");
        put(1, "One Pence");
    }};

    public static void main(String[] args) throws IOException {
        InputStreamReader reader = new InputStreamReader(System.in);
        BufferedReader in = new BufferedReader(reader);

        try {
            double purchasePrice = Double.parseDouble(in.readLine());
            double cash = Double.parseDouble(in.readLine());
            Main.calculateChange(purchasePrice, cash);
        } catch (Exception e) {
            System.out.println(e);
        }
    }

    public static void calculateChange(double purchasePrice, double cash) {
        // Access your code here. Feel free to create other classes as required
        purchasePrice = purchasePrice*100;
        cash = cash*100;
        int PP = ((int)purchasePrice);
        int CH = ((int)cash);
        if (PP==cash){
            System.out.println("Zero");
        }
        else if(PP>CH){
            System.out.println("ERROR");
        }
        else if(PP<CH){
            int change = CH-PP;
            String changeList = "";

            modulusMe(change,changeList);
        }
    }

    public static void modulusMe(int change, String changeList){


        for (int i: cashMap.keySet()){
            System.out.println("Cents: " +i);
            if(i>change){
                System.out.println("Next");
                continue;
            }
            else{
                while(i<change){
                    System.out.println("Change before op: " +change);
                    change = change -i;
                    changeList = changeList+ cashMap.get(i);
                    System.out.println("Change after op: " +change);
                }
            }

        }
        System.out.println(changeList);
    }
}

Ожидаемый результат ввода 8,75 50 - двадцать фунтов, двадцать фунтов, один фунт, двадцать пенсов, пять пенсов Ожидаемый результат ввода 11,25 20 - пять фунтов, два фунта, один фунт, пятьдесят пенсов, двадцатьПенсов, пять пенсов

...