簡體   English   中英

使用 c# 中的開關將攝氏度轉換為華氏度

[英]Converting Celsius degrees to Fahrenheit degrees using switch in c#

我是一名初學者 c# 程序員,試圖編寫一個向用戶顯示菜單的簡單應用程序。 當用戶在運行時選擇選項 1 時,程序會列出從 0 到 100 攝氏度轉換為華氏度的值。 選擇選項 2 時,程序會計算並顯示一個以華氏度為單位的 0 到 212 度之間的值列表,轉換為攝氏度。 在相關方法中為值 100 和 212 使用常量。

問題是我只輸入選項而不是轉換結果。 這是我到目前為止所做的:{

class TemperatureConverter
{
    private const int columns = 1;
    /// <summary>
    ///
    ///
    /// 
    /// </summary>

    public TemperatureConverter()
    {
        Start();
    }

    /// <summary>
    /// 
    /// </summary>
    public void Start()

    {

        while (true)

        {
            int choice = ShowMenu();
            switch (choice)
            {
                case 0:
                    return;
                case 1:

                    Console.WriteLine();
                    while (true)
                    {

                        Console.Write("Enter Celsius:");

                        Console.WriteLine();
                        if (double.TryParse(Console.ReadLine(), out double celsius))
                        {
                            Console.WriteLine(ShowTableCelsiusToFahrenheit(celsius));
                            Console.WriteLine();
                            break;
                        }
                        
                    }
                    break;
                case 2:
                    Console.WriteLine();
                    while (true)
                    {
                        Console.Write("Enter Fahrenheit:");
                        if (double.TryParse(Console.ReadLine(), out double fahrenheit))
                        {
                            Console.WriteLine(ShowTableFahrenheitToCelsius(fahrenheit));
                            Console.WriteLine();
                            break;
                        }
                    }
                    break;
                default:
                    Console.WriteLine("You must enter 1 to convert to Celsius or 2 to convert to Fahrenheit or 0 to exit!");
                    break;
            }
        }
    }

    private double CelsiusToFarenheit(double celsius) => celsius * 9.0 / 5.0 + 32.0;
    private double FahrenheitToCelsius(double fahrenheit) => (fahrenheit - 32.0) * 5.0 / 9.0;
    private string ShowTableCelsiusToFahrenheit(double celsius) => $"{celsius}°C is {CelsiusToFarenheit(celsius)}°F";
    private string ShowTableFahrenheitToCelsius(double fahrenheit) => $"{fahrenheit}°F is {FahrenheitToCelsius(fahrenheit)}°C";

    public int ShowMenu()
    {
        int width = 28;
        while (true)
        {
            Console.WriteLine("MAIN MENU");
            Console.WriteLine("".PadLeft(width, '-'));
            Console.WriteLine("Celsius to Fahrenheit".PadRight(width - 3) + ": 1");
            Console.WriteLine("Fahrenheit to Celsius".PadRight(width - 3) + ": 2 ");
            Console.WriteLine("Exit the program".PadRight(width - 3) + ": 0 ");
            Console.WriteLine("".PadLeft(width, '-'));
            Console.WriteLine();
            Console.WriteLine("Your choice: ");
            string line = Console.ReadLine();
            if (int.TryParse(line, out int choice))
            {
                return choice;
            }
        }
    }

}

}

我已經為您做了一些重構,以便您可以了解如何編寫這種代碼。 我試圖從邏輯上提取這些部分,因此程序的每個部分都有明確的責任和流程。

我還從構造函數中刪除了代碼的自動運行。 在構造函數中運行代碼而不是設置 class 的初始條件的代碼是個壞主意。

這是重構的代碼:

void Main()
{
    var tc = new TemperatureConverter();
    tc.Start();
}

class TemperatureConverter
{
    public void Start()
    {
        while (true)
        {
            int choice = ShowMenu();
            switch (choice)
            {
                case 0:
                    return;
                case 1:
                    Console.WriteLine();
                    while (true)
                    {
                        Console.Write("Enter Celsius:");
                        if (double.TryParse(Console.ReadLine(), out double celsius))
                        {
                            Console.WriteLine(GetCelsiusToFahrenheitLine(celsius));
                            Console.WriteLine();
                            break;
                        }
                    }
                    break;
                case 2:
                    Console.WriteLine();
                    while (true)
                    {
                        Console.Write("Enter Fahrenheit:");
                        if (double.TryParse(Console.ReadLine(), out double fahrenheit))
                        {
                            Console.WriteLine(GetFahrenheitToCelsiusLine(fahrenheit));
                            Console.WriteLine();
                            break;
                        }
                    }
                    break;              
                default:
                    Console.WriteLine("You must enter 1 to convert to Celsius or 2 to convert to Fahrenheit or 0 to exit!");
                    break;
            }
        }
    }

    private double CelsiusToFarenheit(double celsius) => celsius * 9.0 / 5.0 + 32.0;
    private double FahrenheitToCelsius(double fahrenheit) => (fahrenheit - 32.0) * 5.0 / 9.0;
    private string GetCelsiusToFahrenheitLine(double celsius) => $"{celsius}°C is {CelsiusToFarenheit(celsius)}°F";
    private string GetFahrenheitToCelsiusLine(double fahrenheit) => $"{fahrenheit}°F is {FahrenheitToCelsius(fahrenheit)}°F";

    public int ShowMenu()
    {
        int width = 28;
        while (true)
        {
            Console.WriteLine("MAIN MENU");
            Console.WriteLine("".PadLeft(width, '-'));
            Console.WriteLine("Celsius to Fahrenheit".PadRight(width - 3) + ": 1");
            Console.WriteLine("Fahrenheit to Celsius".PadRight(width - 3) + ": 2 ");
            Console.WriteLine("Exit the program".PadRight(width - 3) + ": 0 ");
            Console.WriteLine("".PadLeft(width, '-'));
            Console.WriteLine();
            Console.WriteLine("Your choice: ");
            string line = Console.ReadLine();
            if (int.TryParse(line, out int choice))
            {
                return choice;
            }
        }
    }
}

現在,這並不能滿足您在問題文本中對您的要求。 我會把它留給你。 一個提示 - 無需讀取用戶輸入的任何溫度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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