C#生成指定三角矩阵输出全为0的问题与修正方案
问题排查结论
- 核心错误:Main方法未接收
GetArray()方法返回的、已完成规则赋值的二维数组- 执行流程中,Main自行初始化了一个默认全零的
arr1数组后,直接调用GetArray(n),方法生成的带正确三角赋值的数组被直接丢弃,没有赋值给Main作用域内的arr1变量 - 后续输出循环读取的始终是未被赋值的全零数组,因此所有输出元素均为0
- 执行流程中,Main自行初始化了一个默认全零的
- 逻辑校验:
GetArray方法内部的三角判断规则完全匹配题目要求,无需改动:i < j对应上三角区域,赋值1i > j对应下三角区域,赋值-1i == j对应对角线元素,赋值0
修正方案
按照要求完成两处调整:
- 修正无接收的方法调用,把
GetArray的返回值赋值给Main内的矩阵变量 - 遵循题目“所有方法必须使用Public、Static修饰”的规则,将Main方法的访问修饰符补全为
public static
修正后完整代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace C_SHARP { class Program { public static void Main(string[] args) { Console.WriteLine("Enter a number:"); int n = Convert.ToInt32(Console.ReadLine()); int[,] arr1 = new int[n, n]; // 关键修正:接收GetArray返回的已按规则赋值的数组 arr1 = GetArray(n); for (int i = 0; i < n; i++) { Console.Write("\n"); for (int j = 0; j < n; j++) { Console.Write("{0}\t", arr1[i, j]); } } Console.Write("\n\n"); } public static int[,] GetArray(int num) { int i, j; int[,] arr1 = new int[num, num]; for (i = 0; i < num; i++) { for (j = 0; j < num; j++) { if (i < j) { arr1[i,j]=1; } else if (i > j) { arr1[i, j] = -1; } else { arr1[i, j] = 0; } } } return arr1; } } }
运行效果
修正后程序输出完全匹配题目给定的示例格式:
- 输入3时输出3阶规则矩阵
- 输入4时输出4阶规则矩阵
内容的提问来源于stack exchange,提问作者Nitesh Singh
相关产品推荐
相关产品推荐

