0

The program basically ask user to input their BMR, and gender. Then they're ask to choose an activity level ( If they choose the wrong one, I need to print" Please enter a valid choice"). Female and male have different activity factor. I'm encountering an error of " Variable ActivityFactor must be initialized." How can I fix my code? Thanks

        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);

**Thanks you for all the answer. I do realize that if all the if/if else conditions do not go through, the " else" won't have a value for ActivityFactor. Thanks to all the reply, I now realize my way of pursuing this won't work. Could someone give me an outline of how I can code such a program that ask for the user name/gender/bmr then ask to select a activity level and assign an activity factor depending on whether the user is a male/female and their selection of activity level ?Thanks

4

4 回答 4

0

您只需将 ActivityFactor 设置为某个虚拟值以确保它已初始化:

double ActivityFactor = -1;

希望有帮助!

于 2012-12-15T21:14:38.060 回答
0

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!");
}

我建议你第一个选择去。

于 2012-12-15T21:19:27.923 回答
0

您必须在 if-else 语句之前给出一个值 ActivityFactor。如果您的任何 'if' 没有操作,java 无法知道 ActivityFactor 在

double TD(ActivityFactor * BMR);

陈述。

像这样声明和初始化:

double ActivityFactor = 0.0;
于 2012-12-15T21:19:50.043 回答
0

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

double ActivityFactor = 10.0; 
于 2012-12-15T21:20:00.210 回答