这是我需要帮助的代码。
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)表示从第一项中删除多少剂,并添加到第二项。
请参阅我的评论。您可以使用 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;
}
怎么样:
// 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;
}