0

ヘルプが必要なコードはこちらです。

if (itemAmount >= usedWithAmount) {
    for (int i = 0; i < 10; i++) {
        if (amountToTransfer == 6) {
            usedWithAmount = i;
            break;
        }
        amountToTransfer = itemAmount - i;
        System.out.println(amountToTransfer);
    }
} else if (itemAmount < usedWithAmount) {
    for (int i = 0; i < 10; i++) {
        if (amountToTransfer == 6) {
            itemAmount = i;
            break;
        }
        amountToTransfer = usedWithAmount - i;
    }
}

わかりました、最初は理解できなかったので、もっと詳しく説明します。

これは、ポーションを持っている私のゲームで使用されます。ポーションには量があります。(6) が最後にあるポーションは 6 回分、(5) は 5 回分、などです。

ポーションを別のポーションに使うと、そのポーションから別のポーションに分量を移して満タンにするようにしています。

たとえば、残り 5 回分 (itemAmount として表される) のポーションがあり、残り 2 回分 (usedWithAmount として表される) がある別のポーションでそれを使用するとします。

上記のアルゴリズムで実行したいのは、最初のポーションの値 (itemAmount) を使用し、それを他のポーションに転送して満タンにする (6 回分 = 満杯) 回数を調べることです。

したがって、5 回分ポーションを 2 回分ポーションと一緒に使用した場合、5 回分ポーションは 4 回分を失う必要がありますが、2 回分ポーションは 4 回分を取得する必要があります。最初のアイテムから、2 番目のアイテムに追加されます。

4

2 に答える 2

2

私のコメントを参照してください。を使用すると、これを非常に簡単に解決できますMath.min

amountToTransfer = Math.min(itemAmount, 6 - usedWithAmount);

これは、元のポーションの残りか、対象のポーションを満たすのに必要な量のどちらか小さい方を返します。


これは次のように書き換えることもできます。

final int space = 6 - usedWithAmount;
amountToTransfer = itemAmount < space ? itemAmount : space;

または、デビッドが書いたのと同じように、

final int space = 6 - usedWithAmount;
if (itemAmount < space) {
  amountToTransfer = itemAmount;
} else {
  amountToTransfer = space;
}
于 2012-08-19T21:36:11.760 に答える
1

どうですか:

// Figure out how much room is available in the one getting the transfer
amountMissing = 6 - usedWithAmount

// If it has room to hold everything, transfer it all
if (amountMissing >= itemAmount)
{
    amountToTransfer = itemAmount;
}
// Otherwise, transfer as much as it can hold
else
{
    amountToTransfer = amountMissing;
}
于 2012-08-19T21:32:17.890 に答える