一. C#的声明数组和赋值
1. 数组的声明和初始化语法如下:
数据类型[ ] 数组名 = new 数据类型[长度] ;
注意:数组名像变量名一样要遵循标识符的命名规则;长度必须是整数
下面我们来比较变量和数组的声明与初始化,右边是在内存中为变量和数组分配空间的示意:
对比变量 x 和数组 y 就会发现,数组 y 中其实包含了 3 个 double 类型的变量,为什么是 3 个?因为初始化数组时在 [ ] 中声明的长度为 3 。
既然都在数组 y 中,所以 3 个变量(应该叫数组元素)的名字都叫 y ,为了区分它们,按照顺序给它们加上索引 [0]、[1]、[2] 。
请注意:数组元素的索引从 0 开始递增。那么,数组 y 中 3 个元素的名字就变成了 y[0]、y[1]、y[2] 。
小贴士:数组经过初始化以后,数组元素有默认的初始值,
double 类型为 0.0 , int 类型为 0 , char 类型为 'a' , bool 类型为 false , string 类型为 null 。
2. 数组元素的赋值与普通变量相同。
例如,声明了一个长度为 3 的 string 类型数组,逐个赋值,然后输出:
3. 如何知道一个数组的长度呢?
数组.Length 属性会返回数组的长度(即数组元素的个数)。
例如
代码中的 friends.Length 会返回 friends 数组的长度,请看运行结果:
二. C#访问数组元素
1. 数组元素的多种初始化方式
数组 b、c、d 是在初始化时为数组元素指定初始值。
数组 d 用 [3] 声明了数组长度,后面 { } 中的初始值个数要与 [ ] 中声明的长度相同。
数组 b、c 初始化没有声明长度,长度由 { } 中的初始值个数确定。
2. 上一节输出同学名字的例子可以改为
三. 算法——查找(一)
循环访问一组数据,从中找出符合条件的数据,这样的算法叫做查找。
写查找的算法,需要做 2 件事,一是写循环访问每一个数据,二是对每一个数据进行验证。
这样,就需要写 2 个“条件”:循环条件和筛选条件。
例如
循环条件是x<=10,筛选条件是x%2==0。
初学者常见的错误是把 2 个条件都写在循环条件里,比如把循环条件写成 x<=10 && x%2== 0
请注意甄别:循环条件必须能够遍历每一个数据,
如果你写的循环条件会漏掉某些数据,或者循环没有能够正常运行,请检查是不是把筛选条件也写在循环条件里了。
运行结果是
四. 算法——查找(二)
上一节是把符合条件的数据输出出来,但有时只想知道有没有符合条件的数据,不用输出。
例如
查找一组人名,如果人名中包含“诺贝尔”,就打印“有诺贝尔”,如果没有,就打印“木有木有”
运行结果
但是这段代码有个逻辑错误,正确的逻辑应该是:一组数据中只要有一个符合条件,就可以认为“有符合条件的数据”;
但只有一组数据中每一个都不符合条件,才能认为“没有符合条件的数据”——有一个相等即为"有",全都不等才是"无"。
代码修改为
变量 hasNbr 起到了关键作用:记录筛选结果。
它的初始值为 false ,表示没有,如果循环中找到了相等的数据,再修改 hasNbr 的值为 true ,表示有。
循环结束后,只要看看变量 hasNbr 是 true 还是 false ,就知道循环中是否修改过。
其中,break 其实不是必须的,但是一旦确认有诺贝尔,那么继续筛选下去就没有意义,用 break 跳出循环可以节省时间。
运行结果为
五. C#的foreach关键字
for 循环使我们可以通过索引访问数组元素;而 foreach 循环则可以不依赖索引而读取每一个数组元素。
下面的示例代码声明了一个整型数组,然后通过两种方法输出数组元素:
运行结果是
使用foreach 的语法
第4点,如上面的代码,迭代变量 x 只能用于读取数组 num 中的值,但是不能给数组元素赋值
如果尝试给 x 赋值,则会有下面的错误提示:
foreach 主要用于,C#中有一些类似于数组的数据组织方式,它们中有一些是没有元素索引的,对于这些元素,只能通过 foreach 遍历。
六. C#的二维数组的声明和访问
二维数组,就是以数组作为元素的数组。
来看看二维数组和一维数组的对比
二维数组中有2 个一维数组分别为 b[0]、b[1]。
每一个一维数组中的元素索引分别为 0、1、2,
即每一个一维数组又包含3个int型变量:b[0,0]、b[0,1]、b[0,2]、b[1,0]、b[1,1]、b[1,2]。
二维数组的声明
int[,] arr = new int[2,3]; //包含2个一维数组,每个一维数组包含3个变量,总共2*3=6个数组元素
二维数组的赋值的输出
arr[1,0] = 28; //二维数组元素有2个索引,都是从0开始,以arr数组为例,元素索引从[0,0]到[1,2]
Console.Write( arr[1,0] );
例如
有 4 名同学参加语文和数学两门考试,我们用二维数组存储他们的成绩,每位同学的 2 门课分数,存储在一个一维数组中:
运行结果