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