Java 中的数学算法

  • 本文关键字:算法 Java java math
  • 更新时间 :
  • 英文 :


这是我需要帮助的代码。

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;
}

最新更新