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 剂药,我希望 amountToTransfer(在这种情况下为 4)表示要去除多少剂从第一项开始,并添加到第二项。

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 回答