也许有些工程师在实际开发中偶尔也会和我一样不小心犯下面的问题。这里拿出来与大家共勉。
1、数组长度误用案例现场,
-
class Program
-
{
-
static int[,] gTwoDelArray = new int[,]{
-
{ 1, 2 }, { 1, 3 }, { 1, 4 }, { 1, 5 }, { 1, 6 }, { 1, 7 }, { 1, 8 }, { 1, 9}, { 1, 10 }, {1,11},
-
{ 1, 12 }, { 1, 13 }, { 1, 14 }, { 1, 15 }, { 1, 16 }, { 1, 17 }, { 1, 18 }, { 1, 19}, { 1, 20 }, {1,21},
-
{ 1, 22 }, { 1, 23 }, { 1, 24 }, { 1, 25 }, { 1, 26 }, { 1, 27 }, { 1, 28 }, { 1, 33}, { 1, 34 }, {1,35},
-
{ 1, 36 }, { 1, 37 }, { 1, 38 }, { 1, 39 }, { 1, 40 }, { 1, 41 }, { 1, 42 }, { 1, 43}, { 1, 44 }, {1,45},
-
{ 1, 46 }, { 1, 47 }, { 1, 48 }, { 1, 49 }, { 1, 50 }, { 1, 51 }, { 1, 52 }, { 1, 53}, { 1, 54 }, {1,55},
-
{ 1, 56 }, { 1, 57 }, { 1, 58 }, { 1, 59 }, { 1, 60 }, { 1, 61 }, { 1, 62 }, { 1, 63}, { 1, 66 }, {1,67},
-
{ 1, 68 }, { 1, 69 }, { 1, 70 }, { 1, 71 }, { 1, 72 }, { 1, 73 }, { 1, 74 }, { 1, 75}, { 1, 76 }, {1,77},
-
{ 1, 78 }, { 1, 79 }, { 1, 80 }, { 1, 81 }, { 1, 82 }, { 1, 83 }, { 1, 84 }, { 1, 85}, { 1, 86 }, {1,87},
-
{ 1, 88 }, { 1, 89 }, { 1, 90 }, { 1, 94 }, { 1, 98 }, { 1, 99 }, { 1, 100 }, { 1, 101}, { 1, 102 }, {1,103},
-
{ 1, 104 }, { 1, 105 }, { 1, 106 }, { 1, 107 }, { 1, 108 }, { 1, 109 }, { 1, 110 }, { 1, 111}, { 1, 112 }, {1,113},
-
{ 1, 114 }, { 1, 115 }, { 1, 116 }, { 1, 117 }, { 1, 118 }, { 1, 119 }, { 1, 120 }, { 1, 121}, { 1, 122 }, {1,123},
-
{ 1, 124 }, { 1, 125 }, { 1, 126 }, { 1, 127 }, { 1, 128 }
-
};
-
-
static void Main(string[] args)
-
{
-
try
-
{
-
int modeVal = 0;
-
for (modeVal = 0; modeVal < gTwoDelArray.Length; )
-
{
-
Console.WriteLine("value {0} = {1}", modeVal, gTwoDelArray[modeVal, 1]); // gTwoDelArray[i][1] --- C 的写法
-
modeVal = (++modeVal) % gTwoDelArray.Length;
-
}
-
Console.ReadLine();
-
}
-
catch (Exception main)
-
{
-
Console.WriteLine(main.ToString());
-
Console.ReadLine();
-
}
-
}
-
}
2、问题分析
这段代码本意上是想实现将不断循环输入二维数组的第二维的数据。
但上面的代码存在一个致命的问题,导致运行过程中报错,问题到底出在哪里?
图1
调试分析,发现一个致命的基础性问题,请看图2.
图2
由图2,很明显是对二维数组的长度的错误理解引起的。由此案例与诸位共勉:.net中多维数组的长度,是以单个元素的个数总和计算的。下面再设计一个三维数组印证这个问题(注意.NET的三维数组的定义方法,同时要注意C语言的二维数组与.NET的二维数组写法的区别)。
图3
3、修改方案
-
static void Main(string[] args)
-
{
-
try
-
{
-
int modeVal = 0;
-
for (modeVal = 0; modeVal < gTwoDelArray.Length/2; )
-
{
-
System.Threading.Thread.Sleep(100);
-
Console.WriteLine("value {0} = {1}", modeVal, gTwoDelArray[modeVal, 1]); // gTwoDelArray[i][1] --- C 的写法
-
modeVal = (++modeVal) % (gTwoDelArray.Length/2);
-
}
-
Console.ReadLine();
-
}
-
catch (Exception main)
-
{
-
Console.WriteLine(main.ToString());
-
Console.ReadLine();
-
}
-
}
图3
开发者,需要时刻保持平静的心态。戒骄戒躁,宁静才能致远!
阅读(2069) | 评论(0) | 转发(0) |