qidao123.com技术社区-IT企服评测·应用市场

标题: CSharp_base [打印本页]

作者: 没腿的鸟    时间: 2025-4-25 00:41
标题: CSharp_base
C# 基础篇

github仓库:https://github.com/EanoJiang/CSharp_base

枚举(enum)

枚举是一个被命名的整形常量的集合
用于表示: 状态 类型
申明枚举:创建一个自定义的枚举类型
申明枚举变量:使用申明的自定义的枚举类型,来创建一个枚举变量
语法
  1.         //语法:枚举名 以E或E_开头,作为命名规范
  2.         enum E_自定义枚举名{
  3.             自定义枚举项名字1,//枚举中的第一个默认值是0,也可以赋值,下面依次累加。
  4.             自定义枚举项名字2,//1
  5.             自定义枚举项名字3,//2
  6.         }
复制代码
在那里申明枚举

枚举不能在函数语句块中声明
  1.         #region 在哪里申明枚举
  2.         //namespace语句块中
  3.         //class语句块中
  4.         //struct语句块中
  5.         //枚举不能再函数语句块中声明
  6.         enum E_MonsterType{
  7.             Normal,
  8.             Boss,
  9.         }
  10.         enum E_PlayerType{
  11.             Main,
  12.             Other,
  13.         }
  14.         #endregion
复制代码

枚举的用法

  1.             #region 枚举的用法
  2.             //申明枚举变量
  3.             //前面自定义的 变量名 = 默认值;
  4.             // (这里的默认值的格式:自定义的枚举类型.枚举项)枚举类型
  5.             E_MonsterType monsterType = E_MonsterType.Normal;
  6.             E_PlayerType playerType  = E_PlayerType.Main;
  7.             if(playerType == E_PlayerType.Main){
  8.                 Console.WriteLine("主角的逻辑");
  9.             }
  10.             else if(playerType == E_PlayerType.Other){
  11.                 Console.WriteLine("其他角色的逻辑");
  12.             }
  13.             //枚举很适合和switch配套使用
  14.             //也可以贯穿,两种情况使用同一个逻辑
  15.             switch (monsterType){
  16.                 case E_MonsterType.Normal:
  17.                     Console.WriteLine("普通怪物的逻辑");
  18.                     break;
  19.                 case E_MonsterType.Boss:
  20.                     Console.WriteLine("BOSS的逻辑");
  21.                     break;
  22.             }
  23.             #endregion
复制代码
枚举的类型转换
  1.             #region 枚举的类型转换
  2.             //枚举转int——括号强转
  3.             int i1 = (int)playerType;
  4.             Console.WriteLine(i1);
  5.             //int 转枚举——隐式转换
  6.             playerType = 0;
  7.             Console.WriteLine(playerType);
  8.   
  9.             //枚举转string——ToString()方法
  10.             string s1 = playerType.ToString();
  11.             Console.WriteLine(s1);
  12.             //string 转枚举——Parse()方法 + 自定义枚举类型括号强转
  13.             //语法:(自定义枚举类型)Enum.Parse(typeof(自定义枚举类型), "要转换的字符串");
  14.             //注意要转换的字符串必须是枚举里有的常量
  15.             playerType = (E_PlayerType)Enum.Parse(typeof(E_PlayerType), "Main");
  16.             Console.WriteLine(playerType);
  17.             #endregion
复制代码
(总结)枚举的作用
在游戏开发中,对象通常会有很多状态
每个状态需要一个变量 / 标识 来表示,以便于后续使用时的判断(该对象当前处于什么状态)
不要去用int 表示他的状态 ,1走路        2空闲 3跑步 4跳跃
枚举的使用可以很好的分清楚各状态的含义,提高代码可读性
习题

  1.     /// <summary>
  2.     /// 状态
  3.     /// </summary>
  4.     enum E_StateOnlineType{
  5.         Offline,
  6.         Online,
  7.         Busy,
  8.         Invisible,
  9.     }
