C#如何将Console.ReadLine读取的输入值存入数组并计算平均值
原代码问题排查
你现有的代码存在几个明显问题会导致功能无法正常运行:
- for循环末尾多了一个分号,循环体为空,后面的代码只会执行一次,无法循环读取用户输入
- 声明的
float[] tt没有初始化,固定长度数组必须指定长度后才能写入元素 - 平均值计算逻辑错误,你输出的是用户输入的负数除以输入次数,不是之前所有合法值的平均值
- 没有做输入格式校验,用户输入非数字内容时程序会直接抛出异常
实现方案
因为你提前无法预知用户会输入多少个合法值,推荐用自带动态扩容能力的List<float>存储输入值,所有输入完成后可以直接转换为float数组,修正后的完整代码如下:
using System; using System.Collections.Generic; class Program { public static void Main (string[] args) { // 用List动态存储合法输入值,不需要提前指定长度 List<float> inputList = new List<float>(); float sum = 0; while(true) { string inputStr = Console.ReadLine(); // 校验输入是否为合法float数值 if (!float.TryParse(inputStr, out float inputVal)) { Console.WriteLine("请输入合法的数字"); continue; } // 输入小于0时结束读取,计算平均值 if (inputVal < 0) { if (inputList.Count == 0) { Console.WriteLine("无合法输入,无法计算平均值"); } else { float avg = sum / inputList.Count; Console.WriteLine($"平均值为:{avg}"); // 转为float数组,后续可直接操作这个数组 float[] tt = inputList.ToArray(); } break; } // 合法值存入集合、累加求和 inputList.Add(inputVal); sum += inputVal; } } }
核心逻辑说明
- 动态存储:使用
List<float>的Add()方法添加每次的合法输入,内部会自动扩容,不需要手动处理数组长度问题 - 转数组:输入结束后调用
List<float>的ToArray()方法,即可得到存储了所有合法输入值的float数组 - 优化点:提前累加所有合法值的和,不需要后续遍历数组重新计算,同时加入输入格式校验避免程序崩溃
内容的提问来源于stack exchange,提问作者Arthur Oliveira
相关产品推荐
相关产品推荐

