首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使代码与尝试-捕捉一起工作?BMI例外

如何使代码与尝试-捕捉一起工作?BMI例外
EN

Stack Overflow用户
提问于 2019-04-07 00:07:02
回答 1查看 712关注 0票数 0

在我的代码中,我似乎无法尝试使用catch。我对此非常陌生,我必须使用它。我需要用户输入输入,然后我需要检查该输入(可能是在循环中),以检查错误是否会被异常捕获。

-Perform输入验证,确保用户输入正整数为英尺,非负十进制数为英寸,正十进制数为权重。

-Additionally,将输入的值范围约束为每个值的逻辑范围。例如,当进入英尺的高度,一个相当合理的范围将包括4-7的数值。以类似的方式限制英寸和体重。

任何帮助都将不胜感激!我觉得我要求很多,但我已经坚持了好几个星期了

正如您在我的代码中所看到的,我尝试过一些事情,比如带try catch和异常的while循环。

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-07 02:15:12

我敢打赌你觉得自己离得太近了能尝到.而你却是。需要考虑的事项:

让我们从"Enter height using feet space inches (e.g., 5 6.25): "提示符开始。就我个人而言,我并不是while (true) {条件的坚定信徒。当然,它可以使用,但人们倾向于养成一直使用它的习惯,而且会有一段时间,练习会咬人,产生头痛。由于您需要满足所有输入的特定约束,所以使用布尔标志并不会有什么害处,而如果所有输入都通过了约束,那么就会退出 then 循环,例如:

代码语言:javascript
复制
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语句的地方,以便检查每个变量的条件并确保它们满足约束。

代码语言:javascript
复制
/* 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: "提示符:

尝试使用类似于上一个提示符的概念:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55554536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档