实现Tribonacci数时触发System.IndexOutOfRangeException,索引存在仍报错?
解决Tribonacci数计算中的System.IndexOutOfRangeException错误
问题描述
我是编程新手,编写计算Tribonacci数的方法public static void TribonacciNumbs(int n)时,运行触发System.IndexOutOfRangeException错误,明明觉得索引是存在的,却搞不懂报错原因。
错误原因
原代码在循环内错误创建新数组而非扩展已有数组:每次循环都新建固定长度的数组,导致后续赋值时,目标索引超出了当前数组的实际长度范围,最终抛出索引越界异常。
解决方案
改用Array.Resize(ref tribo, i+1)动态扩展数组长度后再赋值,确保数组长度始终能容纳当前要写入的索引。
代码示例
错误代码(触发异常)
public static void TribonacciNumbs(int n) { int[] tribo = new int[3]; tribo[0] = 0; tribo[1] = 1; tribo[2] = 1; for (int i = 3; i <= n; i++) { // 错误:每次循环新建固定长度数组,未扩展容量 int[] newTribo = new int[3]; newTribo[i] = tribo[i-1] + tribo[i-2] + tribo[i-3]; tribo = newTribo; } }
修正后的代码
public static void TribonacciNumbs(int n) { if (n < 0) { Console.WriteLine("n不能为负数"); return; } int[] tribo; // 处理基础边界情况 if (n == 0) { tribo = new int[1]; tribo[0] = 0; } else if (n == 1 || n == 2) { tribo = new int[n+1]; tribo[0] = 0; tribo[1] = 1; if (n >= 2) tribo[2] = 1; } else { tribo = new int[3]; tribo[0] = 0; tribo[1] = 1; tribo[2] = 1; for (int i = 3; i <= n; i++) { // 动态扩展数组长度至i+1,确保索引i可用 Array.Resize(ref tribo, i + 1); tribo[i] = tribo[i-1] + tribo[i-2] + tribo[i-3]; } } // 输出结果示例 Console.WriteLine($"前{n+1}个Tribonacci数:"); foreach (int num in tribo) { Console.Write(num + " "); } }
内容的提问来源于stack exchange,提问作者playsf
相关产品推荐
相关产品推荐

