编辑代码

import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;

public class MakingChange {
    
    // 硬币的数据结构,包括硬币名称、面值和数量
    public static class Coin {
        public String name;   // 硬币名称
        public double value;  // 硬币面值
        public int count;     // 硬币数量

        Coin(String itemName, double value) {
            this.name = itemName;
            this.value = value;
            this.count = 0;
        }

        Coin(String name, double value, int count) {
            this.name = name;
            this.value = value;
            this.count = count;
        }
}

    // 找零函数,返回一个链表,记录用来找零的硬币及其数量
    public static LinkedList<Coin> makeChange(int change, Coin[] coins){
         LinkedList<Coin> coinMaking = new LinkedList<Coin>(); // 记录用来找零的硬币

         //按照单价从高到低进行排序
         Arrays.sort(coins, new Comparator<Coin>() {
             public int compare(Coin left, Coin right) {
                 if (left.value > right.value){ //如果 left 的面值大于 right 的面值,则将 left 排在 right 之前,返回 -1
                     return -1;
                 }
                 else if (left.value == right.value) { //如果两个硬币的面值相等,则返回 0
                     return 0;
                 }
                 else { //如果 left 的面值小于 right 的面值,则将 left 排在 right 之后,返回 1
                     return 1;
                 }
             }
         }); 

         //从高到低依次取出硬币
         int leftChange = change;
         for (int i = 0; i < coins.length; ++i) {
             if (leftChange >= coins[i].value) {    
                 int coinNeed = (int)(leftChange/coins[i].value);
                 leftChange -= coinNeed * coins[i].value;

                 coinMaking.add(new Coin(coins[i].name, coins[i].value, coinNeed));
             }
             else {
                 continue;
             }
         }

         return coinMaking;
    }
    
    public static void test() {
        Coin[] coins = {
            new Coin("二角五分硬币", 25),
            new Coin("一角硬币", 10),
            new Coin("五分硬币", 5),
            new Coin("一分硬币", 1)
        };

        LinkedList<Coin> coinMaking = makeChange(48, coins);

        System.out.println("用如下硬币找零48美分:");
        for (int i = 0; i < coinMaking.size(); ++i) {
            System.out.println(coinMaking.get(i).name + " " + coinMaking.get(i).count);
        }

	}

    public static void main(String[] args) {
        test();
	}
}