编辑代码

import java.util.*;
class Fruit {
    public String name;
    public double weight;
    public double value;
    Fruit(String n, double w, double v){
        this.name = n;
        this.weight = w;
        this.value = v;
    }
    Fruit(Fruit fruit){
        this.name = fruit.name;
        this.weight = fruit.weight;
        this.value = fruit.value;
    }
	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> packageFruit = packFruit(20,fruits);

            double maxValue = 0;

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

            System.out.println("总价值:" + maxValue);
        }
    
    public static LinkedList<Fruit> packFruit(int packCapacity,Fruit[] fruits){
        LinkedList<Fruit> fruitPackage = new LinkedList<>();
        // 按单价从高到低进行排序
        MyComp myComp = new MyComp();
        Arrays.sort(fruits,myComp);
        // 单价从高到低依次装入水果
        int leftPackCapacity = packCapacity;
        for(int i = 0; i < fruits.length; i++){
            if(fruits[i].weight < leftPackCapacity){
                leftPackCapacity -= fruits[i].weight;
                fruitPackage.add(new Fruit(fruits[i]));
            }else{
                fruitPackage.add(new Fruit(fruits[i].name,leftPackCapacity,leftPackCapacity*(fruits[i].value/fruits[i].weight)));
                leftPackCapacity = 0;
                break;
            } 
        }
        return fruitPackage;
    }
    public static class MyComp implements Comparator<Fruit>{
        @Override
        public int compare(Fruit o1,Fruit o2){
            return (int)(o2.value / o2.weight - o1.value / o1.weight);
        }
    }
}