为什么Math.pow(x,y)算作双重?
我正在编写一个Java程序来计算在My Singing Monsters中将怪物提升到一定水平需要多少食物。 当我运行程序时,它说,“无法从double转换为int”。 有人可以解释为什么会这样吗? 这是程序。
int totalFood = 0; int level = 1; int levelMeal = 5*(Math.pow(2,level-1)); int mealNumber = 1; int levelGoal = 1; while(level != levelGoal) { if(mealNumber != 5) { mealNumber += 1; totalFood += levelMeal; } else if(mealNumber == 5) { mealNumber = 0; level += 1; } } if(level == levelGoal) { println("The total amount of food required for a monster to reach level " + levelGoal + " is " + totalFood + " food."); }
你必须这样做:
int levelMeal = (int) (5*(Math.pow(2,level-1))); ^ this is a cast
正如您在文档中看到的那样, Math.pow()
按设计返回一个double
,但是如果需要int
则必须执行显式转换。
我认为大多数现代处理器通常都支持硬件支持浮点功率,但不支持整数。 因此,对于一般的权力,使用double
执行Math.power
实际上更快,然后将其转换回int
。
但是,在这种情况下,有更快的方法来执行它。 由于您的功率为2,因此您可以使用按位左移运算符 :
int levelMeal = 5*(1<<(level-1));
正如Rhymoid在他的评论中所指出的,该表达式可以进一步简化以删除1
:
int levelMeal = 5<<(level-1);
Math.pow返回double,你将double值赋给int,这就是它给出错误的原因。 你必须贬低它。 喜欢
int levelMeal = (int)5*(Math.pow(2,level-1));