在ArrayList中查找成本最低的项目

时间:2014-10-24 01:14:26

标签: java

我需要做的是从数组列表中找到成本最低的库存项目。如果没有,则返回“N / A”。所以我无法弄清楚如何找到所有库存项目成本中的最小值。这就是我到目前为止所拥有的。我的计划是将成本设置为等于第一个库存项目,并在每个项目中循环检查是否成本较低,但我对如何做到这一点感到困惑,或者这是否是正确的做法。

编辑:我们尚未涵盖for循环,因此我无法使用它们。我只能使用while循环

public InventoryItem itemWithLowestCost() {
    if (inventoryList.size() > 0) {
        int i = 0;
        while (i < inventoryList.size()) {
            double cost = inventoryList.get(i).getCost();
            if (cost < )
        }

    }
    else {
        return "N/A";
    }
}

这是我的InventoryItem构造函数。我不确定是否需要了解上述代码,但无论如何这是

public InventoryItem(String descriptionIn, double costIn, double percentDepreciatedIn) {
    description = descriptionIn.trim();
    cost = costIn;
    percentDepreciated = percentDepreciatedIn;
}

3 个答案:

答案 0 :(得分:2)

您可以通过检查长度为非零,然后将元素零的成本选为“暂定最佳”,并将其与列表中其他元素的成本进行比较来实现:

if (inventoryList.size() > 0) {
    int best = 0;
    int i  = 1;
    while (i < inventoryList.size()) {
        double cost = inventoryList.get(i).getCost();
        if (cost < inventoryList.get(best).getCost()) {
            best = i;
        }
        i++;
    }
    return inventoryList.get(best);
} else {
    return "N/A";
}

答案 1 :(得分:2)

您可以使用O(n)循环

来完成此操作
public InventoryItem itemWithLowestCost() {
  int size = (inventoryList == null || inventoryList.isEmpty()) ? 
          0 : inventoryList.size();
  InventoryItem min = (size > 0) ? inventoryList.get(0) : null;
  for (int i = 1; i < size; i++) {
    InventoryItem ii = inventoryList.get(i);
    if (ii.getCost() < min.getCost()) min = ii;
  }
  return min;
}

注意:您无法将String N / A作为InventoryItem实例返回(因此返回null)。

答案 2 :(得分:2)

您可以使用比较器按成本对库存进行排序,从最低到最高。

public InventoryItem itemWithLowestCost(Collection<InventoryItem> inventory) {
  if(inventory != null && !inventory.isEmpty()) {
    Collections.sort(inventory, new Comparator<InventoryItem>() {
        @Override
        public int compare(InventoryItem i1, InventoryItem i2) {
            return i1.getCost() - i2.getCost();
        }
    });
    return inventory.get(0);
  }
  return null;    
}