Java 在ArrayList中查找成本最低的项
我需要做的是从数组列表中找到成本最低的库存项。如果没有,则返回“不适用”。所以我真的不知道如何从所有库存物品成本中找出最小的价值。这就是我目前所拥有的。我的计划是将成本设置为等于第一个库存项目,并循环检查每个项目的成本是否较低,但我不知道如何做到这一点,或者这是否是正确的方法 编辑:我们还没有覆盖for循环,所以我不能使用它们。我只能使用while循环Java 在ArrayList中查找成本最低的项,java,Java,我需要做的是从数组列表中找到成本最低的库存项。如果没有,则返回“不适用”。所以我真的不知道如何从所有库存物品成本中找出最小的价值。这就是我目前所拥有的。我的计划是将成本设置为等于第一个库存项目,并循环检查每个项目的成本是否较低,但我不知道如何做到这一点,或者这是否是正确的方法 编辑:我们还没有覆盖for循环,所以我不能使用它们。我只能使用while循环 public InventoryItem itemWithLowestCost() { if (inventoryList.size()
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";
}
}
您可以通过检查长度是否为非零,然后选择元素零的成本作为“暂定最佳”,并将其与列表中其他元素的成本进行比较:
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";
}
if(inventoryList.size()>0){
int-best=0;
int i=1;
而(i
您可以使用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;
}
成本最低的公共库存项目(){
int size=(inventoryList==null | | inventoryList.isEmpty())?
0:inventoryList.size();
InventoryItem最小值=(大小>0)?inventoryList.get(0):null;
对于(int i=1;i
注意:您不能将
字符串
N/a作为InventoryItem
实例返回(因此返回null
)。您可以使用比较器按成本对库存进行排序,从最低到最高
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;
}
成本最低的公共库存项目(收集库存){
if(inventory!=null&&!inventory.isEmpty()){
Collections.sort(库存、新比较器(){
@凌驾
公共整数比较(InventoryItem i1、InventoryItem i2){
返回i1.getCost()-i2.getCost();
}
});
返回库存。获取(0);
}
返回null;
}
使用自定义的比较器对列表进行排序
,选择最后一个(或第一个,取决于项目的排序方向)项目…如果不能这样做,请查看Math.min
对所有列表进行迭代是最糟糕的解决方案。。。如果您可以将其设置为整数
,并将其初始化为null
,则可以使用另一种数据结构(如tree)进行更好的排序。然后你可以使if(best==null | | cost
@Denise No,这就是诀窍-使best=0
,并在1开始循环,以避免条件中的“如果未设置或…”部分。唯一的问题是我们没有涵盖循环,所以我不能使用它们,仅允许while循环。@user3261339您可以通过将声明int i=1
移动到while
之外,将for
循环转换为while
循环,然后将i++
部分移到循环体的后面。@user3261339循环首先知道至少有一个元素。(if
在第一行检查)。这是我们指定为“最佳”的元素(索引为零)。变量best
存储迄今为止最佳元素的索引。在每次迭代中,循环检索下一个成本
,并将其与最佳
位置的成本进行比较。如果i
的成本更好,i
成为新的best
。循环结束后,best
包含具有最佳成本的项目的索引。
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;
}