二维数组行元素与对应行最大值相乘问题及代码调试求助
二维数组按行乘对应行最大值的实现修复
需求回顾
给定两个n×n的二维数组,生成新数组的规则是:将第一个数组每行的每个元素,分别乘以第二个数组对应行的元素最大值。
示例验证
以提供的示例数组为例:
第一个数组:
2 3 4 1 1 1 12 1 1
第二个数组:
8 12 16 1 1 1 12 1 1
按照规则计算后,新数组应为:
32 48 64 1 1 1 144 12 12
原代码问题分析
原代码存在以下关键问题:
- 未实现双数组逻辑:仅生成了一个随机数组,完全没有处理需求中的第二个数组
- 最大值计算逻辑错误:循环中每次重置
max为当前元素,判断后未正确更新最大值,且循环范围遗漏了最后一个元素 - 新数组赋值不完整:仅给每行最后一个元素赋值,其余元素保持默认的0值
- 最大值初始化错误:固定设为999,应基于每行第一个元素初始化
修正后的代码
using System; namespace Lab_4 { internal class Program { static void Main(string[] args) { Console.WriteLine("请输入数组的维度n:"); int n = Convert.ToInt32(Console.ReadLine()); // 初始化并输入第一个数组 int[,] firstArray = new int[n, n]; Console.WriteLine($"请输入第一个{n}×{n}数组的元素(每行输入n个数字,空格分隔):"); for (int i = 0; i < n; i++) { string[] row = Console.ReadLine().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); for (int j = 0; j < n; j++) { firstArray[i, j] = int.Parse(row[j]); } } // 初始化并输入第二个数组 int[,] secondArray = new int[n, n]; Console.WriteLine($"请输入第二个{n}×{n}数组的元素(每行输入n个数字,空格分隔):"); for (int i = 0; i < n; i++) { string[] row = Console.ReadLine().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); for (int j = 0; j < n; j++) { secondArray[i, j] = int.Parse(row[j]); } } // 生成结果数组 int[,] resultArray = new int[n, n]; for (int i = 0; i < n; i++) { // 计算当前行的最大值 int rowMax = secondArray[i, 0]; for (int j = 1; j < n; j++) { if (secondArray[i, j] > rowMax) { rowMax = secondArray[i, j]; } } // 给结果数组赋值 for (int j = 0; j < n; j++) { resultArray[i, j] = firstArray[i, j] * rowMax; } } // 输出结果数组 Console.WriteLine("\n生成的新数组:"); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { Console.Write(resultArray[i, j] + " "); } Console.WriteLine(); } } } }
代码说明
- 支持用户手动输入两个n×n数组,贴合需求场景
- 正确计算第二个数组每行的最大值:从每行第一个元素开始遍历比较,动态更新最大值
- 遍历第一个数组的每个元素,乘以对应行的最大值,完成整个结果数组的赋值
- 输出清晰的操作提示,提升用户操作体验
内容的提问来源于stack exchange,提问作者daMpik
相关产品推荐
相关产品推荐

