# geometry in java

Theresa Marlin
Ranch Hand
Posts: 49
I am learning how to create classes, and I had to create a class with a program to test it that finds the volume and surface area of a sphere, cylinder, and cone.
I am having some problems- for my cone Volume, it is returning everything as 0. For the program, I have
counter = 1;

System.out.println("Cone Volume");

while (counter <= 10)
{
double radius = Math.random();
System.out.println("Radius: " + radius);
double h = Math.random();
System.out.println("H: " + h);
double coneVolume = yourTurnClass.coneVolume(radius,h);
System.out.println("answer: " + coneVolume);
counter++;
}

________

For the class I have:

public static double coneVolume(double radius, double h)
{

answer = (1/3*((Math.PI)*((radius*radius)*(h))));

return answer;
}

_________

Am I messing something up with pi?

Another problem I have is with coneSurface- I have formula:

public static double coneSurface(double radius, double h)
{

answer = (Math.PI*(radius*(Math.sqrt(h*h + radius*radius) + radius*radius)));
return answer;
}

and program

while (counter <= 10)
{
double radius = Math.random();
System.out.println("Radius: " + radius);
double h = Math.random();
System.out.println("H: " + h);
double coneSurface = yourTurnClass.coneSurface(radius,h);
System.out.println("answer: " + coneSurface);
counter++;
}

and my answers are coming out a bit off. Did I miss my formula up, or call something wrong?

My final problem is with the sphere volume- I have class

public static double sphereVolume(double radius)
{

answer = ((4/3)*(Math.PI)*(radius*radius*radius));
return answer;

}

and program

while (counter <= 10)
{
double radius = Math.random();
System.out.println("Radius: " + radius);
double sphereVolume = yourTurnClass.sphereVolume(radius);
System.out.println("answer: " + sphereVolume);
counter++;
}

_______

with answers slightly wrong again. Is there something I am doing wrong that is the same with all three of these?

THANK YOU SO MUCH FOR YOUR HELP!!!

Janeice DelVecchio
Saloon Keeper
Posts: 1809
12
Did you look at the API for Math.random()?

It generates a double between 0 and 1. Most people multiply it by a number (say 10) to get a random number (say 0 through 10).

Your problems might stem from the numbers being too small to calculate a valid volume, surface, etc....

Just a thought...

Rob Spoor
Sheriff
Posts: 20661
65
Therese, please Use Code Tags.

fred rosenberger
lowercase baba
Bartender
Posts: 12196
35
the problem is here: answer = (1/3*((Math.PI)*((radius*radius)*(h))));

your '1' is an int literal. your '3' is an int literal. when you have an int divided by an int, the result is...an int. 1 / 3 = 0 in integer division.

Try changing it to "answer = (1.0/3*((Math.PI)*((radius*radius)*(h))));

update: I see that same issue with your "4/3" as well...

Janeice DelVecchio
Saloon Keeper
Posts: 1809
12
It's almost like Java failed out of elementary division. LOL

Campbell Ritchie
Sheriff
Posts: 50180
79
Janeice DelVecchio wrote:It's almost like Java failed out of elementary division. LOL
No, it was given elementary division and stayed with what it was familiar with

fred rosenberger
lowercase baba
Bartender
Posts: 12196
35
There are plenty of times when you WANT the integer division. when combined with the modulus operator, you can do some cool stuff.