在我的代码中,我似乎无法尝试使用catch。我对此非常陌生,我必须使用它。我需要用户输入输入,然后我需要检查该输入(可能是在循环中),以检查错误是否会被异常捕获。
-Perform输入验证,确保用户输入正整数为英尺,非负十进制数为英寸,正十进制数为权重。
-Additionally,将输入的值范围约束为每个值的逻辑范围。例如,当进入英尺的高度,一个相当合理的范围将包括4-7的数值。以类似的方式限制英寸和体重。
任何帮助都将不胜感激!我觉得我要求很多,但我已经坚持了好几个星期了
正如您在我的代码中所看到的,我尝试过一些事情,比如带try catch和异常的while循环。
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double weight = 0; //positive decimal number
int heightFeet = 0; //positive int number for feet
double heightIn = 0;//nonnegative decimal number for inches
double BMI;
System.out.print("Enter height using feet space inches (e.g., 5 6.25): ");
while(true){
try {
heightFeet = Integer.parseInt(in.next());
heightIn = Double.parseDouble(in.next());
break;
}
catch (Exception e){
System.out.println("Invalid feet value. Must be an integer.");
System.out.println("Invalid inches value. Must be a decimal number.");
System.out.print("Re-enter height using feet space inches (e.g., 5 6.25): ");
}
}//end while
System.out.print("Enter weight in pounds: ");
while(true){
try {
weight = Double.parseDouble(in.next());
break;
}
catch (Exception ex){
System.out.println("Invalid pounds value. Must be positive.");
System.out.println("Re-enter weight in pounds: ");
}
}//end while
final int bmi = 704;
double heightNew = (heightFeet * 12) + heightIn;
BMI = Math.round(((weight * bmi) / (heightNew * heightNew))); //BMI
//needs to round up, not down
//constrain range of values able to be entered
//feet should be 4-7
//inches and weight similar
//end print result
System.out.println("\nheight = " + heightFeet + "'-" + heightIn + "\"");
System.out.println("weight = " + weight + " pounds");
System.out.print("body mass index = " + BMI);
in.close();
}//end main输出应该如下所示:
使用英尺空间英寸输入高度(例如,56.25):嗨
无效脚值。一定是整数。
无效英寸值。一定是十进制数。
使用英尺空间英寸重新输入高度(例如,5 6.25):0 9
无效脚值。肯定是积极的。
使用英尺空间英寸重新输入高度(例如,56.25):5.25 0
无效脚值。一定是整数。
使用英尺空间英寸重新输入高度(例如,56.25):59.25
体重以磅计:0
无效的英镑价值。肯定是积极的。
重计体重: 150.5磅
高度= 5'-9.25“
体重= 150.5磅
体重指数= 22.1
发布于 2019-04-07 02:15:12
我敢打赌你觉得自己离得太近了能尝到.而你却是。需要考虑的事项:
让我们从"Enter height using feet space inches (e.g., 5 6.25): "提示符开始。就我个人而言,我并不是while (true) {条件的坚定信徒。当然,它可以使用,但人们倾向于养成一直使用它的习惯,而且会有一段时间,练习会咬人,产生头痛。由于您需要满足所有输入的特定约束,所以使用布尔标志并不会有什么害处,而如果所有输入都通过了约束,那么就会退出 then 循环,例如:
boolean pass = false;
while (!pass) {
/* .... Your Prompt Code .... */
}
pass = false;
while (!pass) {
/* .... Your Other Prompt Code .... */
}对于heightFeet变量:
显然,如果为要提供脚的令牌点(提供的空白之前的第一个提供的值)提供了整数值以外的其他值,则会抛出并捕获一个NumberFormatException (这将包括一个包含小数点的数值)。您到控制台的消息将显示为此,用户可以再试一次,这很好。但是,如果令牌点包含小于 4的值或大于 7的值,则变量将填充该值,然后处理heightIn变量。到目前为止,还不错,但是要记住,您不希望值小于4或大于7。
对于heightIn变量:
如果下一个令牌点(所提供的空格之后的第二个提供的值)不是整数或双数值,那么将抛出一个NumberFormatException并捕获它,然后再次显示到控制台的消息,并且用户可以再试一次,这也很好。但是,如果该标记点包含一个数值,即小于 0.0 (或0)或大于 11.99,则是.该值将添加到heightIn变量中。这也没关系,但现在是在继续前进之前强制执行所需约束的时候了。您希望检查、heightFeet、和heightIn变量中包含的值,以确保它们在退出循环之前满足必要的标准。
这是使用一个或多个if语句的地方,以便检查每个变量的条件并确保它们满足约束。
/* Is feet greater than 3 and less than 8 (4 to 7) and
is inches 0 or greater and less than 12 */
If (heightFeet > 3 && heightFeet < 8 && heightIn >= 0.0d && heightIn <= 11.9375d) {
// All is Good!
pass = true; // set to true so as to exit the while loop.
}
else {
// Hmmm....something's not right.
System.out.println("The height supplied (" + hightFeet + " " +
heightIn + ") is invalid! Try again:");
}当然,您将摆脱break;语句,不再需要它。
为什么使用<= 11.9375d作为heightIn变量条件的一部分?每英尺有12英寸,所以任何超过11-15/16英寸的东西都可以被认为是1英尺。请注意,我认为没有人测量一个人到16英寸,但以防万一。这当然可以减少更多,说11.75 (11和3护卫的一英寸),如果你愿意。
现在,"Enter weight in pounds: "提示符:
尝试使用类似于上一个提示符的概念:)
https://stackoverflow.com/questions/55554536
复制相似问题