求助:如何实现仅对指定int数组元素求和的控制台程序?
问题分析与修复方案
原代码存在的问题
- 编译错误:
foreach循环的迭代变量i是只读的,无法执行i++操作,这会导致编译失败。 - 逻辑偏离需求:原代码未实现“对数组元素求和”的功能,仅在输入值匹配数组元素时将元素加1输出,完全不符合求和逻辑。
- 输入无异常处理:直接使用
Convert.ToInt32转换输入,若用户输入非整数内容,程序会直接崩溃。
修复后的代码(按需求实现)
假设你的需求是:读取输入的整数,若该整数存在于数组{1,3,5,7}中,则对数组所有元素求和并输出;若不存在则输出提示。代码如下:
// 处理输入,添加异常判断 if (!int.TryParse(Console.ReadLine(), out int read)) { Console.WriteLine("请输入有效的整数"); return; } int[] pole = {1, 3, 5, 7}; int sum = 0; // 先判断输入值是否在数组中 if (pole.Contains(read)) { // 对数组所有元素求和 foreach (int num in pole) { sum += num; } Console.WriteLine($"数组元素求和结果:{sum}"); } else { Console.WriteLine("输入的数值不在数组中"); }
如果你的需求是仅对数组中等于输入值的元素求和(即输入值在数组里则输出该值,否则输出0),可以用以下代码:
if (!int.TryParse(Console.ReadLine(), out int read)) { Console.WriteLine("请输入有效的整数"); return; } int[] pole = {1, 3, 5, 7}; int sum = pole.Where(num => num == read).Sum(); Console.WriteLine($"匹配元素的求和结果:{sum}");
额外说明
- 用
int.TryParse替代Convert.ToInt32可以避免输入非整数时的程序崩溃,提升鲁棒性。 - 若你需要修改数组中的元素(比如原代码里的
i++),需使用for循环而非foreach,示例:
for (int index = 0; index < pole.Length; index++) { if (pole[index] == read) { pole[index]++; // 修改数组元素 } } // 修改后再求和 int sum = pole.Sum(); Console.WriteLine($"修改后数组的求和结果:{sum}");
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