复制代码
  1.         #region 题目1 用户状态
  2.         try
  3.         {
  4.             Console.WriteLine("请输入状态(0-3):");
  5.             E_StateOnlineType state = (E_StateOnlineType)Enum.Parse(typeof(E_StateOnlineType), Console.ReadLine());
  6.             Console.WriteLine(state);
  7.         }
  8.         catch{
  9.             Console.WriteLine("输入错误,请输入0-3的数字!");
  10.         }
  11.         #endregion
复制代码
  1.     /// <summary>
  2.     /// 咖啡类型
  3.     /// </summary>
  4.     enum E_CoffeeType{
  5.         /// <summary>
  6.         /// 中杯
  7.         M,
  8.         /// <summary>
  9.         /// 大杯
  10.         /// </summary>
  11.         L,
  12.         /// <summary>
  13.         /// 特大杯
  14.         /// </summary>
  15.         XL,
  16.     }
复制代码
  1.         #region 题目2 coffee
  2.         try{
  3.             Console.WriteLine("请输入咖啡类型(M/L/XL):");
  4.             E_CoffeeType coffeeType = (E_CoffeeType)Enum.Parse(typeof(E_CoffeeType), Console.ReadLine());
  5.             switch(coffeeType){
  6.                 case E_CoffeeType.M:
  7.                     Console.WriteLine("中杯咖啡");
  8.                     break;
  9.                 case E_CoffeeType.L:
  10.                     Console.WriteLine("大杯咖啡");
  11.                     break;
  12.                 case E_CoffeeType.XL:
  13.                     Console.WriteLine("特大杯咖啡");
  14.                     break;
  15.                 default:
  16.                     Console.WriteLine("输入错误!");
  17.                     break;
  18.             }
  19.         }
  20.         catch{
  21.             Console.WriteLine("输入错误,请输入M/L/XL!");
  22.         }
  23.   
  24.         #endregion
  25.   
复制代码
  1. [/code][size=5]数组[/size]
  2. [size=4]一维数组(数组)[/size]
  3. 一维、多维、交错数组
  4. [code]namespace 数组;
  5. class Program
  6. {
  7.     static void Main(string[] args)
  8.     {
  9.         #region 数组声明
  10.         //只声明数组名,不初始化
  11.         //变量类型[] 数组名;
  12.         int[] arr1;
  13.         //声明并初始化数组的长度,元素默认值是0
  14.         //变量类型[] 数组名 = new 变量类型[数组长度];
  15.         int[] arr2 = new int[5];
  16.         //声明并初始化数组的长度和元素值
  17.         //变量类型[] 数组名 = new 变量类型[数组长度] {元素值1, 元素值2, 元素值3...};
  18.         int[] arr3 = new int[5] { 1, 2, 3, 4, 5 };
  19.         //声明并初始化数组的元素值,数组长度自动计算
  20.         //变量类型[] 数组名 = new 变量类型[] {元素值1, 元素值2, 元素值3...};
  21.         int[] arr4 = new int[] { 1, 2, 3, 4};
  22.         //声明并初始化数组——最简单的方法
  23.         int[] arr5 = { 1, 2, 3, 4, 5 };
  24.         bool[] arr6 = new bool[] { true, false, true, false };
  25.         #endregion
  26.   
  27.         #region 数组使用
  28.         int[] arr = { 1, 2, 3, 4, 5 };
  29.         //1. 获取数组长度
  30.         //数组名.Length
  31.         Console.WriteLine("数组长度:" + arr.Length);
  32.         //2. 获取数组元素
  33.         //数组名[索引]
  34.         //注意不要越界
  35.         Console.WriteLine("数组第一个元素:" + arr[0]);
  36.         //3. 修改数组元素
  37.         //数组名[索引] = 新值;
  38.         arr[0] = 10;
  39.         Console.WriteLine("修改后的数组第一个元素:" + arr[0]);
  40.         //4. 遍历数组
  41.         for(int i = 0; i < arr.Length; i++){
  42.             Console.WriteLine("数组第" + i + "个元素:" + arr[i]);
  43.         }
  44.         //5. 增加数组元素(先拷贝数组)
  45.         int[] array2 = new int[6];
  46.         for(int i = 0; i < arr.Length; i++){
  47.             array2[i] = arr[i];
  48.         }
  49.         arr = array2;
  50.         arr[5] = 6;
  51.         Console.WriteLine("增加后的数组:" + string.Join(",", arr));
  52.         //6. 删除数组元素(先拷贝数组)
  53.         int[] array3 = new int[4];
  54.         for(int i = 0; i < 4; i++){
  55.             array3[i] = arr[i];
  56.         }
  57.         arr = array3;
  58.         Console.WriteLine("删除后的数组:" + string.Join(",", arr));
  59.         //7. 查找数组元素
  60.         int elem = 3;
  61.         for(int i = 0; i < arr.Length; i++){
  62.             if(arr[i] == elem){
  63.                 Console.WriteLine("元素" + elem + "在数组的索引为:" + i);
  64.                 break;
  65.             }
  66.         }
  67.         #endregion
  68.   
  69.     }
  70. }
