## Assignment 09

Repeat A02, only this time using static methods and user input.

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 a base and height of a right triangle, and then print out its details. Print out both the base and height the user entered, as well as the hypotenuse, the perimeter, the area, and the slope of the hypotenuse. 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 triangles, much in the way you reuse the methods written in the `Math` class. Write the following static methods in your class:

• public static double getHypotenuse(double base, double height)
• public static double getPerimeter(double base, double height)
• public static double getArea(double base, double height)
• public static double getHypotenuseSlope(double base, double height)

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 `b` and `h`, rather than `base` and `height`; 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. You may be able to reuse one method from another; for example, you can call `getHypotenuse` from `getPerimeter`, rather than recalculating the length of the hypotenuse in `getPerimeter`. Ideally, the calculation of each detail will occur in only one place in your code.

Clarification (26 Sept): As mentioned, the methods should return their results. They should not do any printing themselves; all your printing will occur only in `main`. (If you already submitted code that prints from the methods, you won't lose any points though.)

#### 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 all lengths entered are greater than 0. (You can either check each length as it is entered, or check both at the same time if you want to.)

#### Sample Output

```D:\TA\grading\A09>java ZtomaszeA09
This program provides the details of a right triangle.
Enter the length of the triangle's base: 12
Enter the length of the triangle's height: feet
Sorry, but you must enter a valid decimal number.

This program provides the details of a right triangle.
Enter the length of the triangle's base: 1000.04
Enter the length of the triangle's height: -90
Sorry, a triangle's sides must each have a length greater than 0.

This program provides the details of a right triangle.
Enter the length of the triangle's base: 7.5
Enter the length of the triangle's height: 18

Base: 7.5
Height: 18.0
Hypotenuse: 19.5
Perimeter: 45.0
Area: 67.5
Slope of hypotenuse: 2.4
```

### What to Submit

Upload your `UsernameA09.java` file to Tamarin.

1 - Compiles
Your program compiles successfully (no errors)
1.4 - Robust `main`
You read in the base and height from the user, 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 lengths of 0 or less. (0.3)
1.6 - Methods
Methods are named as above and each provides the correct result when given a base and height. (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: 23 Sep 2008 ©2008 by Z. Tomaszewski.