在我的我的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;
}
}
}
答案 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);
不可否认,这真的很难读,但如果您要保存代码行,那么就去吧。
三元运算符对单个条件进行操作,该条件的计算结果为true
或false
,然后返回与结果对应的值。
如果您有这样的陈述,则表示意思:
x = y == 0 ? 1 : 2;
如果x
,您的1
变量将设置为y == 0
。如果y != 0
,则x
将设置为2
;
Java中的三元格式如下所示:
conditional ? trueValue : falseValue;
请注意,这种技术常常令人不悦,因为它通常会使代码难以阅读,而不是更详细的if
/ else
子句。