通过使用 try/catch 块,我对错误捕获有了基本的了解,但是我的捕获方法使用户在输入无效字符后重新启动程序。
有人可以演示如何在允许程序运行的同时进行有效的错误陷阱吗?
代码 :
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