第一个控制台应用程序返回意外输出

First console application returning with unexpected output

当我 运行 这个控制台应用程序时,一切正常,但我的 UserAnswer() 结果除外。它一直为 num1 和 num2 返回值“0”。这对我来说没有意义,因为我没有收到任何在 Input1() 和 Input2() 方法中为 num1 和 num2 声明新值的错误。它编译并且 运行 很好,但为什么它不获取这些变量的新值?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

 namespace CalculatorApp
{
    public class Program
    {
        float Number;
        float num2;
        float num1;
        public static void Main(string[] args)
        {
            // Display title as the C# console calculator app.

            Console.WriteLine("Console Calculator in C#\r");
            Console.WriteLine("------------------------\n");
            //Console.ReadKey();

            // execute program functions
            new Program().Input1();
            new Program().Input2();
            new Program().UserOption();
            new Program().UserAnswer();
            new Program().PromptUserExit();
        }
            // Ask the user to type the first number.
            //Console.WriteLine("Type a number, and then press Enter");

        public float Input1() {
            Console.WriteLine("Type a number, and then press Enter");
            bool Valid = false;
            while (Valid == false)
            {
                string Input = Console.ReadLine();
                if (!float.TryParse(Input, out Number))
                {
                    Console.WriteLine("Not an integer, please try again.");
                }
                else
                {
                    Valid = true;
                    num1 = (float)Convert.ToDecimal(Input);
                } 
            } return num1;
}
        public float Input2() {
            // Ask the user to type the second number.
            Console.WriteLine("Type another number, and then press Enter");
            bool Valid2 = false;
            while (Valid2 == false)
            {
                string Input2 = Console.ReadLine();
                if (!float.TryParse(Input2, out Number))
                {
                    Console.WriteLine("Not an integer, please try again.");

                }
                else
                {
                    Valid2 = true;
                    num2 = (float)Convert.ToDecimal(Input2);
                }
            } return num2;
        }

        public void UserOption() {
            // Ask the user to choose an option.
            Console.WriteLine("Choose an option from the following list:");
            Console.WriteLine("\ta - Add");
            Console.WriteLine("\ts - Subtract");
            Console.WriteLine("\tm - Multiply");
            Console.WriteLine("\td - Divide");
            Console.Write("Your option? ");
        }

        public void UserAnswer() {
            bool isOperatorValid;
            do
            {
                isOperatorValid = true;
                switch (Console.ReadLine())
                {
                    case "a":
                        Console.WriteLine($"Your result: {num1} + {num2} = " + (num1 + num2));
                        break;
                    case "s":
                        Console.WriteLine($"Your result: {num1} - {num2} = " + (num1 - num2));
                        break;
                    case "m":
                        Console.WriteLine($"Your result: {num1} * {num2} = " + (num1 * num2));
                        break;
                    case "d":
                        Console.WriteLine($"Your result: {num1} / {num2} = " + (num1 / num2));
                        break;
                    default:
                        Console.WriteLine("Invalid input please try again");
                        isOperatorValid = false;
                        break;
                }
            } while (!isOperatorValid);
        }
        public void PromptUserExit() { 
            // Wait for the user to respond before closing.
            Console.Write("Press any key to close the Calculator console app...");
                Console.ReadKey();
            }
        }
    }

这是你的问题:

new Program()

您每次调用方法时都会创建 Program class 的新实例。每次,变量都使用默认值 0 进行初始化。

您需要初始化一次class,然后使用相同的class:

var program = new Program();
program.Input1();
program.Input2();
program.UserOption();
program.UserAnswer();
program.PromptUserExit();

或者您可以将所有方法和变量设为 static,这样您就可以直接调用它们而无需初始化新对象。在较大的程序中,您需要小心声明 static(有时间和地点,但不是 "always")。不过在这样的小程序里,还是可以的。