编辑代码

package com.fhj.test;

import java.util.*;

class Main {
    public static void main(String[] args) {
        int kg = 20;
        Fruit[] fruits = {
            new Fruit("苹果", 15, 300),
            new Fruit("香蕉", 18,180),
            new Fruit("橘子", 10, 150),
            new Fruit("猕猴桃", 9, 270)
        };
        LinkedList<Fruit> fruitLinkedList = maxPack(kg, fruits);

        double maxMoney = 0;

        System.out.println("装了如下物品:");
        for (Fruit fruit : fruitLinkedList) {
            maxMoney += fruit.money;
            System.out.println(fruit.name + " " + fruit.weight + " kg");
        }

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

    public static LinkedList<Fruit> maxPack(int packCapacity, Fruit[] fruits){
        LinkedList<Fruit> fruitLinkedList = new LinkedList<>();

        //按照单价从高到低进行排序
        Arrays.sort(fruits, new Comparator<Fruit>() {
            public int compare(Fruit left, Fruit right) {
                double leftUnitPrice = left.money/left.weight;
                double rightUnitPrice = right.money/right.weight;
                return Double.compare(rightUnitPrice, leftUnitPrice);
            }
        });

        int leftPackCapacity = packCapacity;
        for (Fruit fruit : fruits) {
            if (leftPackCapacity > fruit.weight) {
                leftPackCapacity -= fruit.weight;
                fruitLinkedList.add(new Fruit(fruit));
            } else {
                double unitPrice = fruit.money / fruit.weight;
                double packWeight = leftPackCapacity;
                double packValue = packWeight * unitPrice;
                fruitLinkedList.add(new Fruit(fruit.name, packWeight, packValue));
                leftPackCapacity = 0;
                break;
            }
        }

        return fruitLinkedList;
    }

}

class Fruit {
    public String name;
    public double weight;
    public double money;

    public Fruit(String name, double weight, double money) {
        this.name = name;
        this.weight = weight;
        this.money = money;
    }

    public Fruit(Fruit fruit) {
        this.name = fruit.name;
        this.weight = fruit.weight;
        this.money = fruit.money;
    }
}