views:

125

answers:

4

Write a JAVA program that calculates the surface area of a cylinder, C= 2( π r2) + 2 π r h, where r is the radius and h is the height of the cylinder. Allow the user to enter in a radius and a height. Format the output to three decimal places. Use the constant PI and the method pow() from the Math class.

This is what I've done so far but it can not run. Can anyone help me ?

import Java.util.Scanner;

public class Ex5 {

    public static void main (String[] args)
    {
      Scanner input=new Scanner(System.in);
      double radius,height,area;
      System.out.print("Please enter the radius of the Cylinder");
      radius = input.nextDouble();
      System.out.print("Please enter the height of the Cylinder");
      height = input.nextDouble();
      area = (4*Math.PI*radius)+2*Math.PIMath.POW(radius,2);
      System.out.println("The surface of the cylinder" + area);  
    }
}
+2  A: 

If this is the source code verbatim, then there are quite a few issues here.

First, The line:

2*Math.PIMath.POW

You forgot to put an asterisk between PI and Math, so the compiler sees PIMath as a symbol. It might be good to put parentheses to see this:

2*(Math.PI)*(Math.pow(radius, 2))

Note that Math.PI is a statically referenced constant. Math.pow, on the other hand, is a method.

All identifiers in Java are case sensitive. Math.pow exists, Math.POW does not.

Also, I've noticed that you are not using the height variable at all, so your formula calculation is incorrect.

Uri
+1  A: 

As a matter of personal taste, I tend to add parens to related statements. It makes code more readable, and can help with debugging later.

I believe that the error is in the line:

area = (4*Math.PI*radius)+2*Math.PIMath.POW(radius,2);

I would change it to:

area = (2 * Math.PI * Math.pow(radius, 2)) + (2 * Math.PI * radius * height);

There is a typo in the original: Java is case-sensitive, and thus Math.POW() is different, programmically, than Math.pow(). Also, you cannot multiply by concatenating the commands; rather you must put an asterisk between them.

That should get it to compile.

Hawkcannon
I think he needs to add the *height to the second part of the expression or this cylinder will be a two-sided disk.
Uri
Ah, that's right. Good catch. Thanks!
Hawkcannon
+2  A: 

It might just be a typo, but you seem to have either copied your code wrong, or typed it in wrong. you have the line

area = (4*Math.PI*radius)+2*Math.PIMath.POW(radius,2);

Notice the section

*Math.PIMath

you need to have a * in between PI and Math.

Also for future reference, did you know that you can add this line to the top of your code:

import static java.lang.Math.*;

Once done, you can change that line to:

area = (4*PI*radius)+2*PI*POW(radius,2);

Then again,some people may not like this. But I think it makes for nicer code to directly import a few lines like that.

Leif Andersen
+1  A: 

You can spare yourself the need to use Math.pow() by substituting radius * radius. Even better, factor 2πr out of the formula for the area of a Cylinder. For example, A = 2πr2 + 2πrh = 2πr(r + h).

double area = 2 * Math.PI * radius * (radius + height);
trashgod