【问题标题】:Trying to make a calculator试着做一个计算器
【发布时间】:2022-01-09 11:45:42
【问题描述】:

所以基本上每当我尝试更改 while 循环内的变量“restart”时,它都会给我一个错误,提示“无法在此范围内声明名为 'restart' 的本地或参数,因为该名称用于封闭的本地定义本地或参数的范围”。如果有人知道如何解决这个问题,请告诉我


public class Program
{
    public static void Main()
    {
        bool restart = true;
        while (restart == true)
        {
            Console.WriteLine("please enter Multiply, Divide, Add Or Subtract");
            string Method = Console.ReadLine();
            if (Method == "Add")
            {
                Console.WriteLine("Please Enter First Number");
                double numberOne = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Please Enter The Second Number");
                double numberTwo = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine(numberOne + numberTwo);
                Console.WriteLine("Would You Like To Use The Calculator Again? (true = yes, false = no)");
                bool restart = Convert.ToBoolean(Console.ReadLine());
            }
            else if (Method == "Subtract")
            {
                Console.WriteLine("Please Enter First Number");
                double numberOne = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Please Enter The Second Number");
                double numberTwo = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine(numberOne - numberTwo);
                Console.WriteLine("Would You Like To Use The Calculator Again? (true = yes, false = no)");
                bool restart = Convert.ToBoolean(Console.ReadLine());
            }
            else if (Method == "Multiply")
            {
                Console.WriteLine("Please Enter First Number");
                double numberOne = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Please Enter The Second Number");
                double numberTwo = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine(numberOne * numberTwo);
                Console.WriteLine("Would You Like To Use The Calculator Again? (true = yes, false = no)");
                bool restart = Convert.ToBoolean(Console.ReadLine());
            }
            else if (Method == "Divide")
            {
                Console.WriteLine("Please Enter First Number");
                double numberOne = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Please Enter The Second Number");
                double numberTwo = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine(numberOne / numberTwo);
                Console.WriteLine("Would You Like To Use The Calculator Again? (true = yes, false = no)");
                bool restart = Convert.ToBoolean(Console.ReadLine());
            }
            else
            {
                Console.WriteLine("error found");
                Console.WriteLine("Would You Like To Use The Calculator Again? (true = yes, false = no)");
                bool restart = Convert.ToBoolean(Console.ReadLine());
            }
        }
    }
}```

【问题讨论】:

  • 取出bool restart = Convert.ToBoolean(Console.ReadLine());中的bool。当该变量在外部范围内声明时,您正试图在范围内声明一个 new 变量。
  • 另请注意,您在每个 if 块中重复最后两行。你可以把它移到最后一个else之外。
  • @DStanley 谢谢,但它必须在每个 if 块之后我相信感觉 else 只是为了如果你做的事情不是“加、乘、减或除”
  • @Gh0ST:D 斯坦利是对的。您在每个“if”分支中都有相同的代码,因此代码无论如何都会运行。您可以(并且应该)在 else 语句的右大括号之后移动这两行。为了可维护性,避免在应用程序的不同部分重复相同的代码很重要(如果您在一堆地方重复的一行中有错误,则必须找到并修复所有这些地方)。
  • @EricJ。谢谢你,我现在明白他们的意思了

标签: c# while-loop calculator


【解决方案1】:

让我们看看这部分代码:

bool restart = true;
while (restart == true)
{
    // Some stuff omitted...
    bool restart = Convert.ToBoolean(Console.ReadLine());
}

重新声明restart。相反,您应该像这样分配它(在第一次声明变量后使用变量时将bool 关闭):

restart = Convert.ToBoolean(Console.ReadLine());

【讨论】:

    【解决方案2】:

    你需要这样的东西:

        bool restart = true;
        while (restart)
        {
            Console.WriteLine("please enter Multiply, Divide, Add Or Subtract");
            string method = Console.ReadLine();
            if (new[] { "Multiply", "Divide", "Add", "Subtract" }.Contains(method))
            {
                Console.WriteLine("Please Enter First Number");
                double numberOne = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Please Enter The Second Number");
                double numberTwo = Convert.ToDouble(Console.ReadLine());
                if (method == "Add")
                {
                    Console.WriteLine(numberOne + numberTwo);
                }
                else if (method == "Subtract")
                {
                    Console.WriteLine(numberOne - numberTwo);
                }
                else if (method == "Multiply")
                {
                    Console.WriteLine(numberOne * numberTwo);
                }
                else if (method == "Divide")
                {
                    Console.WriteLine(numberOne / numberTwo);
                }
                Console.WriteLine("Would You Like To Use The Calculator Again? (true = yes, false = no)");
                restart = Convert.ToBoolean(Console.ReadLine());
            }
            else
            {
                Console.WriteLine("error found");
                Console.WriteLine("Would You Like To Use The Calculator Again? (true = yes, false = no)");
                restart = Convert.ToBoolean(Console.ReadLine());
            }
        }
    

    或者这个:

        Dictionary<string, Func<double, double, double>> operations =
            new Dictionary<string, Func<double, double, double>>()
            {
                { "Add", (x, y) => x + y },
                { "Subtract", (x, y) => x - y },
                { "Multiply", (x, y) => x * y },
                { "Divide", (x, y) => x / y },
            };
        
        bool restart = true;
        while (restart)
        {
            Console.WriteLine($"Please enter one of: {String.Join(", ", operations.Keys)}");
            string method = Console.ReadLine();
            if (operations.ContainsKey(method))
            {
                Console.WriteLine("Please Enter First Number");
                double numberOne = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Please Enter The Second Number");
                double numberTwo = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine(operations[method](numberOne, numberTwo));
            }
            else
            {
                Console.WriteLine("error found");
            }
            Console.WriteLine("Would You Like To Use The Calculator Again? (true = yes, false = no)");
            restart = Convert.ToBoolean(Console.ReadLine());
        }
    

    【讨论】:

    • 你有一些代码重复:-)(见 cmets)
    • 我不相信new[] { "Multiply, Divide, Add Or Subtract" }.Contains(method) 做你想做的事。
    • @EricJ。 - 消除所有重复! :-)
    猜你喜欢
    • 1970-01-01
    • 2022-08-16
    • 2020-12-18
    • 2010-12-28
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多