打印锯齿状阵列

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][];

这意味着miles0..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 ,
 ;

【讨论】:

以上是关于打印锯齿状阵列的主要内容,如果未能解决你的问题,请参考以下文章

windows打印GDI+出现锯齿和虚化问题的解决方法

windows打印GDI+出现锯齿和虚化问题的解决方法

如何从给定范围的阵列中打印所有子阵列?

Firestore iOS - 为啥我的阵列多次打印出来?

.NET 多维阵列打印

什么是锯齿状阵列?