[英]How do I properly call this method in my main program?
這是一個BMI計算器,可根據用戶選擇的選項計算英制或公制BMI。 然后,我需要顯示其BMI狀態(體重過輕,超重,肥胖)。 我的Person類中有一個方法要在main方法中調用,但是Visual Studio在bmi變量下划線並說“使用未分配的局部變量”
如何解決變量問題?
這是類代碼:
class Person
{
double Height { get; set; }
double Weight { get; set; }
double Inches { get; set; }
double Bmi { get; set; }
public Person()
{
}
public Person(double height, double weight, double bmi)
{
Height = height;
Weight = weight;
Bmi = bmi;
}
public Person (double height, double weight, double inches, double bmi)
{
Height = height;
Weight = weight;
Inches = inches;
Bmi = bmi;
}
//calculates BMI using metric formula
public static double CalcMetric(double height, double weight)
{
double bmi = weight / Math.Pow(height, 2);
return bmi;
}
//calculates BMI using imperial formula
public static double CalcImperial(double height, double weight)
{
double bmi = weight / Math.Pow(height, 2) * 703;
return bmi;
}
public void Status(double bmi)
{
if (bmi < 18.5)
{
Console.WriteLine("Your BMI status is underweight.");
}
else
if (bmi < 24.9)
{
Console.WriteLine("Your BMI status is normal.");
}
else
if (bmi < 29.9)
{
Console.WriteLine("Your BMI status is overweight.");
}
else
if (bmi > 30)
{
Console.WriteLine("Your BMI status is obese.");
}
}
}
}
這是主程序
class Program
{
static void Main(string[] args)
{
Console.BackgroundColor = ConsoleColor.White; //set background
Console.Clear();
Console.ForegroundColor = ConsoleColor.Black; //set foreground
string inputHeight;
string inputWeight;
string aValue;
double choice;
double height;
double weight;
double bmi;
Person p = new Person();
Console.WriteLine("Welcome to BMI Calculator. \nEnter 1 for imperial calculator, 2 for metric calculator or 3 to quit.");
aValue = Console.ReadLine();
choice = double.Parse(aValue);
if (choice == 1)
{
Console.WriteLine("Enter height in inches: ");
inputHeight = Console.ReadLine();
Console.WriteLine("Enter weight in lbs: ");
inputWeight = Console.ReadLine();
height = double.Parse(inputHeight);
weight = double.Parse(inputWeight);
Console.WriteLine("Your BMI is: " + Person.CalcImperial(height, weight));
}
else
if (choice == 2)
{
Console.WriteLine("Enter height in meters: ");
inputHeight = Console.ReadLine();
Console.WriteLine("Enter weight in kilos: ");
inputWeight = Console.ReadLine();
height = double.Parse(inputHeight);
weight = double.Parse(inputWeight);
Console.WriteLine("Your BMI is: " + Person.CalcMetric(height, weight));
}
else
if (choice == 3)
{
Console.WriteLine("Goodbye!");
}
p.Status(bmi);
Console.ReadKey();
}
}
您因為double bmi;
報錯double bmi;
未初始化。 根據准則,方法成員需要在方法中初始化,因此不能僅僅聲明它。 所以你需要這樣
double bmi=0;
檢查一下: C#未初始化變量是否危險?
您的代碼中還有一個問題,
//in your person class
public void Status(double bmi)
{
}
你正在做p.Status(ref bmi);
,您將不會獲得更新的值,因為double是在函數中完成的值類型更改不反映實際值,您需要這樣做,
//in your person class
public void Status(ref double bmi)
{
}
借助ref,您將從functio中獲得價值。
更好的解決方案是從函數返回值
//in your person class
public double Status()
{
double bmi=0;
//rest of code
return bmi;
}
在主bmi = p.Status();
Bmi是person類的內部成員(默認情況下),因此您不能直接使用BMI而是使用
Status(CalcMetric); or `status(CalcImperial);` *according to your requirement*
使這些函數在函數調用期間返回BMI的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.