0

だから私の問題は、自動販売機を持っていることです。自動販売機には、スロットごとに最大数のアイテムがあるスロットがあります。

商品名と数量で補充方法を実行する場合、供給された商品に数量を追加する必要があります。インデックスがスロット番号である文字列配列とストック配列があります。

問題は、リストに同じ名前の製品が 2 回ある場合、製品の最初のインデックスが最大値に達しますが、製品の 2 番目のインスタンスは常に必要な数よりも 1 少ないことです。

元。restock(candies, 8) を実行すると、スロット 0 に 10、スロット 2 に 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 maxof 10 を使用すると、次の行により、最初の一致で 11 が得られ、2 番目の一致で 2 が得られるようです。

if(stock[index] <= max)

スロットがすでに満杯の場合 ( に等しいmax)、後でインクリメントするためにスロットを選択しています。厳密に未満にしてください。さらに、わかりやすくするために、2 つの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 に答える