复制代码
用来批量存储游戏中同一类型的所有对象,比如所有的enemy和player
习题
  1. #region 1
  2. int[] arr1 = new int[100];
  3. for(int i = 0; i < arr1.Length; i++){
  4.     arr1[i] = i;
  5. }
  6. Console.WriteLine(string.Join(",", arr1));
  7. #endregion
复制代码
  1. #region 2
  2. int[] arr2 = new int[100];
  3. for(int i = 0; i < arr2.Length; i++){
  4.     arr2[i] = arr1[i] * 2;
  5. }
  6. Console.WriteLine(string.Join(",", arr2));
  7. #endregion
复制代码
  1. #region 3
  2. Random r1 = new Random();
  3. int[] arr3 = new int[10];
  4. for(int i = 0; i < arr3.Length; i++){
  5.     arr3[i] = r1.Next(0, 101);
  6. }
  7. Console.WriteLine(string.Join(",", arr3));
  8. #endregion
复制代码
  1. #region 4
  2. Random r = new Random();
  3. int[] arr = new int[10];
  4. for(int i = 0; i < arr.Length; i++){
  5.     arr[i] = r.Next(0, 101);
  6. }
  7. Console.WriteLine("原数组:"+string.Join(",", arr));
  8. //MAX MIN
  9. int max = arr[0];
  10. int min = arr[0];
  11. int sum = 0;
  12. for(int i = 0; i < arr.Length - 1; i++){
  13.     max = (max >= arr[i])? max : arr[i];
  14.     min = (min <= arr[i])? min : arr[i];
  15.     sum += arr[i];
  16. }
  17. Console.WriteLine("最大值:"+max);
  18. Console.WriteLine("最小值:"+min);
  19. Console.WriteLine("和:"+sum);
  20. double avg = (double)sum / arr.Length;
  21. Console.WriteLine("平均值:"+avg);
  22. #endregion
复制代码
  1. #region 5
  2. Random r2 = new Random();
  3. int[] arr4 = new int[10];
  4. for(int i = 0; i < arr4.Length; i++){
  5.     arr4[i] = r2.Next(0, 101);
  6. }
  7. Console.WriteLine("原数组:"+string.Join(",", arr4));
  8. for(int i = 0; i < arr4.Length /2; i++){
  9.     arr4[i] = arr4[i] + arr4[arr4.Length-1-i];
  10.     arr4[arr4.Length-1-i] = arr4[i] - arr4[arr4.Length-1-i];
  11.     arr4[i] = arr4[i] - arr4[arr4.Length-1-i];
  12. }
  13. Console.WriteLine("反转后:"+string.Join(",", arr4));
  14. #endregion
复制代码
  1. #region 6
  2. Random r3 = new Random();
  3. int[] arr5 = new int[10];
  4. for(int i = 0; i < arr5.Length; i++){
  5.     arr5[i] = r3.Next(-100, 101);
  6. }
  7. Console.WriteLine("原数组:"+string.Join(",", arr5));
  8. for(int i = 0; i < arr5.Length; i++){
  9.     if(arr5[i]>0) arr5[i]++;
  10.     else if(arr5[i]<0) arr5[i]--;
  11. }
  12. Console.WriteLine("变化后:"+string.Join(",", arr5));
  13. #endregion
