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

C#如何存储循环输入的用户数据供其他方法计算算术平均值

问题根因

你用数组存储用户输入的方案本身没有问题,当前无法访问数组的核心原因是2个:

  1. first_method中定义的newarray是方法局部变量,仅在方法执行过程中有效,方法执行结束后就会被回收,外部方法无法直接访问
  2. 现有second_method的参数定义为单个字符串类型,无法接收数组输入,数值转换和计算逻辑也不完整

修复方案

标准实现(推荐)

通过方法返回值+参数传递的方式共享数组,符合单一职责原则,耦合度低:

  1. 修改first_method,把返回值从void改成string[],执行结束后返回填充好的输入数组
  2. 在Main方法中接收返回的数组,传递给second_method
  3. 修改second_method的参数为字符串数组,完成平均值计算逻辑

完整可运行代码如下:

using System;
namespace arithmetic_mean
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("你打算输入多少个十进制数字?");
            string userInput = Console.ReadLine();
            int num_user;
            // 输入合法性校验,避免后续逻辑异常
            while (!int.TryParse(userInput, out num_user) || num_user <= 0)
            {
                Console.WriteLine("输入不合法,请输入正整数:");
                userInput = Console.ReadLine();
            }

            // 接收first_method返回的输入数组
            string[] inputArray = first_method(num_user);
            // 传递数组给second_method计算平均值
            double average = second_method(inputArray);
            Console.WriteLine($"输入数字的算术平均值为:{average:F2}");
        }

        static string[] first_method(int num_user)
        {
            string[] newarray = new string[num_user];
            for (int i = 0; i < num_user; i++)
            {
                Console.WriteLine($"请输入第{i+1}个十进制数字:");
                newarray[i] = Console.ReadLine();
            }
            // 返回填充完成的数组
            return newarray;
        }

        static double second_method(string[] newarray)
        {
            double sum = 0;
            int validCount = 0;
            foreach (string item in newarray)
            {
                // 非法输入自动过滤
                if (double.TryParse(item, out double num))
                {
                    sum += num;
                    validCount++;
                }
                else
                {
                    Console.WriteLine($"非法输入「{item}」已被忽略");
                }
            }
            // 避免除零异常
            return validCount == 0 ? 0 : sum / validCount;
        }
    }
}

可选实现方式

如果不想多次传参,也可以通过类静态成员变量共享数组:

  • 在Program类中定义静态成员 static string[] inputArray;
  • 在first_method中直接给这个成员赋值,不需要返回值
  • second_method中直接访问这个成员即可
    这种写法会提升类内部耦合度,仅适合小型项目快速实现,优先推荐上文的参数传递方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:57:03