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

Java 在ArrayList中查找成本最低的项,java,Java,我需要做的是从数组列表中找到成本最低的库存项。如果没有,则返回“不适用”。所以我真的不知道如何从所有库存物品成本中找出最小的价值。这就是我目前所拥有的。我的计划是将成本设置为等于第一个库存项目,并循环检查每个项目的成本是否较低,但我不知道如何做到这一点,或者这是否是正确的方法 编辑:我们还没有覆盖for循环,所以我不能使用它们。我只能使用while循环 public InventoryItem itemWithLowestCost() { if (inventoryList.size()

我需要做的是从数组列表中找到成本最低的库存项。如果没有,则返回“不适用”。所以我真的不知道如何从所有库存物品成本中找出最小的价值。这就是我目前所拥有的。我的计划是将成本设置为等于第一个库存项目,并循环检查每个项目的成本是否较低,但我不知道如何做到这一点,或者这是否是正确的方法

编辑:我们还没有覆盖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";
    }
}

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

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;    
}