复制代码
  1. #region 7
  2. int[] arr6 = new int[10];
  3. //输入
  4. try{
  5.     for(int i = 0; i < arr6.Length; i++){
  6.         Console.Write("请输入第{0}个元素:", i+1);
  7.         arr6[i] = Convert.ToInt32(Console.ReadLine());
  8.     }
  9. }
  10. catch{
  11.     Console.WriteLine("输入有误,程序退出");
  12. }
  13. Console.WriteLine("原数组:"+string.Join(",", arr6));
  14. //MAX MIN
  15. int max = arr6[0];
  16. int min = arr6[0];
  17. int sum = 0;
  18. for(int i = 0; i < arr6.Length - 1; i++){
  19.     max = (max >= arr6[i])? max : arr6[i];
  20.     min = (min <= arr6[i])? min : arr6[i];
  21.     sum += arr6[i];
  22. }
  23. Console.WriteLine("最大值:"+max);
  24. Console.WriteLine("最小值:"+min);
  25. Console.WriteLine("平均值:"+(double)sum / arr6.Length);
  26. #endregion
复制代码
交错数组

数组的数组
特点:存储 确定行数,不确定列数的数据
  1. #region 8
  2. string[] arr7 = new string[25];
  3. for(int i = 0; i < arr7.Length; i++){
  4.     arr7[i] = (i%2 == 0)? "■": "□";
  5. }
  6. for(int i = 0; i < arr7.Length; i++){
  7.     Console.Write(arr7[i]);
  8.     if((i+1)%5 == 0 && i!= 0){
  9.         Console.WriteLine();
  10.     }
  11. }
  12. #endregion
复制代码
值类型和引用类型

引用类型:string、数组、(class)类
值类型:其他数据类型,结构体
区别:
值类型:在相互赋值的时间把内容拷贝给对方,一个变另一个不会变
引用类型:两者指向同一个值,一个变另一个也变
  1. namespace 二维数组;
  2. class Program
  3. {
  4.     static void Main(string[] args)
  5.     {
  6.         #region 二维数组的申明
  7.         //申明但不初始化:
  8.         //变量类型[,] 二维数组变量名
  9.         int[,] arr1;
  10.         //变量类型[,] 二维数组变量名 = new int[行数,列数];
  11.         int[,] arr2 = new int[3, 3];
  12.         //申明+初始化:
  13.         //变量类型[,] 二维数组变量名 = new int[行数,列数] { {元素1,元素2,元素3...}, {元素1,元素2,元素3...},... };
  14.         int[,] arr3 = new int[3, 3] {   { 1, 2, 3 },
  15.                                         { 4, 5, 6 },
  16.                                         { 7, 8, 9 }};
  17.         //行列自动计算
  18.         int[,] arr4 = new int[,] {   { 1, 2, 3 },
  19.                                      { 4, 5, 6 },
  20.                                      { 7, 8, 9 }};
  21.         #endregion
  22.         #region 二维数组的使用
  23.         //1.二维数组的长度
  24.         int[,] array1 = new int[,]{ {1,2,3},
  25.                                     {4,5,6},
  26.                                     {7,8,9}};
  27.         //二维数组名.GetLength(dimesion),dimesion为0表示行,为1表示列
  28.         //行
  29.         Console.WriteLine(array1.GetLength(0));
  30.         //列
  31.         Console.WriteLine(array1.GetLength(1));
  32.         //2.获取二维数组的元素
  33.         //二维数组名[行,列]
  34.         Console.WriteLine(array1[0, 0]);
  35.         //3.修改二维数组的元素
  36.         //二维数组名[行,列] = 元素值
  37.         array1[0, 0] = 10;
  38.         Console.WriteLine(array1[0, 0]);
  39.         //4.遍历二维数组
  40.         for (int i = 0; i < array1.GetLength(0); i++)
  41.         {
  42.             for (int j = 0; j < array1.GetLength(1); j++)
  43.             {
  44.                 Console.Write(array1[i, j] + " ");
  45.             }
  46.             Console.WriteLine();
  47.         }
  48.         Console.WriteLine("**************");
  49.         //5.增加数组元素
  50.         int[,] array2 = new int[4,3];
  51.         //先拷贝原数组元素
  52.         for (int i = 0; i < array1.GetLength(0); i++)
  53.         {
  54.             for (int j = 0; j < array1.GetLength(1); j++)
  55.             {
  56.                 array2[i, j] = array1[i, j];
  57.             }
  58.         }
  59.         array1 = array2;
  60.         array1[3, 0] = 100;
  61.         array1[3, 1] = 101;
  62.         array1[3, 2] = 102;
  63.         for(int i = 0; i < array1.GetLength(0); i++)
  64.         {
  65.             for(int j = 0; j < array1.GetLength(1); j++)
  66.             {
  67.                 Console.Write(array1[i, j] + " ");
  68.             }
  69.             Console.WriteLine();
  70.         }
  71.         Console.WriteLine("***************");
  72.         //6.删除数组元素
  73.         //先拷贝原数组元素
  74.         int[,] array3 = new int[2, 3];
  75.         for (int i = 0; i < array3.GetLength(0); i++)
  76.         {
  77.             for (int j = 0; j < array3.GetLength(1); j++)
  78.             {
  79.                 array3[i, j] = array1[i, j];
  80.             }
  81.         }
  82.         array1 = array3;
  83.         for(int i = 0; i < array1.GetLength(0); i++)
  84.         {
  85.             for(int j = 0; j < array1.GetLength(1); j++)
  86.             {
  87.                 Console.Write(array1[i, j] + " ");
  88.             }
  89.             Console.WriteLine();
  90.         }
  91.   
  92.         //7.查找数组元素
  93.         for(int i = 0; i < array1.GetLength(0); i++)
  94.         {
  95.             for(int j = 0; j < array1.GetLength(1); j++)
  96.             {
  97.                 if(array1[i,j] == 6)
  98.                 {
  99.                     Console.WriteLine("元素6的位置为:{0},{1}", i, j);
  100.                 }
  101.             }
  102.         }   
  103.         #endregion
  104.     }
  105. }
