第2讲数组
在学习前,视频教学中会提到一些开发辅助的软件,由于我已经安装了Visual Studio环境,所以也不需要了,如果大家已经安装了Visual Studio环境,那么直接用开发环境的控制台程序调试编译运行就可以了。如果大家没有的话,也可以和前一课讲的方式去调试运行,都是可以的。我还是运用原来前一课的方法来编译运行代码,编写代码大家可以在Visual Studio环境编写,是很方便的。
好,今天我们来讲一下数组。在程序开发中,经常会使用到数组,特别是数学运算之中,它的应用更加广泛。下面用一个简单的例子来说明数组。我们来看一下一个简单的数组运用,代码如下:
好,我们来编译运行一下代码,如图:

在屏幕中,打印出了1 2 3刚才我们声明数组中的3个元素。好,关闭窗口。
PPT:对于局部变量和域声明,允许一种简写形式,这样就不需要去再声明数组的类型。例如:
好,我们来试一下,把刚才的代码做些修改。
编译运行后,大家可以看到结果还是一样的。当然,我们也可以先声明数组的长度,再给它赋值。代码如下:
我们再执行编译一下,得到的结果还是一样的。下面,我们来用foreach来访问数组。
通过编译执行,效果也是一样的。在实际编程中,很少碰到这样固定长度的数组,一般情况下,数组的长度是未知的。有时还要动态的改变数组的长度,这就是动态数组。C#并不支持动态数组,这让人稍感遗憾(-_-!),需要使用动态数组时,可以使用ArrayList来代替。ArrayList稍后我们会讲,但是我们还是可以在数组声明时,动态去指定数组的长度。下面我们用一个例子来演示如何用变量来指定数组的长度。
我们在Test类里声明一个过程,它的作用就是初始化并打印一个数组,它带有一个参数ArrLength,它指定了数组的长度。代码如下:
我们来编译执行一下,如图:

屏幕打出了Please enter the array's length,请输入数组的长度,假如我们输入3,看效果,然后我们再输入0:

输入3的时候屏幕打出了我们指定长度的3个元素,当然我们也可以实验其他的值。但是我们输入0或者小于0的时候,程序就跳出了,这是我们程序中while循环的作用。
好,我们看一下static void PrintArr(int ArrLength)方法,前面方法定义了一个static静态关键字,假如我们把这个关键字去掉的话,我们再执行会出错。为什么会这样呢?这是因为Main函数本身是一个静态的过程,它只能调用域里面的静态成员。关于这一点我们会在以后的课程详细的讲解。如果不想把PrintArr定义成静态过程,有什么好的解决方法吗?有!可以把它声明在另外一个类里。
声明一个新类,名字叫SetArray,把我们刚才写的PrintArr拷贝过去。然后改写Main函数。代码如下:
我们编译执行效果和前面也是一样的。
好,今天我们来讲一下数组。在程序开发中,经常会使用到数组,特别是数学运算之中,它的应用更加广泛。下面用一个简单的例子来说明数组。我们来看一下一个简单的数组运用,代码如下:
- //引入一个命名空间
- using System;
- //声明一个Test类
- class Test
- {
- //声明一个入口函数
- static void Main()
- {
- //声明一个整形的数组,名称叫arr
- //数组的声明必须要用到new关键字,后面跟着数组的类型int
- //这个数组有3个元素(1,2,3)
- int[] arr = new int[] { 1, 2, 3 };
- //用一个循环将元素打印出来
- //arr.Length是表示arr数组中的元素个数
- for (int i = 0; i < arr.Length; i++)
- //arr[i]是用下标来访问元素
- //用变量i来遍历数组中的元素
- Console.WriteLine(arr[i]);
- }
- }

