0

所以我的问题是我有一台自动售货机。自动售货机的插槽具有每个插槽的最大物品数量。

如果我使用产品名称和数量运行补货方法,我需要将数量添加到提供的产品中。我有一个字符串数组和一个股票数组,其索引是插槽号。

问题是如果我在列表中有两次相同的命名产品,产品的第一个索引将达到最大值,但产品的第二个实例总是比我需要的少 1。

前任。我在插槽 0 和 1 有糖果,最多 10 个。运行 restock(candies, 8) 然后 restock(candies, 5) 应该在插槽 0 和插槽 2 中提供 10 和 3。但我得到的是 10 和 2。

public void restockProduct(String product, int quantity) {
    int index = -1;
    // If there is nothing to add, quit
    if (quantity == 0) {
        return;
    }
    for (int i = 0; i < products.length; i++) {
        //Find location of product
        if (products[i].equals(product)) {
            index = i;
            if(stock[index] <= max)
            break;
        }
    }
    if(index >=0){
        stock[index]++;
        restockProduct(product, quantity-1);
    }

谢谢

4

2 回答 2

1

使用此代码和 a of 10 似乎max您将在第一场比赛中获得 11 和在第二场比赛中获得 2 ,因为这一行:

if(stock[index] <= max)

如果插槽已满,等于max,那么您仍然选择它以供以后递增。尝试严格小于。此外,为了清楚起见,将这两个if条件结合起来。如果产品名称匹配且未满,您只想选择插槽。

if (products[i].equals(product) && stock[i] < max) {
     index = i;
     break;
}

当没有插槽满足这两个条件时,您还必须处理这种情况。

于 2013-04-12T22:05:52.350 回答
0

你在这件事上想得太用力了

public void restockProduct(String product, int quantity) 
{

    for (int i = 0; i < products.length; i++) 
    {
        //Find location of product
        if (products[i].equals(product)) 
        {
            int diff = max = stock[i];
            stock[i] += diff;
            quantity -= diff;
        }
    }
}
于 2013-04-12T22:06:06.567 回答