【问题标题】:My calculator application is not working as intended我的计算器应用程序未按预期工作
【发布时间】:2021-04-16 09:00:30
【问题描述】:

我是 C# 的初学者,作为我的第一个程序,我制作了一个带有 2 个变量的简单计算器,现在我创建了一个计算器 v2,您可以在其中放入所需的变量数量,但它不起作用。

它有两个大问题导致计算器无法按预期工作:

  1. 操作数与数字相同,应该小于 1
  2. 每次退出开关时,“sum”变量都会重置为 0 或最后输入的数字,我已经尝试了一些更改,但它仍然会重置值。

该计划分为 2 个班级。 计算器类带有计算函数,程序类带有主函数。

计算器类代码:

class Calculator
{
    private double num;
    private double sum = 0;
    
    public Calculator(double number)
    {
        num = number;
    }
 
    public double Add()
    {
        return sum += num;
    }
    public double Divide()
    {
        if(num==0)
        {
            num = 1;
        }
        return sum /= num;
    }

    public double Subtraction()
    {
        return sum -= num;
    }
    public double Multiplication()
    {
        if(sum==0)
        {
            sum = 1;
        }
        return sum *= num;
    }

    public double Sum
    {
        get
        {
            return sum;
        }
    }
}

程序类代码:

class Program
{
    static void Main(string[] args)
    {
        Console.ForegroundColor = ConsoleColor.Cyan;
        Console.WriteLine("Choose the number of the operations: 1.Add 2.Divide 3.Subtraction 4.Multiply");
        Console.ResetColor();

        Console.Write("How many numbers do you want to calculate?: ");
        int countNumbers = int.Parse(Console.ReadLine());
        double suma = 0;

        if (countNumbers > 1)
        {
             for (int i = 1; i <= countNumbers; i++)
             {
                Console.Write("Add number: ");
                double number = double.Parse(Console.ReadLine());
                Calculator op = new Calculator(number);

                Console.Write("Operation number: ");
                int operation = int.Parse(Console.ReadLine());

                switch (operation)
                {
                    case 1:
                       op.Add();
                       break;
                    case 2:
                       op.Divide();
                       break;
                    case 3:
                       op.Subtraction();
                       break;
                    case 4:
                       op.Multiplication();
                       break;
                }
                     
                suma = op.Sum;
             }
        
        }
        Console.WriteLine("The sum is {0}", suma);
    }
}

问候

【问题讨论】:

  • 您每次都在创建一个新的Calculator,这就是Sum 不断重置的原因(Calculator op = new Calculator(number) 在您的for 循环中)
  • 与您的问题无关:您的Divide() 逻辑错误,x / 0 不是1 而是一个未定义的数字。
  • @Cleptus 他没有返回 1 他正在返回 x / 1(实际上将“除以零”替换为“不做任何事情”)
  • @Rafalon 确实如此,但他可以只拥有if (num == 0) return sum;,恕我直言更清楚
  • @Cleptus 是真的 :)

标签: c# oop calculator


【解决方案1】:

我会先用第一个数字初始化一个 Calculator 实例,然后循环获取每个数字/操作:

Console.Write("First number: ");
double number = double.Parse(Console.ReadLine());
Calculator op = new Calculator(number);

for (int i = 1; i < countNumbers; i++)
{
    Console.Write("First number: ");
    double number = double.Parse(Console.ReadLine());

    Console.Write("Operation number: ");
    int operation = int.Parse(Console.ReadLine());

    switch (operation)
    {
        case 1:
            op.Add(number);
            break;
        case 2:
            op.Divide(number);
            break;
        case 3:
            op.Subtraction(number);
            break;
        case 4:
            op.Multiplication(number);
            break;
    }
    
    suma = op.Sum;
}

请注意,要做到这一点,我会去掉Calculator 中的num 字段,并在每个函数中使用一个参数,如下所示:

public double Add(double num)
{
    return sum += num;
}

另请注意,您显然没有使用 return 值,因此您也可以这样写:

public void Add(double num)
{
    sum += num;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2015-11-26
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 2021-08-24
    • 2017-06-03
    相关资源
    最近更新 更多