初始化变量
问题描述:
程序基本上要求用户输入他们的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”对于ActivityFactor将没有值。感谢所有的答复,我现在意识到我的追求这种方式是行不通的。有人可以给我一个纲要,告诉我如何编写一个要求用户名/性别/ bmr的程序,然后要求选择一个活动级别并根据用户是男性还是女性以及他们选择?活动水平谢谢
答
你只需要ActivityFactor设置一些虚拟值,以确保它的初始化:
double ActivityFactor = -1;
希望帮助!
答
Java编译器识别出您正在使用可能未初始化的变量:
double TD(ActivityFactor * BMR);
这是因为你的代码路径,允许这个变量保持未初始化:
else
{
System.out.println("Please enter a valid choice!");
}
所以,有两种选择:初始化你声明的变量:
double ActivityFactor = 0.0;
或者制作所有的代码路径,以便这个变量在使用前必须被初始化。在你的情况下,它意味着你需要初始化添加到以下else
块:
else
{
ActivityFactor = 0.0;
System.out.println("Please enter a valid choice!");
}
我建议你第一个选项中去。
答
您必须在if-else语句之前提供一个值ActivityFactor。如果你的任何'如果不操作,java不能知道ActivityFactor在
double TD(ActivityFactor * BMR);
声明。
申报和initilaze这样的:
double ActivityFactor = 0.0;
答
ActivityFactor在使用前进行初始化。您的代码不能保证。最简单的方法是在声明中添加默认值:
double ActivityFactor = 10.0;