复制代码
WHY?
值类型存储在栈空间——系统分配,主动回收,小而快
引用类型存储在堆空间——手动申请开释,大而慢

值类型每次申明相当于开了一个栈空间,赋值的时间互不影响。
引用类型申明的时间开的栈空间存放的是一个指针(地址),指向一块堆内存,赋值的时间其实赋的是地址。
习题

string——特殊的引用类型

每次重新赋值的时间在堆内存重新分配空间,地址也会重新分配
  1. #region 1
  2. int[,] arr1 = new int[100, 100];
  3. int count = 1;
  4. Console.WriteLine("1到10000的二维数组:");
  5. for (int i = 0; i < arr1.GetLength(0); i++){
  6.     for (int j = 0; j < arr1.GetLength(1); j++){
  7.         arr1[i, j] = count;
  8.         count++;
  9.         Console.Write(arr1[i, j] + " ");
  10.     }
  11.     Console.WriteLine();
  12. }
  13. #endregion
复制代码
习题
  1. #region 2
  2. int[,] arr2 = new int[4, 4];
  3. Random r = new Random();
  4. Console.WriteLine("随机生成的4x4二维数组:");
  5. for (int i = 0; i < arr2.GetLength(0); i++){
  6.     for (int j = 0; j < arr2.GetLength(1); j++){
  7.         arr2[i, j] = r.Next(1, 101);
  8.         Console.Write(arr2[i, j] + " ");
  9.     }
  10.     Console.WriteLine();
  11. }
  12. Console.WriteLine("将数组的右上角区域清零:");
  13. for (int i = 0; i < arr2.GetLength(0); i++){
  14.     for (int j = 0; j < arr2.GetLength(1); j++){
  15.         if(i < arr2.GetLength(0) / 2 && j >= arr2.GetLength(1) / 2){
  16.             arr2[i, j] = 0;
  17.         }
  18.         Console.Write(arr2[i, j] + " ");
  19.     }
  20.     Console.WriteLine();
  21. }
  22. #endregion
