繁体   English   中英

初始化变量

[英]Initializing variable

该程序基本上要求用户输入其BMR和性别。 然后,他们被要求选择一个活动级别(如果他们选择了错误的活动级别,我需要打印“请输入一个有效的选择”)。 女性和男性具有不同的活动因子。 我遇到错误“变量ActivityFactor必须初始化”。 如何修复我的代码? 谢谢

        iBMR = new Scanner(System.in);
        Scanner iGender = new Scanner(System.in);
        Scanner iActivity = new Scanner(System.in);
        String AcFactor;
        double ActivityFactor ;
        double TDEE;
        //User Input
        System.out.println("Please enter your name: ");
        String inName = iName.next(); 
        System.out.println("Please enter your BMR: ");
        String inBMR = iBMR.next();
        double nBMR = Double.parseDouble(inBMR);
        System.out.println("Please enter your Gender");
        String inGender = iGender.next();

        System.out.println("Select Your Activity Level");
        System.out.println("[A] Resting (Sleeping,Reclining)");
        System.out.println("[B] Sedentary (Minimal Movement)");
        System.out.println("[C] Light (Sitting, Standing)");
        System.out.println("[D] Moderate (Light Manual Labor, Dancing, Riding Bike)");
        System.out.println("[E] Very Active (Team Sports, Hard Manual Labor)");
        System.out.println("[F] Extremely Active (Full-time Athlete, Heavy Manual Labor)");
        System.out.println("Enter the letter corrresponding to your activity level: ");
        String inActivity = iActivity.next();

        //CalculationFemale
        if(inActivity.equalsIgnoreCase("A")&& inGender.equalsIgnoreCase("F"))
        {
            ActivityFactor = 1.0;
        }
        else if(inActivity.equalsIgnoreCase("B")&& inGender.equalsIgnoreCase("F"))
        {
           ActivityFactor = 1.3;
        }
        else if(inActivity.equalsIgnoreCase("C")&& inGender.equalsIgnoreCase("F"))
        {
           ActivityFactor = 1.5;
        }
        else if(inActivity.equalsIgnoreCase("D")) && (inGender.equalsIgnoreCase("F"))
        {
           ActivityFactor = 1.6;
        }
        else if(inActivity.equalsIgnoreCase("E")&& inGender.equalsIgnoreCase("F"))
        {
           ActivityFactor = 1.9;
        }
        else if(inActivity.equalsIgnoreCase("F")&& inGender.equalsIgnoreCase("F"))
        {
           ActivityFactor = 2.2;
        }
        else
        {

            System.out.println("Please enter a valid choice!");
        }

        //CalculationMale
        if(inActivity.equalsIgnoreCase("A")&& inGender.equalsIgnoreCase("M"))
        {
            ActivityFactor = 1.0;
        }
        else if(inActivity.equalsIgnoreCase("B")&& inGender.equalsIgnoreCase("M"))
        {
           ActivityFactor = 1.3;
        }
        else if(inActivity.equalsIgnoreCase("C")&& inGender.equalsIgnoreCase("M"))
        {
           ActivityFactor = 1.6;
        }
        else if(inActivity.equalsIgnoreCase("D")&& inGender.equalsIgnoreCase("M"))
        {
           ActivityFactor = 1.7;
        }
        else if(inActivity.equalsIgnoreCase("E")&& inGender.equalsIgnoreCase("M"))
        {
           ActivityFactor = 2.1;
        }
        else if(inActivity.equalsIgnoreCase("F")&& inGender.equalsIgnoreCase("M"))
        {
           ActivityFactor = 2.4;
        }
        else
        {

           System.out.println("Please enter a valid choice!");
        }

        //TDEE
        double TD(ActivityFactor * BMR);

**感谢您提供所有答案。 我确实意识到,如果所有的if / if else条件都没有通过,则“ else”将没有ActivityFactor的值。 感谢所有的答复,我现在意识到我追求这一目标的方式将行不通。 有人可以概述一下我如何编写这样的程序:询问用户名/性别/ bmr,然后要求选择活动级别并根据用户是男性还是女性以及他们对男性/女性的选择来分配活动因素活动水平?谢谢

您只需要将ActivityFactor设置为一些虚拟值以确保已初始化:

double ActivityFactor = -1;

希望有帮助!

Java编译器确定您正在使用潜在的未初始化变量:

double TD(ActivityFactor * BMR);

这是因为您具有使此变量保持统一的代码路径:

else
{

   System.out.println("Please enter a valid choice!");
}

因此,有两个选项:在声明它的地方初始化该变量:

 double ActivityFactor = 0.0;

或者设置所有代码路径,以确保在使用此变量之前必须先对其进行初始化。 就您而言,这意味着您需要将init添加到以下else块中:

else
{
   ActivityFactor = 0.0;
   System.out.println("Please enter a valid choice!");
}

我建议您第一个选择。

您必须在if-else语句之前给值ActivityFactor。 如果您的任何“如果”均未操作,则Java无法在以下位置知道ActivityFactor

double TD(ActivityFactor * BMR);

声明。

像这样声明和初始化:

double ActivityFactor = 0.0;

必须在使用前初始化ActivityFactor。 您的代码不保证这一点。 最简单的方法是在声明中添加默认值:

double ActivityFactor = 10.0; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM