编辑代码

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

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

        LinkedList<Fruit> f = packFruit(20,fruits);

        double maxValue = 0;

        System.out.println("装了以下水果:");
        for(Fruit fruit : f){
            maxValue += fruit.totalValue;
            System.out.println(fruit.name + " " + fruit.totalWeight);
        }

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

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

        Arrays.sort(fruits,(a,b)->(int)(b.totalValue/b.totalWeight - a.totalValue/a.totalWeight));

        for(int i = 0; i < fruits.length; i++){
            if(packCapacity > fruits[i].totalWeight){
                packCapacity -= fruits[i].totalWeight;
                f.add(fruits[i]);
                System.out.println(f.get(i).name);
            }else{
                double a = fruits[i].totalValue/fruits[i].totalWeight;
                double b = a*packCapacity;
                f.add(new Fruit(fruits[i].name,packCapacity,b));
                packCapacity = 0;
                break;
            }
        }

        return f;
    }
}

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

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