复制代码
总结

只要是整体重新赋值(像new int[])地址就会改变
而单独改一个元素,地址不会改变
函数(方法)

函数基础

作用:
写在哪儿?
语法
  1. #region 3
  2. int[,] arr3 = new int[3, 3];
  3. Random r = new Random();
  4. Console.WriteLine("随机生成的3x3二维数组:");
  5. for (int i = 0; i < arr3.GetLength(0); i++){
  6.     for (int j = 0; j < arr3.GetLength(1); j++){
  7.         arr3[i, j] = r.Next(1, 11);
  8.         Console.Write(arr3[i, j] + " ");
  9.     }
  10.     Console.WriteLine();
  11. }
  12. Console.WriteLine("对角线:");
  13. int sum = 0;
  14. for (int i = 0; i < arr3.GetLength(0); i++){
  15.     for (int j = 0; j < arr3.GetLength(1); j++){
  16.         if(i == j || i+j == 3-1){
  17.             sum += arr3[i, j];
  18.             Console.Write(arr3[i, j] + " ");
  19.         }
  20.     }
  21.     Console.WriteLine();
  22. }
  23. Console.WriteLine("对角线的和为:" + sum);
  24. #endregion
复制代码
使用
  1. #region 4
  2. int[,] arr4 = new int[5, 5];
  3. Random r = new Random();
  4. //记录最大值的位置
  5. int maxRow = 0, maxCol = 0;
  6. Console.WriteLine("随机生成的5x5二维数组:");
  7. for (int i = 0; i < arr4.GetLength(0); i++){
  8.     for (int j = 0; j < arr4.GetLength(1); j++){
  9.         arr4[i, j] = r.Next(1, 11);
  10.         Console.Write(arr4[i, j] + " ");
  11.         if(arr4[maxRow, maxCol] < arr4[i, j]){
  12.             maxRow = i;
  13.             maxCol = j;
  14.         }
  15.     }
  16.     Console.WriteLine();
  17. }
  18. Console.WriteLine("最大值{0}的位置:({1},{2})" , arr4[maxRow, maxCol], maxRow, maxCol);
  19. Console.WriteLine("****所有最大值元素{0}的位置****");
  20. for(int i = 0; i < arr4.GetLength(0); i++){
  21.     for(int j = 0; j < arr4.GetLength(1); j++){
  22.         if(arr4[i,j] == arr4[maxRow, maxCol]){
  23.         Console.WriteLine("最大值{0}的位置:({1},{2})" , arr4[maxRow, maxCol], i, j);
  24.         }
  25.     }
  26. }
  27. #endregion
复制代码
关于return
  1. #region 5
  2. int[,] arr5 = new int[5, 5] {   { 0,0,0,0,0},
  3.                                 { 0,0,0,0,0},
  4.                                 { 0,0,1,1,0},
  5.                                 { 0,0,0,0,0},
  6.                                 { 0,0,0,0,0}};
  7. void transArray(int[,] arr){
  8.     //用来记录行和列是否有1的真值数组
  9.     bool[] boolRow = new bool[arr.GetLength(0)];
  10.     bool[] boolCol = new bool[arr.GetLength(1)];
  11.     //标记行和列
  12.     for(int i = 0; i < arr.GetLength(0); i++){
  13.         for(int j = 0; j < arr.GetLength(1); j++){
  14.             if(arr[i,j] == 1){
  15.                 boolRow[i] = true;
  16.                 boolCol[j] = true;
  17.             }
  18.         }
  19.     }
  20.     //转置
  21.     for(int i = 0; i < arr.GetLength(0); i++){
  22.         for(int j = 0; j < arr.GetLength(1); j++){
  23.             if(boolRow[i] == true || boolCol[j] == true){
  24.                 arr[i,j] = 1;
  25.             }
  26.         }
  27.     }
  28. }
  29. transArray(arr5);
  30. Console.WriteLine("转置后的数组:");
  31. for (int i = 0; i < arr5.GetLength(0); i++){
  32.     for (int j = 0; j < arr5.GetLength(1); j++){
  33.         Console.Write(arr5[i, j] + " ");
  34.     }
  35.     Console.WriteLine();
  36. }
  37. #endregion
