编辑代码

import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;
public class GreedyFruits {
    public static LinkedList<Item> packFruits(int packCapacity, Item[] items){
         LinkedList<Item> fruits = new LinkedList<Item>(); // 记录需要装包的水果

        //1. 按照价值从高到低进行排序 
        Arrays.sort(items, new Comparator<Item>(){ 
            public int compare(Item left, Item right){ 
            int leftUnitPrice = left.totalValue/left.totalWeight; 
            int rightUnitPrice = right.totalValue/right.totalWeight; 
            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].totalWeight){ 
                        leftPackCapacity -= items[i].totalWeight; 
                         fruits.add(new Item(items[i])); 
                     }else{ 
                         int unitPrice = items[i].totalValue/items[i].totalWeight; 
                         int packWeight = leftPackCapacity; 
                             int packValue = packWeight * unitPrice; 
                             fruits.add(new Item(items[i].name, packWeight, packValue)); 
                             leftPackCapacity = 0; 
                                break; 
 } 
 } 
         return fruits;
    }
    public static void main(String[] args) {
        Item[] items = {
            new Item("苹果", 15, 300),
            new Item("香蕉", 18, 180),
            new Item("橘子", 10, 150),
            new Item("猕猴桃", 9, 270),
        };
        LinkedList<Item> fruits = packFruits(20, items);
        double maxValue = 0;
        System.out.println("装了如下水果:");
        for (int i = 0; i < fruits.size(); ++i) {
            maxValue += fruits.get(i).totalValue;
            System.out.println(fruits.get(i).name + ":" + fruits.get(i).totalWeight);
        }

        System.out.println("总价值:" + maxValue+"元");
	}
}
class Item {
    public String name;
    public int totalWeight;
    public int totalValue;
    Item(String name, int totalWeight, int totalValue) {
        this.name = name;
        this.totalWeight = totalWeight;
        this.totalValue = totalValue;
    }
     Item(Item item) {
        this.name = item.name;
        this.totalWeight = item.totalWeight;
        this.totalValue = item.totalValue;
    }
}