C#如何存储循环输入的用户数据供其他方法计算算术平均值
问题根因
你用数组存储用户输入的方案本身没有问题,当前无法访问数组的核心原因是2个:
first_method中定义的newarray是方法局部变量,仅在方法执行过程中有效,方法执行结束后就会被回收,外部方法无法直接访问- 现有
second_method的参数定义为单个字符串类型,无法接收数组输入,数值转换和计算逻辑也不完整
修复方案
标准实现(推荐)
通过方法返回值+参数传递的方式共享数组,符合单一职责原则,耦合度低:
- 修改
first_method,把返回值从void改成string[],执行结束后返回填充好的输入数组 - 在Main方法中接收返回的数组,传递给
second_method - 修改
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
相关产品推荐
相关产品推荐

