编辑代码

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

public class Backpack {

    public static class GreedyItem {    //记录需要装包的物品的信息
        public String name; //物品名称
        public double totalWeight;  //物品总重量
        public double totalValue;   //物品总价值

        public GreedyItem(String itemName, double weight, double value) {
            this.name = itemName;
            this.totalWeight = weight;
            this.totalValue = value;
        }

        public GreedyItem(GreedyItem item) {
            this.name = item.name;
            this.totalWeight = item.totalWeight;
            this.totalValue = item.totalValue;
        }
}

    //贪心算法实现,返回需要装包的物品列表
    public static LinkedList<GreedyItem> packBean(int packCapacity, GreedyItem[] items){
         LinkedList<GreedyItem> beans = new LinkedList<GreedyItem>(); // 记录需要装包的豆子

         //按照单价从高到低进行排序
         Arrays.sort(items, new Comparator<GreedyItem>() {
             public int compare(GreedyItem left, GreedyItem right) {
                 double leftUnitPrice = left.totalValue/left.totalWeight;
                 double rightUnitPrice = right.totalValue/right.totalWeight;
                 if (leftUnitPrice > rightUnitPrice){
                     return -1;
                 }
                 else if (leftUnitPrice == rightUnitPrice) {
                     return 0;
                 }
                 else {
                     return 1;
                 }
             }
         }); 

         //从高到低依次取出豆子
         int leftPackCapacity = packCapacity;
         for (int i = 0; i < items.length; ++i) {
             if (leftPackCapacity > items[i].totalWeight) {
                 leftPackCapacity -= items[i].totalWeight;
                 beans.add(new GreedyItem(items[i]));
             }
             else {
                 double unitPrice = items[i].totalValue/items[i].totalWeight;
                 double packWeight = leftPackCapacity;
                 double packValue = packWeight * unitPrice;
                 beans.add(new GreedyItem(items[i].name, packWeight, packValue));
                 leftPackCapacity = 0;
                 break;
             }
         }

         return beans;
    }
    public static void test() {
        GreedyItem[] items = {
                new GreedyItem("黄豆", 100, 100),
                new GreedyItem("绿豆", 30, 90),
                new GreedyItem("红豆", 60, 120),
                new GreedyItem("黑豆", 20, 80),
                new GreedyItem("青豆", 50, 75)
        };

        LinkedList<GreedyItem> beans = packBean(100, items);

        double maxValue = 0;

        System.out.println("装了如下物品:");
        for (GreedyItem bean : beans) {
            maxValue += bean.totalValue;
            System.out.println(bean.name + " " + bean.totalWeight);
        }

        System.out.println("总价值:" + maxValue);

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

}