Back to 111 Main Page

Mobius strip

Assignment 09

Task

Repeat A02, only this time using static methods and a user-entered radius.

Textbook: 4.4; 10.1 - 10.3
New concepts: defining methods, exception handling (try/catch)

Steps

Write a program that asks the user to enter the radius of a sphere, and then print out its details. Print out both the radius entered, as well as the diameter, circumference, surface area, and volume. See A02 if you need to review the necessary formulas.

Step 1: Methods

It would be nice to be able to reuse these calculations for other spheres, much in the way you reuse the methods written in the Math class. Write the following static methods in your class:

  • public static double getDiameter(double r)
  • public static double getCircumference(double r)
  • public static double getSurfaceArea(double r)
  • public static double getVolume(double r)

Remember that, as separate methods, these definitions will be in your class but outside of the main method. Also, you can name the parameters whatever you want--they could be radius, rather than r; these parameter names have nothing to do with the variable names you use in main.

However, the name of the method does matter. Make sure you name the methods exactly as shown, as Tamarin will be trying to call them, passing different values than you used when you call them from your main method.

You will need to provide the {bodies} for these methods that do the appropriate calculation in each case and returns the result. Ideally, the calculation of each detail will occur in only one place in your code.

Step 2: Main method

Call the four methods you wrote from your main method. Again, the methods will now perform the calculations for you, so you don't need to repeat them in main.

Also, make sure the user's input is valid. Use a try/catch block so that your program ends gracefully (rather than crashing) if the user enters a String when you ask for a number. Also, make sure that the radius length entered is not negative.

Sample Output

D:\TA\grading\A09>java ZtomaszeA09
Enter the radius of a sphere: radius
Sorry, but you must enter a valid decimal number.

D:\TA\grading\A09>java ZtomaszeA09
Enter the radius of a sphere: -20
Sorry, a sphere's radius must be >= 0.

D:\TA\grading\A09>java ZtomaszeA09
Enter the radius of a sphere: 10.00

For a sphere with radius 10.0:
Diameter = 20.0
Circumference = 62.83185307179586
Surface area = 1256.6370614359173
Volume = 4188.790204786391

What to Submit

Upload your UsernameA09.java file to Tamarin.

Grading [4 points]

1 - Compiles
Your program compiles successfully (no errors)
1.4 - Robust main
You read in the radius from the user as a double, and clearly print the results returned by the four methods (0.6). Your program does not crash (but instead ends gracefully) when given strings instead of numbers. (0.5) You do not allow negative lengths. (0.3)
1.6 - Methods
Methods are named as above and each provides the correct result when passed a radius value. (0.4 each)

FAQs

Example?
As an example of using try/catch, here is an updated version of A04's UserAge.java: SafeUserAge.java. This version will not crash when the user enters something other than a number when requested.
How do I use an exception to catch negative numbers?
You don't. (In fact, you can't.)

The only time you're going to get an exception from your Scanner is when you ask for a number and the user enters something else. (And the only way to handle this situation is by catching the InputMismatchException. You can't use an if here because, if the user enters a String rather than a number, the call to nextDouble() never even returns.)

Now, once you've successfully read in a number, your particular program might have additional requirements on the format: only even numbers, only something between 1 and 10, or (as for A09) only a number > 0. This you have to test using an if after you successfully read in the number. (You can't use an exception here; you have to test the number yourself with some sort of comparison operator.)


~ztomasze Index : TA Details: ICS111: Assignment 9
http://www2.hawaii.edu/~ztomasze
Last Edited: 12 Feb 2009
©2008 by Z. Tomaszewski.