复制代码
习题
  1. namespace 交错数组;
  2. class Program
  3. {
  4.     static void Main(string[] args)
  5.     {
  6.         #region 交错数组的申明
  7.         //只申明
  8.         //变量类型[][] 交错数组名;
  9.         int[][] arr1;
  10.         //申明+初始化
  11.         //变量类型[][] 交错数组名 = new int[行数][];
  12.         int[][] arr2 = new int[3][];
  13.         //变量类型[][] 交错数组名 = new int[行数][] { 一维数组1, 一维数组2, 一维数组3 };
  14.         //注意:{一维数组的数据类型要和交错数组的类型一致}
  15.         int[][] arr3 = new int[3][] {   new int[] { 1, 2 },
  16.                                         new int[] { 3, 4},
  17.                                         new int[] { 5 } };
  18.         //变量类型[][] 交错数组名 = new int[][] { 一维数组1, 一维数组2, 一维数组3 };
  19.         int[][] arr4 = new int[][] {    new int[] { 1, 2 },
  20.                                         new int[] { 3, 4},
  21.                                         new int[] { 5 } };
  22.   
  23.         //最常用:
  24.         //变量类型[][] 交错数组名 = { 一维数组1, 一维数组2, 一维数组3 };
  25.         int[][] arr5 = {new int[] {1, 2, 3},
  26.                         new int[] {4, 5},
  27.                         new int[] {6, 7, 8, 9}};
  28.         #endregion
  29.   
  30.         #region 交错数组的使用
  31.         int[][] array1 = {  new int[] {1, 2, 3},
  32.                             new int[] {4, 5}    };
  33.         //1.数组的长度
  34.         //行
  35.         //交错数组名.Length
  36.         //交错数组名.GetLength(0)
  37.         Console.WriteLine(array1.Length);
  38.         Console.WriteLine(array1.GetLength(0));
  39.         //列
  40.         //交错数组名[行].Length
  41.         //其实就是找到交错数组中的某个一维数组的长度
  42.         Console.WriteLine(array1[0].Length);
  43.         Console.WriteLine(array1[1].Length);
  44.         //2.获取交错数组的元素
  45.         //交错数组名[行][列]
  46.         Console.WriteLine(array1[0][0]);
  47.         //3.修改交错数组的元素
  48.         //交错数组名[行][列] = 值;
  49.         array1[0][0] = 10;
  50.         Console.WriteLine(array1[0][0]);
  51.         //4.遍历交错数组
  52.         //和二维数组一样,只不过是遍历每一个一维数组
  53.         for (int i = 0; i < array1.Length; i++)
  54.         {
  55.             for (int j = 0; j < array1[i].Length; j++)
  56.             {
  57.                 Console.Write(array1[i][j] + " ");
  58.             }
  59.             Console.WriteLine();
  60.         }
  61.         //5.增加交错数组的元素
  62.         //6.删除交错数组的元素
  63.         //7.查找交错数组的元素
  64.         //***都和二维数组一样***
  65.         #endregion
  66.     }
  67. }
复制代码
  1. namespace 值类型和引用类型;
  2. class Program
  3. {
  4.     static void Main(string[] args)
  5.     {
  6.         //值类型
  7.         int a = 1;
  8.         //引用类型
  9.         int[] arr = new int[] {1,2,3,4 };
  10.         //赋值给另一个变量
  11.         int b = a;
  12.         int[] arr2 = arr;
  13.         Console.WriteLine("a={0},b={1}\narr[0]={2},arr2[0]={3}",a,b,arr[0],arr2[0]);
  14.   
  15.         //修改新的变量
  16.         b = 2;
  17.         arr2[0] = 99;
  18.         Console.WriteLine("a={0},b={1}\narr[0]={2},arr2[0]={3}",a,b,arr[0],arr2[0]);
  19.     }
  20. }
