编辑代码

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


class Main {
	public static void main(String[] args) {
        Beanbag.test();
	}
}

class Item {
    public String name;
    public double weight;
    public double value;

    Item(String name, double weight, double value) {
        this.name = name;
        this.weight = weight;
        this.value = value;
    }

    Item(Item item) {
        this.name = item.name;
        this.weight = item.weight;
        this.value = item.value;
    }
}

class Beanbag {
    public static LinkedList<Item> packBean(int packCapacity, Item[] items) {
        LinkedList<Item> beans = new LinkedList<Item>();
        // 1. 按照单价从高到低进行排序
        Arrays.sort(items, new Comparator<Item>() {
            public int compare(Item left, Item right) {
                double leftUnitPrice = left.value / left.weight;
                double rightUnitPrice = right.value / right.weight;
                if (leftUnitPrice > rightUnitPrice) {
                    return -1;
                } else if (leftUnitPrice == rightUnitPrice) {
                    return 0;
                } else {
                    return 1;
                }
            }
        });

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

        return beans;
    }

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

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

        double maxValue = 0;

        System.out.println("装了如下物品:");
        for (int i = 0; i < beans.size(); i++) {
            maxValue += beans.get(i).value;
            System.out.println(beans.get(i).name + " " + beans.get(i).weight);
        }

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

}