簡體   English   中英

如何在主程序中正確調用此方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM