C#四部曲基础——复杂数据类型
一.概述
复杂数据(变量)类型
特点:
数据集合:一般是多个数据(变量)集合在一起构成的数据
自定义:一般可以自己取名字,可以自定义的数据(变量)
1.枚举
整型常量的集合,可以自定义
2.数组
任意变量类型的顺序存储的数据
3.结构体
任意变量的数据集合,可以自定义
二.枚举
1.基本概念
(1)枚举是什么
枚举是一个比较特别的存在
它是一个被命名的整型常量的集合
一般用于表示状态 类型 等等
(2)申明枚举和申明枚举变量
注意:申明枚举和申明枚举变量时两个概念
申明枚举: 相当于是创建了一个自定义的枚举类型
申明枚举变量: 使用申明的自定义枚举类型 创建了一个枚举变量
(3)申明枚举语法
枚举名 以E或者E_开头 作为我们的命名规范
enum E_自定义枚举名
{
自定义枚举项名字0,
自定义枚举项名字1,
自定义枚举项名字2,
}
枚举中包裹的整型常量,第一个默认为0,下面的会以此增加1。
比如自定义枚举项名字0没有赋值,默认为0;自定义枚举项名字1也没有赋值就默认为1;自定义枚举项名字同理为2。
如果:
enum E_自定义枚举名
{
自定义枚举项名字0 = 5,
自定义枚举项名字1,——> 6
自定义枚举项名字2 = 100,
自定义枚举项名字3,——>101
自定义枚举项名字4,——>102
}
是根据上一个常量的值默认累加1;
enum E_number
{
a = 5,
b,
c = 100,
d,
e,
}
Console.WriteLine(E_number.b);
Console.WriteLine(E_number.d);
Console.WriteLine(E_number.e);
2.在哪里申明枚举
namespace语句块中(常用)
class语句块中和struct语句块中
枚举不能在函数语句块中申明
3.枚举的使用
申明枚举变量
自定义的枚举类型 变量名 = 默认值;(自定义的枚举类型.枚举项)
enum E_PlayerType
{
Main,
Other,
}
E_PlayerType playerType = E_PlayerType.Main;
if(playerType == E_PlayerType.Main)
{
Console.WriteLine("主玩家逻辑");
}
else
{
Console.WriteLine("其他玩家逻辑");
}
枚举和switch语句是天生一对
enum E_number
{
a,
b,
c,
d,
e,
}
E_number number = E_number.a;
switch(number)
{
case E_number.a:
break;
case E_number.b:
break;
case E_number.c:
break;
case E_number.d:
break;
case E_number.e:
break;
}
4.枚举的类型转换
(1)枚举和int转换
enum E_PlayerType
{
Main,
Other,
}
E_PlayerType playerType = E_PlayerType.Main;
int i = (int)playerType;
Console.WriteLine(i);
(2)枚举和string转换
enum E_PlayerType
{
Main,
Other,
}
E_PlayerType playerType = E_PlayerType.Main;
string str = playerType.ToString();
Console.WriteLine(str);
//Parse后,第一个参数:你要转的为的枚举类型,第二个参数:用于转换的对应枚举项的字符串
playerType = (E_PlayerType)Enum.Parse(typeof(E_PlayerType),"other");
Console.WriteLine(playerType);
5.枚举的作用
在游戏开发中,对象很多时候会有很多的状态
比如玩家会有一个动作状态,我们需要用一个变量或者标识 来表示当前玩家处于的是哪种状态
综合考虑,可能会使用int 来表示他的状态
1 行走 2 待机 3 跑步 4 跳跃 …… 等等
枚举可以帮我们清晰的分清楚状态的含义
三.数组
1.一维数组
(1)基本概念
数组是存储一组相同类型数据的集合
数组分为一维、多维、交错数组
一般情况下,一维数组被简称为数组
(2)数组的申明
①变量类型[ ] 数组名;
只是申明了,但没有申请内存空间
变量类型可以是我们学过的或者没学过的所有变量类型
int[] arr1;
②变量类型[ ] 数组名 = new 变量类型[ 数组的长度 ];
这种方式申明数组,相当于申请了五个内存空间,但内存空间里的int值,默认为0
int[] arr2 = new int[5];
③变量类型[ ] 数组名 = new 变量类型[ 数组的长度 ]{内容1,内容2,内容3,……};
大括号内的内容数量要和数组长度一样,一一对应
int[] arr3 = new int[5]{1,2,3,4,5};
④变量类型[ ] 数组名 = new 变量类型[ ]{内容1,内容2,内容3,……};
相当于只申明了数组的内存位置,没有申请空间大小,空间大小有后面的大括号的内容数量决定,也决定了数组长度
int[] arr4 = new int[]{1,2,3,4};
⑤变量类型[ ] 数组名 = {内容1,内容2,内容3,……};
int[] arr5 = {1,2,3,4};
(3)数组的使用
int[] array = {1,2,3,4,5};
//1数组的长度
//数组变量名.Length
Console.WriteLine(array.Length);
Console.WriteLine("******************");
//2获取数组中的元素
//数组中的下标和索引,是从0开始的
//通过索引下标去获取数组中的元素是,不能越界
Console.WriteLine(array[0]);
Console.WriteLine(array[2]);
Console.WriteLine(array[4]);
Console.WriteLine("******************");
//3修改数组中的元素
array[0] = 99;
Console.WriteLine(array[0]);
Console.WriteLine("******************");
//4遍历数组
for(int i = 0;i < array.Length; i++)
{
Console.WriteLine(array[i]);
}
Console.WriteLine("******************");
//5增加数组中的元素
//数组初始化后是不能直接添加新的元素的
int[] array2 = new int[6];
for(int i = 0;i < array.Length; i++)
{
array2[i] = array[i];
}
array = array2;
array[5] = 999;
for(int i = 0;i < array.Length; i++)
{
Console.WriteLine(array[i]);
}
Console.WriteLine("******************");
//6删除数组中的元素
int[] array3 = new int[4];
for(int i = 0;i < array3.Length; i++)
{
array3[i] = array[i];
}
array = array3;
for(int i = 0;i < array.Length; i++)
{
Console.WriteLine(array[i]);
}
Console.WriteLine("******************");
//7查找数组中的元素
//只能通过遍历数组,才能确定,数组中是否存储了目标元素
int a = 3;
for(int i = 0;i < array.Length; i++)
{
if(a == array[i])
{
Console.WriteLine("与a相等的元素在数组索引为{0}的位置",i);
}
}
2.二维数组
(1)基本概念
二维数组是使用两个下标(索引)来确定元素的数组
两个下标可以理解为行标和列标
比如矩阵
1 2 3
4 5 6
可以用二维数组 int[ 2 , 3 ] 表示
好比两行三列的数据集合
(2)二维数组的申请
①变量类型[ , ] 二维数组变量名;
只是申明了,但没有申请内存空间 ,申明后,后面需要进行初始化
int[,] arr;
②变量类型[ , ] 二维数组数组名 = new 变量类型[ 行,列 ];
int[,] arr2 = new int[3,3];
这种方式申明数组,相当于申请了三行三列的内存空间,但内存空间里的int值,默认为0
③变量类型[ , ] 二维数组数组名 = new 变量类型[ 行,列 ]{ {0行0列,0行1列,0行2列,……}, {1行0列,1行1列,1行2列,……}, {2行0列,2行1列,2行2列,……}…… };
int[,] arr3 = new int[3,3]{{1,2,3},
{4,5,6},
{7,8,9}} ;
④变量类型[ , ] 二维数组数组名 = new 变量类型[ ,]{ {0行0列,0行1列,0行2列,……}, {1行0列,1行1列,1行2列,……}, {2行0列,2行1列,2行2列,……}…… };
int[,] arr4 = new int[,]{{1,2,3},
{4,5,6},
{7,8,9}} ;
⑤变量类型[ , ] 二维数组数组名 = { {0行0列,0行1列,0行2列,……}, {1行0列,1行1列,1行2列,……}, {2行0列,2行1列,2行2列,……}…… };
int[,] arr5 = {{1,2,3},
{4,5,6},
{7,8,9}} ;
(3)二维数组的使用
int[,] array = new int[,]{{1,2,3},
{4,5,6}};
//1.二维数组的长度
//我们要分别获取二维数组的行数和列数
Console.WriteLine("二维数组的长度");
Console.WriteLine(array.GetLength(0));
Console.WriteLine(array.GetLength(1));
//2.获取二维数组中的元素
Console.WriteLine("获取二维数组中的元素");
Console.WriteLine(array[0,1]);
Console.WriteLine(array[1,2]);
//3.修改二维数组中的元素
Console.WriteLine("修改二维数组中的元素");
array[0,1] = 99;
Console.WriteLine(array[0,1]);
//4.遍历二维数组
Console.WriteLine("遍历二维数组");
for(int i = 0 ; i < array.GetLength(0); i++)
{
for(int j = 0; j < array.GetLength(1); j++)
{
Console.Write(array[i,j]+" ");
}
Console.WriteLine(" ");
}
//5.增加二维数组中的元素
Console.WriteLine("增加二维数组中的元素");
int[,] array2 = new int[3,3];
for(int i = 0 ; i < array.GetLength(0); i++)
{
for(int j = 0; j < array.GetLength(1); j++)
{
array2[i,j] = array[i,j];
}
}
array = array2;
array[2,0] = 7;
array[2,1] = 8;
array[2,2] = 9;
for(int i = 0 ; i < array.GetLength(0); i++)
{
for(int j = 0; j < array.GetLength(1); j++)
{
Console.Write(array[i,j]+" ");
}
Console.WriteLine(" ");
}
//6.删除二维数组中的元素
Console.WriteLine("删除二维数组中的元素");
int[,] array3 = new int[3,2];
for(int i = 0 ; i < array3.GetLength(0); i++)
{
for(int j = 0; j < array3.GetLength(1); j++)
{
array3[i,j] = array[i,j];
}
}
array = array3;
for(int i = 0 ; i < array.GetLength(0); i++)
{
for(int j = 0; j < array.GetLength(1); j++)
{
Console.Write(array[i,j]+" ");
}
Console.WriteLine(" ");
}
//7.查找二维数组中的元素
Console.WriteLine("查找二维数组中的元素");
int a = 7;
for(int i = 0 ; i < array.GetLength(0); i++)
{
for(int j = 0; j < array.GetLength(1); j++)
{
if(array[i,j] == a)
{
Console.WriteLine("与a相等的元素在二维数组索引为[{0},{1}]的位置",i,j);
}
}
}
3.交错数组(非重点知识)
(1)基本概念
交错数组是数组的数组,每个维度的数量可以不同
注意:二维数组的每行的列数相同,交错数组每行的列数可能不同
(2)交错数组的申请
①变量类型[ ][ ] 交错数组名;
int[][] arr1;
②变量类型[ ][ ] 交错数组名 = new 变量类型[ 行数 ][ ];
int[][] arr2 = new int[3][];
③变量类型[ ][ ] 交错数组名 = new 变量类型[ 行数 ][ ]{ 一维数组1,一维数组2,……};
int[][] arr3 = new int[3][]{ new int[]{1,2,3},
new int[]{1,2},
new int[]{1} };
④变量类型[ ][ ] 交错数组名 = new 变量类型[ ][ ]{ 一维数组1,一维数组2,……};
int[][] arr4 = new int[][]{ new int[]{1,2,3},
new int[]{1,2},
new int[]{1} };
⑤变量类型[ ][ ] 交错数组名 ={ 一维数组1,一维数组2,……};
int[][] arr5 ={ new int[]{1,2,3},
new int[]{1,2},
new int[]{1} };
(3)交错数组的使用
int[][] array ={ new int[]{1,2,3},
new int[]{4,5},
new int[]{6} };
//1.交错数组的长度
//我们要分别获取二维数组的行数和列数
Console.WriteLine("交错数组的长度");
//行
Console.WriteLine(array.GetLength(0));
//列(得到某一行的列数)
Console.WriteLine(array[0].Length);
//2.获取交错数组中的元素
Console.WriteLine("获取交错数组中的元素");
Console.WriteLine(array[0][1]);
Console.WriteLine(array[2][0]);
//3.修改交错数组中的元素
Console.WriteLine("修改交错数组中的元素");
array[0][1] = 99;
Console.WriteLine(array[0][1]);
//4.遍历交错数组
Console.WriteLine("遍历交错数组");
for(int i = 0 ; i < array.GetLength(0); i++)
{
for(int j = 0; j < array[i].Length; j++)
{
Console.Write(array[i][j] + " ");
}
Console.WriteLine(" ");
}
Visual Studio可运行
//5.增加交错数组中的元素
int[][] array = {new int[]{1, 2, 3},
new int[]{4, 5},
new int[]{6}};
Console.WriteLine("增加交错数组中的元素");
int[][] array2 = {new int[3],
new int[2],
new int[1],
new int[4]};
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array[i].Length; j++)
{
array2[i][j] = array[i][j];
}
}
array = array2;
array[3][0] = 7;
array[3][1] = 8;
array[3][2] = 9;
array[3][3] = 10;
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array[i].Length; j++)
{
Console.Write(array[i][j] + " ");
}
Console.WriteLine();
}
//6.删除j交错数组中的元素
int[][] array ={ new int[]{1,2,3},
new int[]{4,5},
new int[]{6} };
Console.WriteLine("删除交错数组中的元素");
int[][] array3 ={ new int[3],
new int[2]};
for (int i = 0; i < array3.GetLength(0); i++)
{
for (int j = 0; j < array3[i].Length; j++)
{
array3[i][j] = array[i][j];
}
}
array = array3;
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array[i].Length; j++)
{
Console.Write(array[i][j] + " ");
}
Console.WriteLine(" ");
}
//7.查找交错数组中的元素
int[][] array ={ new int[]{1,2,3},
new int[]{4,5},
new int[]{6} };
Console.WriteLine("查找交错数组中的元素");
int a = 5;
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array[i].Length; j++)
{
if (array[i][j] == a)
{
Console.WriteLine("与a相等的元素在交错数组索引为[{0},{1}]的位置", i, j);
}
}
}
更多推荐
所有评论(0)