复制代码
  1.         #region string——特殊的引用类型
  2.         string str1 = "123";
  3.         string str2 = str1;//这一步两个变量指向的地址相同
  4.         str2 = "456";//str2重新赋值,地址改变
  5.         Console.WriteLine("str1={0},str2={1}",str1,str2);
  6.         #endregion
复制代码
递归

必须有结束掉用的条件
  1.         #region 习题
  2.         int[] arr3 = new int[]{1};
  3.         int[] arr4 = arr3;
  4.         int[] arr5 = arr3;
  5.         arr4[0] = 99;//arr4修改单个元素,地址不变
  6.         arr5 = new int[5];//arr5重新赋值,地址改变,指向新的堆内存
  7.         Console.WriteLine("arr3[0]={0},arr4[0]={1},arr5[0]={2}",arr3[0],arr4[0],arr5[0]);
  8.         #endregion
复制代码
习题
  1. namespace 函数;
  2. class Program
  3. {
  4.     #region 函数的语法
  5.     // static 返回类型 函数名(参数类型 参数名){
  6.     //     // 函数体
  7.     //     return 返回值;
  8.     // }
  9.     #endregion
  10.     static void Main(string[] args)
  11.     {
  12.     }
  13. }
复制代码
结构体

结构体相当于一个人,他的变量相当于人的各个属性,方法相当于人的各个功能函数
语法

  1. namespace 函数;
  2. class Program
  3. {
  4.     //有参有返回值的函数
  5.     static int[] sum_avg(int a, int b)
  6.     {
  7.         int sum = a + b;
  8.         int avg = sum / 2;
  9.         // int[] result = { sum, avg };
  10.         return new int[] { sum, avg };
  11.     }
  12.     static void Main(string[] args)
  13.     {
  14.         int a = 10;
  15.         int b = 20;
  16.         int[] result = sum_avg(a, b);
  17.         Console.WriteLine("The sum is: " + result[0]);
  18.         Console.WriteLine("The average is: " + result[1]);
  19.     }
  20. }
复制代码
访问修饰符

修饰结构体中的变量和方法 是否能被外部使用
public 可以被外部访问
private 只能在内部使用
默认不写,就是private
结构体的构造函数

使用
  1.     static void Say(string str){
  2.         //void也是可以写return的,return后面的语句不会执行
  3.         if(str == "Fuck") return;
  4.         Console.WriteLine(str);
  5.     }
复制代码
习题
  1.     #region 1
  2.     static int Max(int a, int b){
  3.         return (a > b)? a : b;
  4.     }
  5.     #endregion
复制代码
排序

冒泡排序
  1.     #region 2
  2.     static float[] Circle(float r){
  3.         //1
  4.         // float area  = 3.14f * r * r;
  5.         // float perimeter = 2 * 3.14f * r;
  6.         // float[] result = {area, perimeter};
  7.         // return result;
  8.         //2
  9.         return new float[] { 3.14f * r * r, 2 * 3.14f * r };
  10.     }
  11.     #endregion
复制代码
选择排序

步调:
详细步调:


  1.     #region 3
  2.     static int[] CalculateArr(int[] arr){
  3.         if( arr.Length == 0 )
  4.         {
  5.             Console.WriteLine("数组不能为空");
  6.             return new int[0];
  7.         }
  8.         int sum = 0, max = arr[0], min = arr[0], average = 0;
  9.         for (int i = 0; i < arr.Length; i++)
  10.         {
  11.             sum += arr[i];
  12.             max = (max >= arr[i]) ? max : arr[i];
  13.             min = (min <= arr[i]) ? min : arr[i];
  14.         }
  15.         average = sum / arr.Length;
  16.         int[] result = { sum, max, min, average };
  17.         return result;
  18.     }
  19.     #endregion
复制代码
习题
  1.     #region 4
  2.     static bool IsPrime(int num){
  3.         for(int i = 2; i <= num; i++){
  4.             if(num%i == 0) return false;
  5.         }
  6.         return true;
  7.     }
  8.     #endregion
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4