打印锯齿状阵列
Posted
技术标签:
【中文标题】打印锯齿状阵列【英文标题】:Printing Jagged Array 【发布时间】:2021-12-01 13:28:17 【问题描述】:我正在编写一个程序,它将采用一个锯齿状数组并打印所述锯齿状数组。我使用了一个 foreach 循环来尝试打印数组。每当我去运行程序并查看 Jagged 数组是否会打印它时都会失败。我还尝试了一个 for 循环来打印数组。每次我去运行程序时,我都会抛出 System.IndexOutOfRange。 “对于我的 for 循环,索引超出了数组的范围。我尝试将循环注释掉,当我尝试调用 min 和 max 方法时,它会做同样的事情。
static void Main(string[] args)
const int NUMBER_OF_CITIES = 9;
int i;
int[][] miles = new int[NUMBER_OF_CITIES][];
miles[0] = new int[1] 0 ;
miles[1] = new int[1] 290 ;
miles[2] = new int[2] 373, 102 ;
miles[3] = new int[3] 496, 185, 228 ;
miles[4] = new int[4] 193, 110, 208, 257 ;
miles[5] = new int[5] 214, 90, 165, 270, 73 ;
miles[6] = new int[6] 412, 118, 150, 81, 191, 198 ;
miles[7] = new int[7] 222, 86, 173, 285, 41, 34, 201 ;
miles[8] = new int[8] 112, 207, 301, 360, 94, 155, 288, 141 ;
miles[9] = new int[9] 186, 129, 231, 264, 25, 97, 194, 66, 82 ;
int index = 0;
foreach (int[] milesRows in miles)
Console.Write("\t" + ++index);
for (int j = 0;j < milesRows.Length; j++)
Console.Write(milesRows[j] + "\t");
Console.WriteLine();
Min(miles[7]);
Max(miles[7]);
Console.WriteLine("The clossest is: " + Min(miles[7]));
Console.WriteLine("The farthest is: " + Max(miles[7]));
【问题讨论】:
miles[9] = new int[9]...
这行导致问题...您创建了长度为 9 的miles
。这意味着数组的索引可以从 0 到 8。尝试删除 miles[9] = new int[9]...
行
【参考方案1】:
您将数组中的最大元素数定义为 9 (NUMBER_OF_CITIES),但您的数组中有 10 个元素(从英里 [0] 到英里 [9]),这就是它超出范围的原因。变化:
const int NUMBER_OF_CITIES = 9;
到
const int NUMBER_OF_CITIES = 10;
【讨论】:
太棒了,谢谢!我是 C# 新手。我忘记了数组从 0 开始。这很有效。【参考方案2】:问题的直接原因是数组长度不正确:
const int NUMBER_OF_CITIES = 9;
int[][] miles = new int[NUMBER_OF_CITIES][];
这意味着miles
在0..8
范围内有项目;但是你放了一行超出范围
// 9 is out of range
miles[9] = new int[9] 186, 129, 231, 264, 25, 97, 194, 66, 82 ;
为了消除此类错误,请尝试一次性声明和初始化miles
,然后让.net 为您计算所有Length
:
// note, that we don't specify Length anywhere and let .net do it itself
int[][] miles = new int[][]
new int[] 0 ,
new int[] 290 ,
new int[] 373, 102 ,
new int[] 496, 185, 228 ,
new int[] 193, 110, 208, 257 ,
new int[] 214, 90, 165, 270, 73 ,
new int[] 412, 118, 150, 81, 191, 198 ,
new int[] 222, 86, 173, 285, 41, 34, 201 ,
new int[] 112, 207, 301, 360, 94, 155, 288, 141 ,
new int[] 186, 129, 231, 264, 25, 97, 194, 66, 82 ,
;
【讨论】:
以上是关于打印锯齿状阵列的主要内容,如果未能解决你的问题,请参考以下文章