我通过使用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
代码重复是你的敌人。代码重复是你的敌人。代码重复是...哦,等等。笑话分开:请提取阅读输入到一种方法的说明...错误信息很有趣,我很欣赏这一点。但读3次就像听同样的笑话3次。修改更糟糕...... – ppeterka 2013-02-26 19:39:52
你需要添加一个循环,像'while(entryNotValid){askForANumber(); }',或'while(true){askForANumber();}打破; //只有在前一行没有被抛出的时候达到}'... – assylias 2013-02-26 19:40:45