C#实现帕斯卡三角运行至第5步输出结果异常问题求助
帕斯卡三角代码问题修复
错误原因
- 核心问题:将遍历的集合元素值误作为索引取值,这是导致第5层对应位置变为0的直接原因。
你代码中foreach(int j in TempTriList)里的j是TempTriList存储的数值,不是下标。你用TempTriList[j]取值时,当j等于当前集合长度甚至超出时,要么取到错误位置的0,要么会触发索引越界异常。到第5层时,TempTriList对应位置的数值是6,TempTriList[6]刚好是末尾的0值,就出现了你看到的异常输出。 - 次要问题:临时列表构建逻辑用
Insert插入元素逻辑冗余,容易因为位置计算错误产生额外异常。
修正后代码
static void PascalsTri(int input) { // 初始层 0 1 0 int[] start = { 0, 1, 0 }; List<int> TriList = new List<int>(start); // 输入合法性校验 if(input < 1) { return; } // 打印首层 Console.WriteLine(string.Join(" ", TriList)); // 生成剩余层数 for(int i = 1; i < input; i++) { List<int> TempTriList = new List<int>(); // 每层开头补0 TempTriList.Add(0); // 上一层相邻元素相加生成当前层中间值 for(int j = 0; j < TriList.Count - 1; j++) { TempTriList.Add(TriList[j] + TriList[j + 1]); } // 每层结尾补0 TempTriList.Add(0); // 更新当前层为下一次计算的上一层 TriList = TempTriList; // 打印当前层 Console.WriteLine(string.Join(" ", TriList)); } }
验证输出
当input=5时输出完全符合预期:
0 1 0 0 1 1 0 0 1 2 1 0 0 1 3 3 1 0 0 1 4 6 4 1 0
内容的提问来源于stack exchange,提问作者Gloop
相关产品推荐
相关产品推荐

