C#矩阵相加程序出现Index was outside the bounds of the array错误求助
C#矩阵相加程序数组越界问题排查与修复
你的代码出现"Index was outside the bounds of the array."错误,是由以下几个明确问题导致的:
- 第二个矩阵赋值逻辑错误:生成第二个矩阵
matrix1时,你用了第一个矩阵matrix的行列长度作为循环条件,还错误地修改了matrix的元素值,正确的做法应该是遍历matrix1的行列,给matrix1的元素赋值。 - 缺少矩阵合法性校验:矩阵相加的前提是两个矩阵的行数、列数完全一致,但你的代码没有对用户输入的两个矩阵行列数做校验,只要输入不同,相加时就会触发数组越界。
- 打印结果循环条件写错:最后打印Sum矩阵的内层循环,把判断条件
j < columns写成了i < columns,导致j会一直递增直到超出数组下标范围。
以下是修正后的完整代码:
static void Main(string[] args) { Console.WriteLine("矩阵相加要求两个矩阵的行数和列数必须相同\n"); // 输入第一个矩阵的行列数 Console.Write("输入第一个矩阵的行数: "); int rows1 = Convert.ToInt32(Console.ReadLine()); Console.Write("输入第一个矩阵的列数: "); int columns1 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("---------------------------"); // 生成第一个随机矩阵并打印 int[,] matrix = new int[rows1, columns1]; Random random = new Random(); for (int i = 0; i < matrix.GetLength(0); i++) { for (int j = 0; j < matrix.GetLength(1); j++) { matrix[i, j] = random.Next(111); } } Console.WriteLine("第一个矩阵:"); for (int i = 0; i < matrix.GetLength(0); i++) { for (int j = 0; j < matrix.GetLength(1); j++) { Console.Write(matrix[i, j] + "\t"); } Console.WriteLine(); } // 输入第二个矩阵的行列数并校验 Console.WriteLine("\n输入第二个矩阵的行列数"); Console.Write("输入第二个矩阵的行数: "); int rows2 = Convert.ToInt32(Console.ReadLine()); Console.Write("输入第二个矩阵的列数: "); int columns2 = Convert.ToInt32(Console.ReadLine()); if (rows1 != rows2 || columns1 != columns2) { Console.WriteLine("错误:两个矩阵的行数或列数不一致,无法相加!"); return; } Console.WriteLine("---------------------------"); // 生成第二个随机矩阵并打印 int[,] matrix1 = new int[rows2, columns2]; Random random1 = new Random(); for (int i = 0; i < matrix1.GetLength(0); i++) { for (int j = 0; j < matrix1.GetLength(1); j++) { matrix1[i, j] = random1.Next(111); } } Console.WriteLine("第二个矩阵:"); for (int i = 0; i < matrix1.GetLength(0); i++) { for (int j = 0; j < matrix1.GetLength(1); j++) { Console.Write(matrix1[i, j] + "\t"); } Console.WriteLine(); } // 计算矩阵相加结果 double[,] sum = new double[rows1, columns1]; Console.WriteLine("\n矩阵相加结果:"); for (int i = 0; i < rows1; i++) { for (int j = 0; j < columns1; j++) { sum[i, j] = matrix[i, j] + matrix1[i, j]; Console.Write(sum[i, j] + "\t"); } Console.WriteLine(); } }
内容的提问来源于stack exchange,提问作者Evgen Petrun
相关产品推荐
相关产品推荐

