这非常有效吗?

时间:2014-03-20 02:16:58

标签: java performance minecraft

在我的我的Minecraft克隆中,我正在创建一种名为 food 的特定类型的项目(我自己想出来)。

为了控制食物量,我做了这个:

    if (currentFoodAmount > maxFoodAmount) {

        currentFoodAmount = maxFoodAmount;
    }

    if (currentFoodAmount < 0) {

        currentFoodAmount = 0;
    }

有更有效的方法吗?

感谢所有回答的人的帮助(包括讽刺和建设性的批评)

p.s.s。完整的代码:

            if (currentFoodAmount > maxFoodAmount) {

        EntityPlayer.giveEffect(Effect.full);
        currentFoodAmount = maxFoodAmount;
    }

    if (currentFoodAmount < 0) {

        currentFoodAmount = 0;
    }

    if (currentFoodAmount == 0) {

        EntityPlayer.giveEffect(Effect.starved);
    }

        public static void tick() {

    if (!EntityPlayer.isDead) {

        --foodDecayRate;

        if (foodDecayRate == 0) {

            currentFoodAmount -= 5;
            foodDecayRate = 100;
        }
    }
}

4 个答案:

答案 0 :(得分:2)

if (currentFoodAmount > maxFoodAmount) {

    currentFoodAmount = maxFoodAmount;
} else if (currentFoodAmount < 0) {

    currentFoodAmount = 0;
}

通过添加else会更有效(装配观点) 所以,如果它先运行,如果,不会检查第二个条件

答案 1 :(得分:1)

我不认为我知道有更有效的方法。大多数效率问题涉及创建不必要的对象或变量来消耗内存,这两者都不是你正在做的事情。

如果每秒运行几次,即每次刷新时,您应该只担心小代码片段的效率。

你只有六条整齐的代码,不要对自己很难。

答案 2 :(得分:0)

使用java Math库效率较低,但更具可读性。这是一个小例子:

  currentFoodAmount = Math.min(currentFoodAmount, maxFoodAmount);
  currentFoodAmount = Math.max(currentFoodAmount, 0);

效率更高,但可读性更低:

  currentFoodAmount = currentFoodAmount > 0 ? (currentFoodAmount < maxFoodAmount ? currentFoodAmount : maxFoodAmount ) : 0;

答案 3 :(得分:0)

如果你想保存线条,你可以提出一个非常难看的三元语句:

currentFoodAmount = currentFoodAmount > maxFoodAmount ? maxFoodAmount : (
    currentFoodAmount < 0 ? 0 : currentFoodAmount);

不可否认,这真的很难读,但如果您要保存代码行,那么就去吧。


有关Ternary的更多信息

三元运算符对单个条件进行操作,该条件的计算结果为truefalse,然后返回与结果对应的值。

如果您有这样的陈述,则表示意思:

x = y == 0 ? 1 : 2;

如果x,您的1变量将设置为y == 0。如果y != 0,则x将设置为2;

Java中的三元格式如下所示:

conditional ? trueValue : falseValue;

请注意,这种技术常常令人不悦,因为它通常会使代码难以阅读,而不是更详细的if / else子句。