You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java BMI/BMR计算器如何添加输入范围校验的if判断语句

BMI计算器非法值校验修改方案

校验逻辑放置位置说明

你需要在获取到用户输入的vikt参数之后、调用计算方法之前插入判断逻辑,只要参数不符合0.5~2.2的区间要求,就跳过计算直接输出错误提示。
这里提供两种可选实现方式:

方案1:输完全部参数后统一校验

适合需要收集全部输入再统一校验的场景,修改步骤:

  1. 在用户输入完体重、身高、年龄三个参数后,新增if判断
  2. 把原有的计算、输出结果的代码全部移入if的合法分支
  3. else分支输出错误提示
    核心修改片段:
//Användaren matar in sin data    
System.out.print("Ange personens vikt (kg): ");
double vikt = input.nextDouble();
System.out.print("Ange personens längd (m): ");
double längd = input.nextDouble();
System.out.print("Ange personens ålder: ");
double ålder = input.nextDouble();

// 新增vikt参数校验逻辑
if (vikt >= 0.5 && vikt <= 2.2) {
    System.out.println(" ");
    System.out.println("Beräknat BMI för både män och kvinnor är " + bmi(vikt, längd));
    System.out.println("Beräknat BMR för män är: " + kalorier_Män(vikt, längd, ålder));
    System.out.println("Beräknat BMR för kvinnor är: "+ kalorier_Kvinnor(vikt, längd, ålder));
    System.out.println(" ");
} else {
    System.out.println("nope you did it wrong");
}

System.out.print("Fortsätta? (j/n): ");
fortsätt = input.next().charAt(0);

方案2:输入体重后立刻校验

适合减少无效输入的场景,体重输入非法时直接提示,不需要再输入身高和年龄:
核心修改片段:

do 
{  
    //Användaren matar in sin data    
    System.out.print("Ange personens vikt (kg): ");
    double vikt = input.nextDouble();
    // 立刻校验体重合法性
    if (vikt < 0.5 || vikt > 2.2) {
        System.out.println("nope you did it wrong");
        System.out.print("Fortsätta? (j/n): ");
        fortsätt = input.next().charAt(0);
        // 跳过后续输入和计算,直接进入下一轮循环判断
        continue;
    }
    // 体重合法才需要输入后续参数
    System.out.print("Ange personens längd (m): ");
    double längd = input.nextDouble();
    System.out.print("Ange personens ålder: ");
    double ålder = input.nextDouble();
    
    // 原有计算输出逻辑不变
    System.out.println(" ");
    System.out.println("Beräknat BMI för både män och kvinnor är " + bmi(vikt, längd));
    System.out.println("Beräknat BMR för män är: " + kalorier_Män(vikt, längd, ålder));
    System.out.println("Beräknat BMR för kvinnor är: "+ kalorier_Kvinnor(vikt, längd, ålder));
    System.out.println(" ");
    System.out.print("Fortsätta? (j/n): ");
    fortsätt = input.next().charAt(0);
}
while (fortsätt != 'n');

完整修改后代码(方案2版本)

import java.util.Scanner;

public class BmiBmrKalkylator {
    public static void main(String[] args) {
        Scanner input = new Scanner (System.in);
        
        // 引导文字
        System.out.println("Beräkna ditt BMI");
        System.out.print("Tryck j för att starta: " );    
        char fortsätt = input.next().charAt(0);
        System.out.println(" ");

        do 
        {  
            //用户输入数据
            System.out.print("Ange personens vikt (kg): ");
            double vikt = input.nextDouble();
            // 体重合法性校验
            if (vikt < 0.5 || vikt > 2.2) {
                System.out.println("nope you did it wrong");
                System.out.print("Fortsätta? (j/n): ");
                fortsätt = input.next().charAt(0);
                continue;
            }
            System.out.print("Ange personens längd (m): ");
            double längd = input.nextDouble();
            System.out.print("Ange personens ålder: ");
            double ålder = input.nextDouble();
            
            
            System.out.println(" ");
            System.out.println("Beräknat BMI för både män och kvinnor är " + bmi(vikt, längd));
            System.out.println("Beräknat BMR för män är: " + kalorier_Män(vikt, längd, ålder));
            System.out.println("Beräknat BMR för kvinnor är: "+ kalorier_Kvinnor(vikt, längd, ålder));
            System.out.println(" ");
            System.out.print("Fortsätta? (j/n): ");
            fortsätt = input.next().charAt(0);
        }

        while (fortsätt != 'n');
        input.close();
    }

    static double bmi(double vikt, double längd){
        double bmiMänochKvinnor;
        
        bmiMänochKvinnor = (1.3 * vikt) / Math.pow(längd, 2.5);
        return   bmiMänochKvinnor;

    } 

    static double kalorier_Män (double vikt,double längd,double ålder){
        double manBmr; 
            
        manBmr = (9.99 * vikt) + (6.25 * längd) - (4.92 * ålder) + 5;
        return manBmr;

    }

    static double kalorier_Kvinnor (double vikt,double längd,double ålder){
        double kvinnaBmr; 
        
        kvinnaBmr = (9.99 * vikt) + (6.25 * längd) - (4.92 * ålder) - 161;
        return kvinnaBmr;
    }
}

内容的提问来源于stack exchange,提问作者Alysia Nonor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:18:04