在屏幕中,打印出了1 2 3刚才我们声明数组中的3个元素。好,关闭窗口。
PPT:对于局部变量和域声明,允许一种简写形式,这样就不需要去再声明数组的类型。例如:
- int[] arr = new int[] { 1, 2, 3 };
- //可以简化为
- int[] arr = { 1, 2, 3 };
- using System;
- class Test
- {
- static void Main()
- {
- int[] arr = { 1, 2, 3 };
- for (int i = 0; i < arr.Length; i++)
- Console.WriteLine(arr[i]);
- }
- }
- //引入一个命名空间
- using System;
- //声明一个Test类
- class Test
- {
- //声明一个入口函数
- static void Main()
- {
- //声明数组长度为3
- int[] arr = new int[3];
- //用下标来读取
- arr[0] = 1;
- arr[1] = 2;
- arr[2] = 3;
- //用一个循环将元素打印出来
- //arr.Length是表示arr数组中的元素个数
- for (int i = 0; i < arr.Length; i++)
- //arr[i]是用下标来访问元素
- //用变量i来遍历数组中的元素
- Console.WriteLine(arr[i]);
- }
- }
- //声明一个i,来读取数组中的元素
- foreach (int i in arr)
- Console.WriteLine(i);
我们在Test类里声明一个过程,它的作用就是初始化并打印一个数组,它带有一个参数ArrLength,它指定了数组的长度。代码如下:
- //引入一个命名空间
- using System;
- //声明一个Test类
- class Test
- {
- //初始化并打印一个数组
- //它带有一个参数ArrLength指定了数组的长度
- static void PrintArr(int ArrLength)
- {
- //声明一个数组,并把它的长度设定为参数ArrLength
- int[] arr = new int[ArrLength];
- //用循环来给数组的每个元素赋值
- for (int i = 0; i < ArrLength; i++)
- //元素值就是i本身
- arr[i] = i;
- //在屏幕上输出一行Print Array's value
- //意思就是打印数组的值
- Console.WriteLine("Print Array's value");
- //用另个循环把数组的每个循环打印出来,
- for (int i = 0; i < arr.Length; i++)
- //{0}表示要打印一个值,0代表要打印逗号后面的第一个变量
- //{1}也就是要打印逗号后面第2个变量
- Console.WriteLine("arr[{0}]={1}",i,arr[i]);
- }
- //声明一个入口函数
- static void Main()
- {
- //声明一个i变量,并把处置设为1
- int i = 1;
- while (i > 0)
- {
- //屏幕输出请输入数组的长度
- Console.WriteLine("Please enter the array's length:");
- //用i来读取输入的数字
- //因为ReadLine函数返回的是字符类型,所以要转换成证整数赋给i
- i = Int32.Parse(Console.ReadLine());
- //指定数组长度,打印数组
- PrintArr(i);
- }
- }
- }

屏幕打出了Please enter the array's length,请输入数组的长度,假如我们输入3,看效果,然后我们再输入0:

输入3的时候屏幕打出了我们指定长度的3个元素,当然我们也可以实验其他的值。但是我们输入0或者小于0的时候,程序就跳出了,这是我们程序中while循环的作用。
好,我们看一下static void PrintArr(int ArrLength)方法,前面方法定义了一个static静态关键字,假如我们把这个关键字去掉的话,我们再执行会出错。为什么会这样呢?这是因为Main函数本身是一个静态的过程,它只能调用域里面的静态成员。关于这一点我们会在以后的课程详细的讲解。如果不想把PrintArr定义成静态过程,有什么好的解决方法吗?有!可以把它声明在另外一个类里。
声明一个新类,名字叫SetArray,把我们刚才写的PrintArr拷贝过去。然后改写Main函数。代码如下:
- using System;
- //声明一个新类,名字叫SetArray
- class SetArray
- {
- //前面必须要加上public属性,Main函数中才能调用
- public void PrintArr(int ArrLength)
- {
- int[] arr = new int[ArrLength];
- for (int i = 0; i < ArrLength; i++)
- arr[i] = i;
- Console.WriteLine("Print Array's value");
- for (int i = 0; i < arr.Length; i++)
- Console.WriteLine("arr[{0}]={1}", i, arr[i]);
- }
- }
- class Test
- {
- static void Main()
- {
- //这里创建了一个SetArray类的实例
- SetArray arr = new SetArray();
- int i = 1;
- while (i > 0)
- {
- Console.WriteLine("Please enter the array's length:");
- i = Int32.Parse(Console.ReadLine());
- //调用实例中PrintArr方法
- arr.PrintArr(i);
- }
- }
- }