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.");
}
You'll have to do this:
int levelMeal = (int) (5*(Math.pow(2,level-1)));
^
this is a cast
As you can see in the documentation, Math.pow()
returns a double
by design, but if you need an int
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 a double
and then convert it back to an int
.
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:
int levelMeal = 5*(1<<(level-1));
As Rhymoid pointed out in his comment, that expression can be further simplified to remove the 1
:
int levelMeal = 5<<(level-1);
Math.pow return double and you assigning double value to int this is why it is giving error. You have to downcast it. Like
int levelMeal = (int)5*(Math.pow(2,level-1));