[英]Why Does Math.pow(x,y) Count as a Double?
我正在編寫一個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));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.