C#初级教程(5)——解锁 C# 变量的更多奥秘:从基础到进阶的深度指南

一、变量类型转换:隐式与显式的门道

(一)隐式转换:编译器的 “贴心小助手”

        隐式转换是编译器自动进行的类型转换,无需开发者手动干预。这种转换通常发生在将取值范围小的数据类型赋值给取值范围大的数据类型时,就像把小盒子里的东西放进大盒子,完全没问题。例如:

short num1 = 100; 
int num2 = num1; 

        在这个例子中,short类型的num1可以直接赋值给int类型的num2,因为int类型的取值范围比short大,能够容纳short类型的值。常见的隐式转换关系有:byte可以转换为shortushortintuintlongulongfloatdoubledecimal等;short可以转换为intlongfloatdoubledecimal 等。


(二)显式转换:手动掌控数据 “乾坤大挪移”

        当需要把取值范围大的数据类型赋值给取值范围小的数据类型时,就像把大盒子里的东西放进小盒子,可能会出现装不下的情况,这时就需要显式转换。显式转换需要开发者明确告诉编译器要进行类型转换,使用(目标类型)的语法。例如:

int bigNumber = 30000; 
short smallNumber = (short)bigNumber; 

        不过要注意,显式转换可能会导致数据丢失或精度降低。比如上面的例子,如果bigNumber的值超出了short类型的取值范围,转换后得到的smallNumber的值可能就不是预期的了。


(三)使用Convert类进行特殊转换

        除了基本的隐式和显式转换,在处理数字字符串和数字类型之间的转换时,Convert类提供了非常实用的方法。比如将字符串转换为整数:

string numberStr = "123";
int number = Convert.ToInt32(numberStr); 

   Convert类还提供了ToDoubleToFloatToDecimal等方法,可以满足不同类型之间的转换需求。但在使用时要确保字符串内容是有效的数字格式,否则会抛出异常。例如,将非数字字符串"abc"转换为数字就会出错。


二、复杂变量类型:拓展编程的边界

(一)枚举类型:让代码表意更清晰

        在编程中,我们经常会遇到一些具有固定取值集合的数据。比如在游戏开发中,游戏角色的状态可能有 “站立”“奔跑”“跳跃”“死亡” 等。如果使用普通的整数来表示这些状态,代码的可读性会很差,而且容易出错。这时候枚举类型就派上用场了。
枚举类型的定义格式如下:

enum GameCharacterState
{Standing,Running,Jumping,Dead
}

        使用枚举类型声明变量并赋值:

GameCharacterState state = GameCharacterState.Running; 

        枚举类型中的每个值默认是int类型,并且从 0 开始依次递增。也可以手动指定每个枚举值对应的整数值:

enum Weekday
{Monday = 1,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
}

        在这个例子中,Monday被指定为 1,后续的枚举值会依次递增。枚举类型在提高代码可读性和可维护性方面有着显著的优势,在大型项目中,合理使用枚举能让代码逻辑更加清晰。


(二)结构:整合相关数据的 “收纳盒”

        结构是一种可以将多个不同类型的数据组合在一起的数据类型。当我们需要表示一个具有多个相关属性的对象时,结构就非常有用。比如表示一个二维点的坐标,需要横坐标和纵坐标:

struct Point2D
{public int X;public int Y;
}

        这里使用struct关键字定义了Point2D结构,它包含两个int类型的成员XY。声明和使用结构变量:

Point2D point = new Point2D();
point.X = 10;
point.Y = 20;

也可以在声明时初始化结构变量:

Point2D anotherPoint = new Point2D { X = 5, Y = 8 }; 

        结构在内存分配和使用上有其特点,它是值类型,存储在栈上,相比于引用类型,在处理小型、简单的数据集合时,具有更高的效率。


(三)数组:批量存储数据的 “集装箱”

        数组是用于存储多个相同类型数据的集合。在实际编程中,当需要处理大量同类型数据时,数组能极大地简化代码。例如,存储一个班级学生的考试成绩:

