为什么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));