You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多数字计算C#程序与手机计算器结果不符问题咨询

多数字计算器逻辑错误排查与修正

你的计算器程序核心问题出在减法、乘法、除法的计算逻辑完全错误,导致结果和常规计算器不符,以下是具体问题和修正方案:

问题点拆解

  • 减法方法(subtract):当前代码total += numbers[i] - numbers[i]每次累加0,最终结果恒为0,完全不符合多数字连续减法逻辑(如a - b - c)。
  • 乘法方法(multiply):当前代码计算的是所有数字的平方和,而非多数字乘积(如a * b * c)。
  • 除法方法(division):当前代码累加每个数字除以自身的结果(恒为1),最终结果等于输入数字的数量,完全不符合连续除法逻辑(如a / b / c)。

修正后的完整代码

static void Main(string[] args)
{
    string again;
    do
    {
        Console.Write("Enter size to compute: ");
        // 增加输入合法性判断,避免非数字输入崩溃
        if (!int.TryParse(Console.ReadLine(), out int size) || size <= 0)
        {
            Console.WriteLine("Invalid size, please enter a positive integer.");
            continue;
        }
        int[] numbers = new int[size];
        float[] numberS = new float[size];
        Console.Write("Pick one of the operation \"(+) (-) (*) (/)\": ");
        string operation = Console.ReadLine();

        if (operation == "+")
        {
            for (int i = 0; i < size; i++)
            {
                Console.Write($"Enter number {i+1}: ");
                int.TryParse(Console.ReadLine(), out numbers[i]);
            }
            Console.WriteLine($"The sum is: {add(numbers)}");
        }
        else if (operation == "-")
        {
            for (int i = 0; i < size; i++)
            {
                Console.Write($"Enter number {i+1}: ");
                int.TryParse(Console.ReadLine(), out numbers[i]);
            }
            Console.WriteLine($"The subtraction is: {subtract(numbers)}");
        }
        else if (operation == "*")
        {
            for (int i = 0; i < size; i++)
            {
                Console.Write($"Enter number {i+1}: ");
                int.TryParse(Console.ReadLine(), out numbers[i]);
            }
            Console.WriteLine($"The multiplication is: {multiply(numbers)}");
        }
        else if (operation == "/")
        {
            bool isValidInput = true;
            for (int i = 0; i < size; i++)
            {
                Console.Write($"Enter number {i+1}: ");
                if (!float.TryParse(Console.ReadLine(), out numberS[i]) || (i > 0 && numberS[i] == 0))
                {
                    Console.WriteLine("Invalid input or division by zero!");
                    isValidInput = false;
                    break;
                }
            }
            if (isValidInput)
            {
                Console.WriteLine($"The division is: {division(numberS)}");
            }
        }
        else 
        {
            Console.WriteLine("Invalid Input");
        }

        Console.Write("Do you want to compute again Y/N: ");
        again = Console.ReadLine()?.ToUpper() ?? "N";
        Console.Clear();
    } while (again == "Y");
}

static int add(int[] numbers)
{
    int total = 0;
    foreach (int num in numbers)
    {
        total += num;
    }
    return total;
}

static int subtract(int[] numbers)
{
    // 以第一个数为初始值,依次减去后续数字
    int total = numbers[0];
    for (int i = 1; i < numbers.Length; i++)
    {
        total -= numbers[i];
    }
    return total;
}

static int multiply(int[] numbers)
{
    // 以1为初始值,依次乘以所有数字
    int total = 1;
    foreach (int num in numbers)
    {
        total *= num;
    }
    return total;
}

static float division(float[] numbers)
{
    // 以第一个数为初始值,依次除以后续数字
    float total = numbers[0];
    for (int i = 1; i < numbers.Length; i++)
    {
        total /= numbers[i];
    }
    return total;
}

额外优化说明

  1. 增加了输入合法性校验,避免非数字输入导致程序崩溃,同时处理了除法中的除零异常。
  2. 优化了输入提示文本,明确提示输入第几个数字,提升用户体验。
  3. 部分循环改用foreach语法,让代码更简洁易读。

内容的提问来源于stack exchange,提问作者XDponce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 13:30:53