编辑代码

import java.util.*;

public class QuestionThree {
    public static LinkedList< Fruit> packBean(int packCapacity,  Fruit[] items) {

        LinkedList< Fruit> beans = new LinkedList< Fruit>();

        Arrays.sort(items, new Comparator< Fruit>() {
            public int compare( Fruit left,  Fruit 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  Fruit(items[i]));
            } else {
                double unitPrice = items[i].totalValue / items[i].totalWeight;
                double packWeight = leftPackCapacity;
                double packValue = packWeight * unitPrice;
                beans.add(new  Fruit(items[i].name, packWeight, packValue));
                leftPackCapacity = 0;
                break;
            }
        }

        return beans;
    }

    public static void main(String[] args) {
         Fruit[] items = {
                new  Fruit("苹果", 15, 300),
                new  Fruit("香蕉", 18, 180),
                new  Fruit("橘子", 10, 150),
                new  Fruit("猕猴桃", 9, 270),
        };

        LinkedList< Fruit> beans = packBean(20, items);

        double maxValue = 0;

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

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

class Fruit {
    String name;
    double totalWeight;
    double totalValue;

    Fruit(String name, double totalWeight, double totalValue) {
        this.name = name;
        this.totalWeight = totalWeight;
        this.totalValue = totalValue;
    }

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