Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12839080
  • 博文数量: 1293
  • 博客积分: 13501
  • 博客等级: 上将
  • 技术积分: 17974
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 18:11
文章分类

全部博文(1293)

文章存档

2019年(1)

2018年(1)

2016年(118)

2015年(257)

2014年(128)

2013年(222)

2012年(229)

2011年(337)

分类: C#/.net

2013-05-23 10:04:44

    也许有些工程师在实际开发中偶尔也会和我一样不小心犯下面的问题。这里拿出来与大家共勉。

1、数组长度误用案例现场,


  1. class Program
  2. {
  3.     static int[,] gTwoDelArray = new int[,]{
  4.     { 1, 2 }, { 1, 3 }, { 1, 4 }, { 1, 5 }, { 1, 6 }, { 1, 7 }, { 1, 8 }, { 1, 9}, { 1, 10 }, {1,11},
  5.     { 1, 12 }, { 1, 13 }, { 1, 14 }, { 1, 15 }, { 1, 16 }, { 1, 17 }, { 1, 18 }, { 1, 19}, { 1, 20 }, {1,21},
  6.     { 1, 22 }, { 1, 23 }, { 1, 24 }, { 1, 25 }, { 1, 26 }, { 1, 27 }, { 1, 28 }, { 1, 33}, { 1, 34 }, {1,35},
  7.     { 1, 36 }, { 1, 37 }, { 1, 38 }, { 1, 39 }, { 1, 40 }, { 1, 41 }, { 1, 42 }, { 1, 43}, { 1, 44 }, {1,45},
  8.     { 1, 46 }, { 1, 47 }, { 1, 48 }, { 1, 49 }, { 1, 50 }, { 1, 51 }, { 1, 52 }, { 1, 53}, { 1, 54 }, {1,55},
  9.     { 1, 56 }, { 1, 57 }, { 1, 58 }, { 1, 59 }, { 1, 60 }, { 1, 61 }, { 1, 62 }, { 1, 63}, { 1, 66 }, {1,67},
  10.     { 1, 68 }, { 1, 69 }, { 1, 70 }, { 1, 71 }, { 1, 72 }, { 1, 73 }, { 1, 74 }, { 1, 75}, { 1, 76 }, {1,77},
  11.     { 1, 78 }, { 1, 79 }, { 1, 80 }, { 1, 81 }, { 1, 82 }, { 1, 83 }, { 1, 84 }, { 1, 85}, { 1, 86 }, {1,87},
  12.     { 1, 88 }, { 1, 89 }, { 1, 90 }, { 1, 94 }, { 1, 98 }, { 1, 99 }, { 1, 100 }, { 1, 101}, { 1, 102 }, {1,103},
  13.     { 1, 104 }, { 1, 105 }, { 1, 106 }, { 1, 107 }, { 1, 108 }, { 1, 109 }, { 1, 110 }, { 1, 111}, { 1, 112 }, {1,113},
  14.     { 1, 114 }, { 1, 115 }, { 1, 116 }, { 1, 117 }, { 1, 118 }, { 1, 119 }, { 1, 120 }, { 1, 121}, { 1, 122 }, {1,123},
  15.     { 1, 124 }, { 1, 125 }, { 1, 126 }, { 1, 127 }, { 1, 128 }
  16. };

  17.     static void Main(string[] args)
  18.     {
  19.         try
  20.         {
  21.             int modeVal = 0;
  22.             for (modeVal = 0; modeVal < gTwoDelArray.Length; )
  23.             {
  24.                 Console.WriteLine("value {0} = {1}", modeVal, gTwoDelArray[modeVal, 1]); // gTwoDelArray[i][1] --- C 的写法
  25.                 modeVal = (++modeVal) % gTwoDelArray.Length;
  26.             }
  27.             Console.ReadLine();
  28.         }
  29.         catch (Exception main)
  30.         {
  31.             Console.WriteLine(main.ToString());
  32.             Console.ReadLine();
  33.         }
  34.     }
  35. }


 

2、问题分析

    这段代码本意上是想实现将不断循环输入二维数组的第二维的数据。

    但上面的代码存在一个致命的问题,导致运行过程中报错,问题到底出在哪里?

image 图1

 

    调试分析,发现一个致命的基础性问题,请看图2.

image图2

    由图2,很明显是对二维数组的长度的错误理解引起的。由此案例与诸位共勉:.net中多维数组的长度,是以单个元素的个数总和计算的。下面再设计一个三维数组印证这个问题(注意.NET的三维数组的定义方法,同时要注意C语言的二维数组与.NET的二维数组写法的区别)。

image 图3

 

 

3、修改方案


  1. static void Main(string[] args)
  2. {
  3.     try
  4.     {
  5.         int modeVal = 0;
  6.         for (modeVal = 0; modeVal < gTwoDelArray.Length/2; )
  7.         {
  8.             System.Threading.Thread.Sleep(100);
  9.             Console.WriteLine("value {0} = {1}", modeVal, gTwoDelArray[modeVal, 1]); // gTwoDelArray[i][1] --- C 的写法
  10.             modeVal = (++modeVal) % (gTwoDelArray.Length/2);
  11.         }
  12.         Console.ReadLine();
  13.     }
  14.     catch (Exception main)
  15.     {
  16.         Console.WriteLine(main.ToString());
  17.         Console.ReadLine();
  18.     }
  19. }


 

image 图3




 

    开发者,需要时刻保持平静的心态。戒骄戒躁,宁静才能致远!

阅读(2069) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~