I'm writing a Java program to calculate how much food it will take to get a monster to a certain level in My Singing Monsters. When I run the program, it says, "cannot convert from double to int". Can someone explain why this is? Here's the program.
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.");
}
Math.pow return double and you assigning double value to int this is why it is giving error. You have to downcast it. Like
You'll have to do this:
As you can see in the documentation,
Math.pow()
returns adouble
by design, but if you need anint
then an explicit cast must be performed.I think there's typically hardware support on most modern processors for doing floating-point powers, but not integers. Because of that, for a general power, it's actually faster to do
Math.power
with adouble
and then convert it back to anint
.However, in this case there's a faster way to do it for ints. Since you're doing a power of 2, you can just use the bitwise left-shift operator instead:
As Rhymoid pointed out in his comment, that expression can be further simplified to remove the
1
: