复杂数据类型(一)
类型特点:
1.数据集合:一般是多个数据(变量)集合在一起构成的数据
2.自定义:一般可以自己取名字,可以自定义的数据(变量)
具体特点
枚举:整形常量的集合,可以自定义
数组:任意变量类型顺序存储的数据
结构体:任意变量的数据集合,可以自定义
一.枚举
1.基本概念
枚举是什么
枚举是一个比较特别的存在,它是一个被命名的整形常量的集合(不会被改变),一般用它来表示状态类型等等
申明枚举和申明枚举变量
申明枚举:相当于是创建一个自定义的枚举类型
申明枚举变量:使用申明的自定义枚举类型创建一个枚举变量
申明枚举语法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| enum E_自定义枚举名;
{ 自定义枚举项名字, 自定义枚举项名字1, 自定义枚举项名字2, } enum E_自定义枚举名;
{ 自定义枚举项名字 =5, 自定义枚举项名字1, 自定义枚举项名字2, 自定义枚举项名字3 =100, 自定义枚举项名字4 }
|
2.在哪里申明枚举
在namespace语句块中(常用)
class语句块中,struct语句块中(不常用)
注意:枚举不能在函数语句块中申明!!!!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| namespace Lesson1 { enum E_MonsterType { Normal, Boss, } internal class Program { static void Main(string[] args) { Console.WriteLine("Hello, World!"); } } }
|
3.枚举的使用(关于申明枚举与枚举变量)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| namespace Lesson1 { enum E_MonsterType { Normal, Boss, } internal class Program { static void Main(string[] args) { E_MonsterType play = E_MonsterType.Normal; if(play==E_MonsterType.Normal) { 相对应的逻辑; }else if(play==E_MonsterType.Boss) { 其他对应逻辑; } } } }
|
总结:申明枚举变量
自定义的枚举类型 变量名=默认值(自定义的枚举类型.枚举项)
用来配合条件分支语句来使用。
Ps:枚举和switch是“天生一对”
1 2 3 4 5 6 7 8 9 10 11 12
| E_MonsterType monster =E_MonsterType.Boss; switch (monsterType) { case E_MonsterType.Normal; break; case E_MonsterType.Boss; break; default: break; }
|
4.枚举的类型转换
只能转两个!!!
枚举和int互转
1 2 3 4 5 6 7 8 9 10 11
| E_MonsterType monster =E_MonsterType.Boss; int i=(int)monster;
Console.WriteLine(i);
int t=int Parse(Console.ReadLine()); monster=(E_MonsterType)t;
monster=0;
|
枚举和string相互转换
1 2 3 4 5 6 7 8 9 10 11 12
| E_MonsterType monster =E_MonsterType.Boss; string str=monster.Tostring(); Console.WriteLine(str);
monster = (E_MonsterType)Enum.parse(typeof(E_MonsterType),"Boss"); Consloe.WriteLine(playerType);
|
5.枚举的作用
在游戏开发中,对象很多时候会有许多状态,比如玩家有一个动作状态,我们需要用一个变量或者标识,来表示当前玩家是处于的是哪一种状态。
枚举可以帮助我们清晰的分清楚状态的含义。
备注:在写枚举时,你可以用到三杠注释,这样在你申明枚举类型时鼠标移到类型上会有提示,方便阅读。
(枚举的题目实例)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| namespace Lesson1 { enum E_SexType { Man, Woman, } enum E_zhiye { zhanshi, fashi, lieren, } internal class Program { static void Main(string[] args) { try { string sex = " "; string zhi = " "; string jineng = " "; Console.WriteLine("请输入性别(男性0,女性1):"); E_SexType sex1 = (E_SexType)int.Parse(Console.ReadLine()); int akt = 0; int def = 0; switch (sex1) { case E_SexType.Man: sex = "男性"; akt += 50; def += 100; break; case E_SexType.Woman: sex = "女性"; akt += 150; def += 20; break; } Console.WriteLine("请输入职业(战士0,法师1,猎人2):"); E_zhiye zhiye=(E_zhiye)int.Parse(Console.ReadLine()); switch (zhiye) { case E_zhiye.zhanshi: zhi = "战士"; akt += 20; def+= 100; jineng = "冲锋"; break; case E_zhiye.fashi: zhi = "法师"; akt += 200; def += 10; jineng = "奥术冲击"; break; case E_zhiye.lieren: zhi = "猎人"; akt += 120; def += 30; jineng = "假死"; break; } Console.WriteLine("你选择了\"{0}{1}\",攻击力:{2},防御力:{3},职业技能:{4}。",sex,zhi,akt,def,jineng); }catch { Console.WriteLine("请输入数字:"); } } } }
|
二.数组
1.一维数据
基本概念
数组是存储一组相同类型数据的集合
数组分为一维,多维,交错数组
一般情况下,一维数组就简称数组。
数组的申明
第一种申明写法:
变量类型[] 数组名;(该申明的特点:只是申明了一个数组,但是并没有对这个数组进行分配内存,也没有初始化。
变量类型可以是我们学过的或者没学过的所有变量类型(包括枚举)。
1 2
| int[] arr1; bool[] arr6;
|
第二种申明写法:
变量类型[] 数组名 = new 变量类型[数组的长度];
不同于第一种的是,在定义的时候它其实以及给数组分配内存了,也进行初始化了。相当于开了五个房间,但是房间里面的值默认为0.
第三种申明写法:
变量类型[] 数组名 = new 变量类型[数组的长度]{内容1,内容2,。。。。。。}(数量要相对应}。
1
| int[] arr3 =new int[5] {1,2,3,4,5};
|
第四种申明写法:
变量类型[] 数组名 = new 变量类型[]{内容1,内容2,。。。。。。}。
后面的内容决定了数组的长度。
1
| int[] arr3 =new int[] {1,2,3,4,5,6,7};
|
第五种申明写法:
变量类型[] 数组名 = {内容1,内容2,。。。。。。}。(内容一定要和数组名对应)
1 2
| int[] arr3 ={1,2,3,4,5,6,7}; bool[] arr4={true.false};
|
数组的使用
数组的长度
如何获取数组的长度?
1 2
| int[] array={1,2,3,4,5}; Console.WriteLine(array.Length);
|
获取数组中的元素
数组中的下标和索引从0开始,不能越界。
1 2
| Console.WriteLine(array[0]); Console.WriteLine(array[2]);
|
修改数组中的元素
遍历数组
通过循环快速获取数组中的每一个元素。
1 2 3
| for(int i=0;i<array.Length;i++){ Console.WriteLine(array[i]); }
|
增加数组的元素
注意:数组初始化之后,是不能够直接添加新的元素的,要增加,得做一个“新家”再“搬过去”。
1 2 3 4 5 6 7 8
| int[]array2=new int[6]; for(int i=0;i<array.Length;i++){ array2[i]=array[i]; } array=array2;
array[5]=999;
|
删除数组的元素
与增加相似,数组初始化之后,也不能删减元素,还是要搬家。与上文类似,不多做代码块叙述。(数组遍历长度应为新数组的长度,因为比较小)(i<array3.Length)
查找数组中的元素
只有通过遍历才可以,没得说。