int[] scores = new int[30]; 

        这里声明了一个包含 30 个元素的int类型数组scores,数组元素默认初始化为 0。数组的初始化方式有多种,除了上述方式,还可以直接初始化元素值:

int[] scores = { 85, 90, 78, 88, 92 }; 

        或者在声明时指定大小并初始化:

int[] scores = new int[5] { 85, 90, 78, 88, 92 }; 

        访问数组元素通过索引进行,索引从 0 开始。例如,获取数组中第一个元素的值:

int firstScore = scores[0]; 

        遍历数组是常见的操作,有多种方式可以实现:

for循环遍历

int[] numbers = { 1, 2, 3, 4, 5 };
for (int i = 0; i < numbers.Length; i++)
{Console.WriteLine(numbers[i]);
}

while循环遍历

    int[] numbers = { 1, 2, 3, 4, 5 };
    int i = 0;
    while (i < numbers.Length)
    {Console.WriteLine(numbers[i]);i++;
    }
    

    foreach循环遍历

      int[] numbers = { 1, 2, 3, 4, 5 };
      foreach (int number in numbers)
      {Console.WriteLine(number);
      }
      

          foreach循环适用于只需要读取数组元素的场景,它更加简洁,但不能直接修改数组元素的值。如果需要在遍历过程中修改元素值,还是要使用forwhile循环。


              数组还支持多维数组,比如二维数组可以用来表示矩阵:

      int[,] matrix = new int[3, 3] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; 
      

              访问二维数组元素时需要指定两个索引:

      int element = matrix[1, 1]; 
      

      三、字符串:特殊的 “字符数组”

              在 C# 中,字符串可以看作是字符char类型的数组,这使得我们可以像操作数组一样操作字符串。例如,获取字符串中指定位置的字符:

      string name = "Alice";
      char firstChar = name[0]; 
      

      通过Length属性可以获取字符串的长度:

      int nameLength = name.Length; 
      

      (一)字符串遍历与反转

              遍历字符串的每个字符可以使用循环,就像遍历数组一样。下面是使用for循环反向输出字符串的示例:

      string input = "Hello, World!";
      for (int i = input.Length - 1; i >= 0; i--)
      {Console.Write(input[i]);
      }
      

      (二)字符串常用方法

      1.大小写转换ToLower()方法将字符串转换为小写,ToUpper()方法将字符串转换为大写

      string original = "Hello, World!";
      string lowerCase = original.ToLower(); 
      string upperCase = original.ToUpper(); 
      

      2.去除空白字符Trim()方法去除字符串两端的空白字符,TrimStart()去除字符串开头的空白字符,TrimEnd()去除字符串结尾的空白字符

      string strWithSpaces = "   Hello, World!   ";
      string trimmed = strWithSpaces.Trim(); 
      string trimmedStart = strWithSpaces.TrimStart(); 
      string trimmedEnd = strWithSpaces.TrimEnd(); 
      

      3.分割字符串Split()方法根据指定的分隔符将字符串分割成字符串数组。

      string sentence = "Apple, Banana, Orange";
      string[] fruits = sentence.Split(','); 
      

      四.题目

      1. 寻找 100 到 999 之间的水仙花数

      题目改编:在 100 到 999 这个范围内,找出所有满足 “水仙花数” 条件的数字。水仙花数是指一个三位数,其各位数字的立方和等于该数本身,例如 153 = 1³ + 5³ + 3³。

      using System;class NarcissisticNumbers
      {static void Main(){for (int num = 100; num < 1000; num++){int hundreds = num / 100;int tens = (num / 10) % 10;int units = num % 10;if (Math.Pow(hundreds, 3) + Math.Pow(tens, 3) + Math.Pow(units, 3) == num){Console.WriteLine(num);}}}
      }
      

      代码解释

      • 使用 for 循环遍历 100 到 999 之间的所有数字。
      • 对于每个数字,通过除法和取模运算分别获取其百位、十位和个位数字。
      • 计算各位数字的立方和,并与该数字本身进行比较,如果相等则输出该数字。

      2. 可乐兑换问题

      题目改编:已知 3 个可乐空瓶可以换一瓶可乐,现在初始有 364 瓶可乐。请计算总共可以喝到多少瓶可乐,以及最后会剩下多少个空瓶。

      using System;class ColaExchange
      {static void Main(){int totalCola = 364;int emptyBottles = totalCola;while (emptyBottles >= 3){int exchangedCola = emptyBottles / 3;totalCola += exchangedCola;emptyBottles = emptyBottles % 3 + exchangedCola;}Console.WriteLine($"总共可以喝到 {totalCola} 瓶可乐,剩下 {emptyBottles} 个空瓶。");}
      }
      

      代码解释

      • 初始化 totalCola 为初始可乐数量,emptyBottles 也初始化为初始可乐数量。
      • 使用 while 循环,只要空瓶数量大于等于 3,就进行兑换操作。
      • 计算可兑换的可乐数量 exchangedCola,并更新 totalCola 和 emptyBottles 的值。
      • 最后输出总共喝到的可乐数量和剩余的空瓶数量。

      3. 猜数字游戏

      题目改编:计算机随机生成一个 0 到 50 之间的整数,玩家需要猜测这个数字。每次猜测后,计算机根据玩家的猜测结果给出提示(猜大了或猜小了),直到玩家猜对为止。

      using System;class GuessNumberGame
      {static void Main(){Random random = new Random();int secretNumber = random.Next(0, 51);int guess;do{Console.Write("请您输入一个 0 - 50 之间的数:");guess = int.Parse(Console.ReadLine());if (guess < secretNumber){Console.WriteLine($"您猜小了,这个数字比 {guess} 大。");}else if (guess > secretNumber){Console.WriteLine($"您猜大了,这个数字比 {guess} 小。");}else{Console.WriteLine($"恭喜您猜对了,这个数字为:{secretNumber}");}} while (guess != secretNumber);}
      }
      

      代码解释

      • 使用 Random 类生成一个 0 到 50 之间的随机整数 secretNumber
      • 使用 do-while 循环,不断提示玩家输入猜测的数字。
      • 根据玩家的猜测结果给出相应的提示,直到猜对为止。

      4. 字符串加密程序

      题目改编:编写一个应用程序,对用户输入的字符串进行加密。对于字母字符,按照特定规则进行加密:小写字母 'a' 到 'z' 循环后移 3 位,大写字母 'A' 到 'Z' 也循环后移 3 位,其他字符保持不变。

      using System;class StringEncryption
      {static void Main(){Console.Write("请输入要加密的字符串:");string input = Console.ReadLine();string encrypted = "";foreach (char c in input){if (char.IsLower(c)){encrypted += (char)(((c - 'a' + 3) % 26) + 'a');}else if (char.IsUpper(c)){encrypted += (char)(((c - 'A' + 3) % 26) + 'A');}else{encrypted += c;}}Console.WriteLine($"加密后的字符串为:{encrypted}");}
      }
      

      代码解释

      • 读取用户输入的字符串。
      • 遍历字符串中的每个字符,判断其是否为小写字母或大写字母。
      • 对于字母字符,通过计算循环后移 3 位的位置进行加密,其他字符直接添加到加密后的字符串中。
      • 最后输出加密后的字符串。

      5. 数字排序程序

      题目改编:编写一个控制台程序,要求用户输入一组用空格分隔的数字,然后使用 Array.Sort 方法和冒泡排序算法分别对这些数字进行从小到大排序,并输出排序结果。

      using System;class NumberSorting
      {static void Main(){Console.Write("请输入一组用空格分隔的数字:");string input = Console.ReadLine();string[] numbersStr = input.Split(' ');int[] numbers = new int[numbersStr.Length];for (int i = 0; i < numbersStr.Length; i++){numbers[i] = int.Parse(numbersStr[i]);}// 使用 Array.Sort 方法排序int[] sortedByArraySort = (int[])numbers.Clone();Array.Sort(sortedByArraySort);Console.WriteLine("使用 Array.Sort 方法排序后的结果:");foreach (int num in sortedByArraySort){Console.Write(num + " ");}Console.WriteLine();// 使用冒泡排序int[] sortedByBubbleSort = (int[])numbers.Clone();for (int i = 0; i < sortedByBubbleSort.Length - 1; i++){for (int j = 0; j < sortedByBubbleSort.Length - i - 1; j++){if (sortedByBubbleSort[j] > sortedByBubbleSort[j + 1]){int temp = sortedByBubbleSort[j];sortedByBubbleSort[j] = sortedByBubbleSort[j + 1];sortedByBubbleSort[j + 1] = temp;}}}Console.WriteLine("使用冒泡排序后的结果:");foreach (int num in sortedByBubbleSort){Console.Write(num + " ");}Console.WriteLine();}
      }
      

      代码解释

      • 读取用户输入的字符串,并使用 Split 方法将其按空格分割成字符串数组。
      • 将字符串数组转换为整数数组。
      • 克隆整数数组,分别使用 Array.Sort 方法和冒泡排序算法对克隆数组进行排序。
      • 输出两种排序方法的结果。

      6. 蟠桃数量计算问题

      题目改编:悟空吃蟠桃,第一天吃掉桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天都吃掉前一天剩下的一半多一个,到第 n 天准备吃的时候只剩下一个桃子。请根据用户输入的 n 值,计算悟空第一天开始吃的时候桃子一共有多少个。

      using System;class PeachCalculation
      {static void Main(){Console.Write("请输入天数 n:");int n = int.Parse(Console.ReadLine());int peaches = 1;for (int i = n - 1; i > 0; i--){peaches = (peaches + 1) * 2;}Console.WriteLine($"第一天开始吃的时候桃子一共有 {peaches} 个。");}
      }
      

      代码解释

      • 读取用户输入的天数 n
      • 从第 n 天剩下的 1 个桃子开始,逆向推导每天开始时的桃子数量。
      • 使用 for 循环,根据每天吃桃子的规则计算前一天的桃子数量。
      • 最后输出第一天开始时的桃子数量。

      7. 最小数交换问题

      题目改编:用户输入 nn < 100)个整数,找出其中最小的数,将它与数组的第一个数交换位置,然后输出交换后的数组。

      using System;class MinNumberSwap
      {static void Main(){Console.Write("请输入数字的个数(n < 100):");int n = int.Parse(Console.ReadLine());int[] numbers = new int[n];Console.Write("请输入这 {0} 个数字:", n);string[] input = Console.ReadLine().Split(' ');for (int i = 0; i < n; i++){numbers[i] = int.Parse(input[i]);}int minIndex = 0;for (int i = 1; i < n; i++){if (numbers[i] < numbers[minIndex]){minIndex = i;}}int temp = numbers[0];numbers[0] = numbers[minIndex];numbers[minIndex] = temp;Console.WriteLine("交换后的数组为:");foreach (int num in numbers){Console.Write(num + " ");}Console.WriteLine();}
      }
      

      代码解释

      • 读取用户输入的数字个数 n,并创建一个长度为 n 的整数数组。
      • 读取用户输入的 n 个数字,并存储到数组中。
      • 遍历数组,找出最小数的索引 minIndex
      • 交换最小数和数组第一个数的位置。
      • 输出交换后的数组。

      8. 有序数组插入问题

      题目改编:有 nn <= 100)个整数已经按照从小到大的顺序排列好,现在用户输入一个整数 x,请将该数插入到序列中,并使新的序列仍然有序,最后输出新的序列。

      using System;class OrderedArrayInsertion
      {static void Main(){Console.Write("请输入有序数组的长度(n <= 100):");int n = int.Parse(Console.ReadLine());int[] array = new int[n + 1];Console.Write("请输入有序数组的元素(从小到大):");string[] input = Console.ReadLine().Split(' ');for (int i = 0; i < n; i++){array[i] = int.Parse(input[i]);}Console.Write("请输入要插入的整数 x:");int x = int.Parse(Console.ReadLine());int insertIndex = n;for (int i = 0; i < n; i++){if (x < array[i]){insertIndex = i;break;}}for (int i = n; i > insertIndex; i--){array[i] = array[i - 1];}array[insertIndex] = x;Console.WriteLine("插入后的新序列为:");foreach (int num in array){Console.Write(num + " ");}Console.WriteLine();}
      }
      

      代码解释

      • 读取用户输入的有序数组长度 n,并创建一个长度为 n + 1 的整数数组。
      • 读取用户输入的有序数组元素,并存储到数组的前 n 个位置。
      • 读取用户输入的要插入的整数 x
      • 遍历数组,找到 x 应该插入的位置 insertIndex
      • 将插入位置之后的元素依次后移一位。
      • 将 x 插入到 insertIndex 位置。
      • 输出插入后的新序列。

      9. 工资发零问题

      题目改编:泰课的老师每月 8 号发工资,财务处的小云老师需要考虑最少准备多少张人民币,才能在给每位老师发工资时都不用老师找零。假设老师的工资都是正整数,单位为元,人民币有 100 元、50 元、10 元、5 元、2 元和 1 元六种。

      using System;class SalaryPayment
      {static void Main(){Console.Write("请输入老师的工资:");int salary = int.Parse(Console.ReadLine());int hundredCount = salary / 100;salary %= 100;int fiftyCount = salary / 50;salary %= 50;int tenCount = salary / 10;salary %= 10;int fiveCount = salary / 5;salary %= 5;int twoCount = salary / 2;salary %= 2;int oneCount = salary;int totalNotes = hundredCount + fiftyCount + tenCount + fiveCount + twoCount + oneCount;Console.WriteLine($"最少需要准备 {totalNotes} 张人民币。");Console.WriteLine($"100 元:{hundredCount} 张,50 元:{fiftyCount} 张,10 元:{tenCount} 张,5 元:{fiveCount} 张,2 元:{twoCount} 张,1 元:{oneCount} 张。");}
      }
      

      代码解释

      • 读取用户输入的老师工资。
      • 依次计算需要的 100 元、50 元、10 元、5 元、2 元和 1 元人民币的张数。
      • 计算总共需要的人民币张数。
      • 输出最少需要准备的人民币张数以及每种面值的张数。

      10. 合法标识符判断问题

      题目改编:编写一个程序,判断用户输入的字符串是否为 C# 的合法标识符。合法标识符必须以字母、下划线或 @ 开头,后面可以跟字母、数字、下划线。

      using System;
      using System.Text.RegularExpressions;class IdentifierValidation
      {static void Main(){Console.Write("请输入一个字符串:");string input = Console.ReadLine();bool isValid = Regex.IsMatch(input, @"^[@_a-zA-Z][a-zA-Z0-9_]*$");if (isValid){Console.WriteLine("该字符串是 C# 的合法标识符。");}else{Console.WriteLine("该字符串不是 C# 的合法标识符。");}}
      }
      

      代码解释

      • 读取用户输入的字符串。
      • 使用正则表达式 ^[@_a-zA-Z][a-zA-Z0-9_]*$ 判断字符串是否符合 C# 合法标识符的规则。
      • 根据判断结果输出相应信息。

      11. 回文串判断问题

      题目改编:编写一个程序,判断用户输入的字符串是否为回文串。回文串是指正读和反读都一样的字符串。

      using System;class PalindromeCheck
      {static void Main(){Console.Write("请输入一个字符串:");string input = Console.ReadLine();string reversed = ReverseString(input);if (input == reversed){Console.WriteLine("该字符串是回文串。");}else{Console.WriteLine("该字符串不是回文串。");}}static string ReverseString(string s){char[] charArray = s.ToCharArray();Array.Reverse(charArray);return new string(charArray);}
      }
      

      代码解释

      • 读取用户输入的字符串。
      • 定义 ReverseString 方法,用于反转字符串

      五.结语

              通过对 C# 变量的深入学习,无论是基础的类型转换,还是复杂的变量类型,以及特殊的字符串处理,我们都掌握了更多编程的 “利器”。希望大家在实际编程中不断实践,灵活运用这些知识,编写出更优秀的代码。

      本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/23361.html

      如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

      相关文章

      车载DoIP协议 --- TCP详细解析

      我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 简单&#xff0c;单纯&#xff0c;喜欢独处&#xff0c;独来独往&#xff0c;不易合同频过着接地气的生活…

      DeepSeek-R1本地部署保姆级教程

      一、DeepSeek-R1本地部署配置要求 &#xff08;一&#xff09;轻量级模型 ▌DeepSeek-R1-1.5B 内存容量&#xff1a;≥8GB 显卡需求&#xff1a;支持CPU推理&#xff08;无需独立GPU&#xff09; 适用场景&#xff1a;本地环境验证测试/Ollama集成调试 &#xff08;二&a…

      2025年SCI一区智能优化算法:真菌生长优化算法(Fungal Growth Optimizer,FGO),提供MATLAB代码

      一. 真菌生长优化算法&#xff08;FGO&#xff09; 真菌生长优化算法&#xff08;Fungal Growth Optimizer&#xff0c;FGO&#xff09;是一种新型的自然启发式元启发式算法&#xff0c;其灵感来源于自然界中真菌的生长行为。该算法通过模拟真菌的菌丝尖端生长、分支和孢子萌发…

      【人工智能】蓝耘智算平台盛大发布DeepSeek满血版:开创AI推理体验新纪元

      &#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ 蓝耘智算平台 蓝耘智算平台核心技术与突破元生代推理引擎快速入门&#xff1a;三步调用大模型接口&#xff0c;OpenAI SDK无缝兼容实战用例文…

      基于AVue的二次封装:快速构建后台管理系统的CRUD方案

      基于AVue的二次封装&#xff1a;快速构建后台管理系统的CRUD方案 在开发后台管理系统时&#xff0c;表格是常见的组件之一。然而&#xff0c;使用原生的Element Plus实现CRUD&#xff08;增删改查&#xff09;功能往往需要编写大量重复代码&#xff0c;过程繁琐。即使借助类似…

      Spring全局异常处理

      在项目开发中&#xff0c;异常是经常遇到的&#xff0c;但是如何更高效的处理好异常信息&#xff0c;让我们能快速定位到BUG&#xff0c;是很重要的&#xff0c;不仅能够提高我们的开发效率&#xff0c;还能让你代码看上去更舒服&#xff0c;SpringBoot的项目已经对有一定的异常…

      华为昇腾服务器(固件版本查询、驱动版本查询、CANN版本查询)

      文章目录 1. **查看固件和驱动版本**2. **查看CANN版本**3. **其他辅助方法**注意事项 在华为昇腾服务器上查看固件、驱动和CANN版本的常用方法如下&#xff1a; 1. 查看固件和驱动版本 通过命令行工具 npu-smi 执行以下命令查看当前设备的固件&#xff08;Firmware&#xff0…

      pikachu靶场搭建教程

      需要的东西 phpStudy&#xff1a; 链接&#xff1a; https://pan.baidu.com/s/1fJ-5TNtdDZGUf5FhTm245g 提取码&#xff1a;0278 pikachu-master&#xff1a; Github链接&#xff1a;https://github.com/zhuifengshaonianhanlu/pikachu 链接&#xff1a; https://pan.baidu.c…

      R与RStudio简介及安装

      目录 一、R与RStudio关系 二、R简介 2.1. 发展历史 2.2. R语言特点 三、安装指南 3.1 R安装指南 3.2 R studio安装指南 一、R与RStudio关系 R是统计领域广泛使用的工具&#xff0c;属于GNU系统的一个自由、免费、源代码开放的软件&#xff0c;是 用于统计计算和统计绘图…

      netty基础知识梳理和总结

      目录标题 由来netty整体结构核心功能可扩展的事件模型统一的通信 API零拷贝机制与字节缓冲区 传输服务协议支持 netty的IO模型netty核心组件ChannelEventLoop、EventLoopGroupChannelHandlerChannelPipelineBootstrapFuture netty的bytebufbytebuf的内部构造bytebuf的使用模式B…

      《Head First设计模式》读书笔记 —— 单件模式

      文章目录 为什么需要单件模式单件模式典型实现剖析定义单件模式本节用例多线程带来的问题解决问题优化 Q&A总结 《Head First设计模式》读书笔记 相关代码&#xff1a; Vks-Feng/HeadFirstDesignPatternNotes: Head First设计模式读书笔记及相关代码 用来创建独一无二的&a…

      tailwindcss 前端 css 框架 无需写css 快速构建页面

      版本&#xff1a;VUE3 TS 框架 vite 文章中使用tailwindcss 版本&#xff1a; ^3.4.17 简介&#xff1a; Tailwind CSS 一个CSS 框架&#xff0c;提供组件化的样式&#xff0c;直接在HTML 中编写样式&#xff0c;无需额外自定义CSS &#xff0c;快速&#xff01; 简洁&#…

      给小米/红米手机root(工具基本为官方工具)——KernelSU篇

      目录 前言准备工作下载刷机包xiaomirom下载刷机包【适用于MIUI和hyperOS】“hyper更新”微信小程序【只适用于hyperOS】 下载KernelSU刷机所需程序和驱动文件 开始刷机设置手机第一种刷机方式【KMI】推荐提取boot或init_boot分区 第二种刷机方式【GKI】不推荐 结语 前言 刷机需…

      路由器的WAN口和LAN口有什么区别?

      今时今日&#xff0c;移动终端盛行的时代&#xff0c;WIFI可以说是家家户户都有使用到的网络接入方式。那么路由器当然也就是家家户户都不可或缺的设备了。而路由器上的两个实现网络连接的基础接口 ——WAN 口和 LAN 口&#xff0c;到底有什么区别&#xff1f;它们的功能和作用…

      【Open X-Embodiment】简单数据下载与预处理

      文章目录 1. RLDS Dataset2. 处理成numpy格式3. 存储桶 1. RLDS Dataset 从 Octo 里面找到数据下载的代码 rlds_dataset_mod github 按照官网代码配置环境后&#xff0c;修改 prepare_open_x.sh&#xff0c;相当于只用 gsutil 下载数据&#xff1a; DOWNLOAD_DIR/mnt/data…

      神经网络八股(1)

      1.什么是有监督学习&#xff0c;无监督学习 有监督学习是带有标签的&#xff0c;无监督学习是没有标签的&#xff0c;简单来说就是有监督学习的输入输出都是固定的&#xff0c;已知的&#xff0c;无监督学习输入是已知的&#xff0c;输出是不固定的&#xff0c;无监督学习是通…

      达梦:开发 ODBC配置指南

      目录 达梦数据库DM8 ODBC配置指南&#xff08;Linux环境&#xff09;ODBC一、环境准备二、核心配置步骤1. 安装unixODBC2. 配置ODBC驱动&#xff08;odbcinst.ini&#xff09;3. 配置数据源&#xff08;odbc.ini&#xff09; 三、连接测试与验证1. 使用isql工具测试2. 执行基础…

      Python游戏编程之赛车游戏6-1

      通过Python的pygame模块可以实现赛车游戏&#xff0c;如图1所示。 图1 赛车游戏 从图1中可以看出&#xff0c;玩家通过键盘的左右键操作蓝色汽车躲避红色汽车的撞击&#xff0c;每成功躲避过一辆红色汽车&#xff0c;则玩家得一分。当蓝色汽车被红色汽车撞击后&#xff0c;游戏…

      【Linux网络】序列化、守护进程、应用层协议HTTP、Cookie和Session

      ⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 1、序列化和反序列化2、守护进程2.1 什么是进程组&#xff1f;2.2 什么是会话&#xff1f; 3、应用层协议HTTP3.1 HTTP协议3.2 HT…

      【Java消息队列】应对消息丢失、重复、顺序与积压的全面策略

      应对消息丢失、重复、顺序与积压的全面策略 引言kafka消息丢失生产者消费者重复消费顺序消费消息积压生产者消费者其他RabbitMQ消息丢失生产者事务机制,保证生产者发送消息到 RabbitMQ Server发送方确认机制,保证消息能从交换机路由到指定队列保证消息在 RabbitMQ Server 中的…