Error trapping/Exception Handling
<p>//So I have a basic grasp of error trapping by using try/catch blocks, however my method of //trapping makes the user restart the program after an invalid character is inputed. Can //someone demonstrate how to make an effective error trap while allowing the program to //run?</p>

<p>Code :</p>

<pre><code>import java.io.*; //Input/Output command; this part is ESSENTIAL

class FindingTheSurfaceAreaOfAPyramid2
{
    public static void main (String[] args) throws IOException
    {
        BufferedReader myInput = new BufferedReader (new InputStreamReader (System.in));   //Loading the Text Box

        //Defining variables and string 'nicknames'
        String stringBaseLength, stringBaseWidth, stringTriangleHeight;  //named strings for organization's sake
        double convertToNumL, convertToNumW, convertToNumH, total1, total2, total3;   //'double' is nessesary for decimal answers as they commonly happen, using 'int' will round the result; inaccurate!
        //used in 'if' statements
        boolean realNumber = true;
        boolean realNumber2 = true;
        boolean realNumber3 = true;

        //First message and notice
        System.out.println ("Note: This program is compatible with ONLY rectangular based pyramids.");

        //Question 1: Units
        System.out.println ("First off, what unit is this pyramid in? (ex. cm, mm, in, ft. etc.)");
        String Units = myInput.readLine ();

        //Question 2: Length
        System.out.println ("1) Please enter the length of the base.");
        stringBaseLength = myInput.readLine ();
        try
        {
            Integer.parseInt (stringBaseLength);
            System.out.println ("Your base length is " + stringBaseLength + " " + Units + ".");  //this line is restating the the input as well as the unit of measurement
        }
        catch (NumberFormatException e)
        {
            //If they catch anything other than numbers, it would tell the user
            System.out.println ("That was either a smart remark, a negative number or jibberish.");
            System.out.println ("As a consequence, you have to restart the program.");
            realNumber = false;


        }
        if (realNumber)
        {
            //Question 3: Width
            System.out.println ("2) Please enter the width of the base");
            stringBaseWidth = myInput.readLine ();


            try
            {
                Integer.parseInt (stringBaseWidth);
                System.out.println ("Your base width is " + stringBaseWidth + " " + Units + ".");

            }
            catch (Exception e)
            {
                System.out.println ("That was either a smart remark, a negative number or jibberish.");
                System.out.println ("As a consequence, you have to restart the program.");
                realNumber2 = false;

            }
            if (realNumber2)
            {
                //Question 4: Height
                System.out.println ("3) Please enter the height of the triangle face.");
                stringTriangleHeight = myInput.readLine ();

                try
                {
                    Integer.parseInt (stringTriangleHeight);
                    System.out.println ("Your triangle height is " + stringTriangleHeight + " " + Units + ".");
                }
                catch (Exception e)
                {
                    System.out.println ("That was either a smart remark, a negative number or jibberish.");
                    System.out.println ("As a consequence, you have to restart the program.");
                    realNumber3 = false;
                }
                if (realNumber3)
                {

                    //Converting the input to 'double' to express the answer(s) in decimal format
                    convertToNumH = Double.parseDouble (stringTriangleHeight);
                    convertToNumL = Double.parseDouble (stringBaseLength);
                    convertToNumW = Double.parseDouble (stringBaseWidth);
                    total1 = convertToNumL * convertToNumW;         //base area, length x width
                    total2 = convertToNumL * convertToNumH / 2;     //triangle area using sidelength 'length', base x height / 2
                    total3 = convertToNumW * convertToNumH / 2;     //triangle area using sidelength 'width  ,  base x height / 2

                    //Calculations and concluding sentences
                    System.out.println ("The area of the triangle with base length " + convertToNumL + " cm is " + total2 + Units + "^2.");
                    System.out.println ("The area of the triangle with base length " + convertToNumW + " cm is " + total3 + Units + "^2.");
                    System.out.println ("The base area is " + total1 + " " + Units + "^2.");
                    System.out.println ("The total surface area is " + (total1 + total2 + total2 + total3 + total3) + " " + Units + "^2.");
                }
            }
        }
    }
} //end
</code></pre>
