我需要做的是从数组列表中找到成本最低的库存项目。如果没有,则返回“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;
}
答案 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;
}