首页
关于
文章打赏记录
Search
1
项目一:Revit电缆自动布置
29 阅读
2
第十四章结课考试
3 阅读
3
revit二次开发入门
3 阅读
4
Dynamo 连缀属性
2 阅读
5
Dynamo 为当前视图添加过滤器
1 阅读
Dynamo
UnrealEngine
Python
C#编程技术基础
C#实战项目
随笔
登录
Search
标签搜索
CSharp
基础知识
Dynamo
数据应用
UnrealEngine
BIM管理
TomHanck4
累计撰写
22
篇文章
累计收到
6
条评论
首页
栏目
Dynamo
UnrealEngine
Python
C#编程技术基础
C#实战项目
随笔
页面
关于
文章打赏记录
搜索到
22
篇与
的结果
2022-06-18
第十三章综合项目--模拟打斗程序
第十三章综合项目--模拟打斗程序初级项目1.任务编号:2.任务名称:模拟一个打斗程序3.任务所属课程名称:类的定义、常用类、封装4.任务难度:C-简单5.任务描述:1)编写一个控制台程序,实现一个简单的战斗程序。 2)首先定义一个基类英雄(Hero) 属性:(名字Name、血量HP、蓝量MP,基础伤害下限BaseHurtLow,基础伤害上限BaseHurtHigh,基础防御下限BaseDefenseLow,基础防御上限Base DefenseHigh) 构造方法:默认属性:血量1000,蓝量800,基础伤害下限100,基础伤害上限300,基础防御下限0,基础防御上限100 方法:基础攻击Attack())基础防御Defense() 攻击伤害=攻击下限到攻击上限的一个随机值,攻击伤害应减去被攻击者的防御值 3)定义一个打斗(Battle)类,用于控制交战。 类中包涵有一个方法FightGo(Hero a,Hero b),主要作用是:a先开始攻击b一下,然后b攻击a一下,互相来回攻击直至某个对象生命值为0为止,每次攻击对方可以选择 基础攻击还是技能攻击,扣除的生命值是在自己Attacklow和AttackHigh之间取一个随机值。方法中显示每次来回打斗的信息,包括对方英雄名字,扣除的生命值及剩余 的生命值等。 在main方法中定义2个英雄Hero对象,执行FightGo方法,来完成一次战斗过程。6.提示 产生随机数可以参考Random类, 攻击进度控制System.Threading.Thread.Sleep(1000);/休眠1秒参考代码-初级先定义一个Hero类隐藏内容,请前往内页查看详情再定义一个Battle类隐藏内容,请前往内页查看详情主程序定义两个Hero对象隐藏内容,请前往内页查看详情中级项目1.任务编号:2.任务名称:模拟一个打斗程序3.任务所属课程名称:类的定义、常用类、封装、继承、多态4.任务难度:B-适中5.任务描述:1)编写一个控制台程序,实现一个简单的战斗程序。 2)首先定义一个基类英雄(Hero) 属性:(名字Name、血量HP、蓝量MP,基础伤害下限BaseHurtLow,基础伤害上限BaseHurtHigh,基础防御下限BaseDefenseLow,基础防御上限BaseDefenseHigh) 构造方法:默认属性:血量1000,蓝量800,基础伤害下限100,基础伤害上限300,基础防御下限0,基础防御上限100 也可以用户自定义属性: 方法:基础攻击Attack() 基础防御Defense() 攻击伤害=攻击下限到攻击上限的一个随机值 3)再定义三个职业继承英雄类 战士(Soldier): 属性:(技能SkillName,技能伤害下限SkillHurtLow,技能伤害上限SkillHurtHigh,技能消耗蓝量SkillMP) 构造方法:战士构造方法中基础血量+300,蓝量-200,防御+50 方法:重写父类攻击方法Attack() 用户可选择发动物理攻击或技能攻击 物理攻击:攻击伤害=攻击者基础攻击值-被攻击者基础防御 技能攻击:攻击伤害=攻击者技能攻击值-被攻击者基础防御 注意:技能伤害消耗相应蓝值,蓝值不够不能发动技能攻击,只能发动物理攻击 射手(Shooter): 属性:(技能SkillName,技能伤害下限SkillHurtLow,技能伤害上限SkillHurtHigh,技能消耗蓝量SkillMP) 构造方法:射手构造方法中基础血量-300,攻击+120,防御-20 方法:技能伤害SkillAttack() 刺客(Assassin): 属性:(技能SkillName,技能伤害下限SkillHurtLow,技能伤害上限SkillHurtHigh,技能消耗蓝量SkillMP) 构造方法:刺客构造方法中基础伤害+120,基础血量-100,防御-20 方法:技能伤害SkillAttack() 同时定义构造函数用于初始化这些信息。参考代码-中级先定义一个Hero类,添加技能相关的属性,在Attack的方法中添加技能攻击隐藏内容,请前往内页查看详情添加3个职业类隐藏内容,请前往内页查看详情添加一个Battle类隐藏内容,请前往内页查看详情主程序添加两个职业类及技能名隐藏内容,请前往内页查看详情
2022年06月18日
1 阅读
0 评论
0 点赞
2022-06-15
第十二章文件处理
第十二章文件处理目标了解System.IO命名空间文件和目录的常用操作方法使用文件流读写文本文件使用文件流读写二进制文件掌握打开文件、保存文件对话框的使用序列化和反序列化System.IO命名空间对文件操作System.lo命名空间操作各种流类数据System.Text命名空间关于字符编码的类File类文件操作静态类方法描述Create(string filePath)在指定路径下创建指定名称的文件Copy(string sourceFile,string desFile)按指定路径将源文件中的内容复制到目标文件中,如果目标文件不存在将新建目标文件Delete(string filePath)删除指定路径的文件Exists(string filePath)验证指定路径的文件是否存在Move(string sourceFile,string desFile)将指定文件移动到一个新的路径实例using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO;//读写文件流操作 namespace Lesson12_1 { class Program { static void Main(string[] args) { //File类内包含用于处理文件的静态方法 if (!File.Exists(@"D:\aa.txt")) { File.Create(@"D:\aa.txt"); } else { File.Copy(@"D:\aa.txt", @"D:\bb.txt"); } File.Delete(@"D:\aa.txt"); } } }using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace Lesson12_2 { class Program { static void Main(string[] args) { //Directory类包含了处理目录的静态方法 Directory.CreateDirectory("@D:/测试目录"); } } }Directory类目录(文件夹)操作静态类方法描述CreateDirectory(string path)创建目录Dele(string path[,bool recursive])删除指定的目录,如果第二个参数为true则同时删除该目录下的所有文件和子目录Exists(string path)测试目录是否存在GetCurrentDirectory()获得应用程序的当前工作目录GetDirectories(string path)返回代表子目录的字符串数组GetFiles(string path)以字符串数组形式返回指定目录中的文件的名称Move(string sourcePath,string desPath)将目录及其内容移到指定的新位置读写文本文件文件流FileStream构造方法FileStream(filePath,FileMode,[FileAccess],[FileShare])filePath是string类型其余3个是枚举类流读取对象StreamWriter类流写入对象Write()WriteLine()Close()StreamReader类流读取对象ReadLine()ReadToEnd()Close()方法二进制文件的读写BinaryReader类BinaryWriter类实例using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace Lesson12_3 { class Program { static void Main(string[] args) { //1、 FileStream fs = new FileStream(@"D:\二进制.data",FileMode.Create); //2、二进制写入对象 BinaryWriter bw = new BinaryWriter(fs); //3、写入二进制文件 for (int i = 0; i < 10; i++) { bw.Write(i); } Console.WriteLine("已写入"); //4、 bw.Close(); //5、 fs.Close(); Console.WriteLine("=================================读取二进制文件============================================="); //1、 FileStream fr = new FileStream(@"D:\二进制.data", FileMode.Open,FileAccess.Read); //2、二进制读取对象 BinaryReader br = new BinaryReader(fr); //3、读取二进制文件 try { while (true) { int num = br.ReadInt32(); Console.WriteLine(num); } } catch (EndOfStreamException ex) { Console.WriteLine("读取完成"); } //4、 bw.Close(); //5、 fs.Close(); } } }复制图片到指定目录using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace Lesson12_4 { class Program { static void Main(string[] args) { //读取图片的二进制信息 FileStream fs = new FileStream(@"D:\Desktop\示例图片.jpg", FileMode.Open,FileAccess.Read); BinaryReader br = new BinaryReader(fs); //读取文件信息 byte[] b = br.ReadBytes((int)fs.Length); br.Close(); fs.Close(); //复制图片--其实就是在另一个路径写入图片信息 FileStream fsWrite = new FileStream(@"E:\示例图片1.jpg", FileMode.Create); BinaryWriter bw = new BinaryWriter(fsWrite); //将读出的字节数组写入到文件 bw.Write(b); Console.WriteLine("图片复制成功"); bw.Close(); fsWrite.Close(); } } }序列化和反序列化序列化将 对象 的状态存储到特定的文件中Serialize()反序列化是序列化的逆向过程,也就是将文件里保存的数据还原为对象Deserialize()步骤引用命名空间using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters; using System.Runtime.Serialization.Formatters.Binary;[Serializable]必须写在类定义前面,表示后面的类可以被序列化实例序列化是面向对象的所以先创建一个类using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Lesson12_5 { [Serializable]//[Serializable]必须写在类定义前面,表示后面的类可以被序列化 class Student { public int StuId { get; set; } public string Name { get; set; } public int Age { get; set; } public string Sex { get; set; } public Student(int StuId, string Name,int Age,string Sex) { this.StuId = StuId; this.Name = Name; this.Age = Age; this.Sex = Sex; } } }然后对实例化这个类并进行序列化和反序列化操作using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters; using System.Runtime.Serialization.Formatters.Binary; namespace Lesson12_5 { class Program { static void Main(string[] args) { Student stu = new Student(1,"fsy",29,"Man"); BinaryFormatter bf = new BinaryFormatter(); FileStream fs = new FileStream(@"D:\MyFile.bin", FileMode.Create, FileAccess.Write); //对象序列化 bf.Serialize(fs,stu); fs.Close(); Console.WriteLine("序列化成功"); Console.WriteLine("=============反序列化============"); //BinaryFormatter bf = new BinaryFormatter(); FileStream fsReader = new FileStream(@"D:\MyFile.bin", FileMode.Open, FileAccess.Read); //反序列化 Student stu1= bf.Deserialize(fsReader) as Student; fsReader.Close(); Console.WriteLine("学号{0},姓名{1},年龄{2},性别{3}",stu1.StuId,stu1.Name,stu1.Age,stu1.Sex); } } }总结File类静态对象实现对文件的创建、拷贝、移动和删除等操作Directory类静态对象实现对目录(文件夹)的操作文件流对象FileStream对象创建该对象时需要指定操作文件的路径、文件的打开方式文件读写权和文件访问方式(可选)流读写对象StreamReader是流读取对StreamWriter是文件写入对象。二进制文件的读写BinaryReaderBinaryWriter序列化和反序列化序列化是将对象的状态存储到特定的文件中。反序列化是将存储在文件中的数据重新构建为对象类对象是否可被序列化,关键是在类的头部添加[Serializable]关键字
2022年06月15日
0 阅读
0 评论
0 点赞
2022-06-13
第十一章调试与异常
第十一章调试与异常目标理解如何调试应用程序和排除错误掌握如何测试C#应用程序在程序中进行错误捕获和错误处理调试必要性在不熟应用程序前必须先对其进行调试在事物处理过程中,系统显示错误信息错误类型语法错误逻辑错误运行时错误调试过程观察程序运行时行为跟踪变量的值确定语义错误的位置VS中的操作步骤合理设置断点鼠标右键F9运行DebugF5F10单步执行VS.NET调试工具“局部变量”窗口“监视”窗口“即时”窗口“快速监视”窗口异常C#中的异常处理语句异常是由try语句来处理的try语句提供了一种机制来捕捉块执行过程中发生的异常C提供了3种异常处理结构:try-catchtry-catch-finallytry-finallytry块:try块监视可能抛出异常的语句。 try { //statements that may cause an exception }·try块管理包含在它内部的语句,定义与它相关的异常处理程序的范围。·try块必须至少有一个catch块。C#引发异常有以下两种方式使用显式throwi语句来引发异常控制权无条件转到处理异常的部分代码使用语句或表达式在执行过程中激发了某个异常的条件,使得操作无法正常结束,从而引发异常Try......Catch......Finally I/O设备异常 try { //程序代码 } catch(IOException E) { //错误处理代码 }System.Exception可以是系统中任何一种异常Try/catch/finally异常Catch可以多重Finally块一般清理内存用Try块中最后执行System.Exception属性含义Message描述当前异常对象的字符串Source引必当前异常对象的程序或对象名称StackTrace发异常时调用堆栈上的帧的字符串表示InnerException表示引发当前异常的内部异常对象常用异常类ArithmeticException数学运算、类型转换异常类InvalidCastException不正确转型异常。例如String转Decimal操作。IndexOutOfRangeException数组访问越界异常。NullReferenceException空引用对象异常。实例using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Collections; namespace Lesson11_2 { class Program { static void Main(string[] args) { ArrayList list = new ArrayList(); try { //程序尝试执行的代码 list.Add(0); list.Add(1); list.Add("2"); list.Add(3); list.Add(4); Console.WriteLine(list[7]); foreach (int item in list) { Console.WriteLine(item); } } catch (IndexOutOfRangeException indexOut)//下标越界异常 { Console.WriteLine(indexOut.Message); } catch (Exception ex)//想要捕获的异常类型 { //错误处理代码 Console.WriteLine(ex.Message);//输出异常的信息 } finally { //不管有没有出现异常或者异常有没有被处理,都会最终执行的代码 Console.WriteLine("程序终止!"); } } } }Throw语句自定义异常当开发人员需要提供更为广泛的信息,或需要程序具有特殊功能时,就可以定义自定义异常。首先要创建一个自定义异常类,该类必须直接或间接派生自System.ApplicationException。using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Lesson11_3 { /// <summary> /// 除数不能为0为异常 /// </summary> class MyCustomException:ApplicationException { public MyCustomException() { } public MyCustomException(string message) : base(message) { } } }using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Lesson11_3 { class Program { static void Main(string[] args) { Console.WriteLine("请输入你的除数"); int divisor = int.Parse(Console.ReadLine()); try { if (divisor==0) { throw new MyCustomException("除数不能为0"); } } catch (MyCustomException ex) { //throw ex; Console.WriteLine("自定义异常信息"+ex.Message); } } } }注意事项请勿将try/catch块处于控制流。用户只能处理catch异常。不得声明空catch块。避免在catch块内嵌套try/catch只有使用finally块才能从try语句中释放资源。总结调试搜寻和消除应用程序中的错误的过程。语法错误表示编译器无法理解代码。“局部变量”窗口允许用户监控当前方法中所有局部变量的值。异常当应用程序遇到运行时错误,就会引发异常。C#中的所有异常都派生自System.Exception类。
2022年06月13日
0 阅读
0 评论
0 点赞
2022-06-12
第十章集合与泛型
第十章集合与泛型目标使用System.Array操作数组集合使用System.ArrayListi对象使用System.Hashtable对象理解泛型集合类List对象掌握Dictionary<TKey,TValue>掌握Lambda表达式IComparable接口的应用泛型接口IComparable接☐IComparer接口{dotted startColor="#ff6c6c" endColor="#1989fa"/}System.Array抽象的基类提供Createlnstance方法创建数组可以是多维的下标可设置System.Array的属性和方法属性描述Length得到数组所有维元素总个数的属性实例方法描述Copyto()将一个一维数组中的所有元素复制到另一个一维数组中GetLength()返回指定维的元素个数GetVaule通过索引返回指定元素的值SetVaule将数组中的指定元素设为指定值静态方法描述BinarySearch()使用二进制搜索方法搜索一维已排序数组中的某个值Clear()将数组中一组元素设为0或nullCopy()将数组中的一部分元素复制到另一个数组中CreateInstance()初始化Array类的实例Indexof()返回给定值在一维数组中首次出现的位置索引Last Indexof()返回给定值在一维数组中最后一次出现的位置索引Reverse()反转给定一维数组中元素的顺序Resize()将数组的大小更改为指定的新大小Sort()将数组中的元素进行排序,只能对一维数组从小到大排序实例 static void Main(string[] args) { //系统类可以按F12看定义 //用Array(抽象类)创建数组 Array arr = Array.CreateInstance(typeof(int),5);//创建int类型长度为5的数组 arr.SetValue(89, 0);//为数组元素设置值 arr.SetValue(95, 1); Console.WriteLine(arr.Length); foreach (int item in arr) { Console.WriteLine(item); } for (int i = 0; i < arr.Length; i++) { Console.WriteLine("数组中第{0}个元素是:{1}",i+1,arr.GetValue(i)); } }{dotted startColor="#ff6c6c" endColor="#1989fa"/}集合System.Collectionsi命名空间ArrayList类Hashtable类集合-ArrayList类容量可以根据需要动态扩展。通过设置ArrayList..Capacityl的值可以执行重新分配内存和复制元素等操作批量操作提供的方法在某个时间追加、插入或移出一组元素一维下标不可设置实例 static void Main(string[] args) { //实例化一个集合 ArrayList list = new ArrayList(4); list.Add(10); list.Add("FSY"); list.Add(101.101); People pl = new People(); list.Add(pl); foreach (var item in list) { Console.WriteLine(item); } list.Add("1"); //移除集合中的元素,集合容量不变 list.Remove(10); //如果添加元素时添加的个数大于容量时,容量会自动增加一倍 Console.WriteLine("集合的个数是"+list.Count); Console.WriteLine("集合的容量是"+list.Capacity); //将集合容量设置为集合的实际个数 list.TrimToSize(); Console.WriteLine("集合的个数是" + list.Count); Console.WriteLine("集合的容量是" + list.Capacity); }集合-Hashtable类将数据作为一组键值对来存储键索引器不可重复属性描述Count该属性用于获取哈希表中键值对的数量方法描述Add()将一个键值对添加到哈希表中ContainKey()测试键是否已经存在Remove()根据键将对应的键值对从哈希表移除实例 static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add(1,"FSY"); ht.Add(2, "ZLY"); ht.Add("FSY", "ZLY"); Console.WriteLine("有{0}个元素",ht.Count); Console.WriteLine(ht.ContainsKey("FSY")); if (ht.ContainsKey(1)==true) { Console.WriteLine(ht[1]); } //集合没有类型限制,很容易出现类型访问错误,类型是不安全的 foreach (var item in ht.Keys) { Console.WriteLine(ht[item]); } }泛型集合明确指定放入集合中对象的数据类型优点类型安全使用泛型集合编译器会在编译期间检查要放入集合的对象的数据类型,如果发现不是某种特定的类型就会报错提高性能存取数据时不会发生类型转换,特别是存取值类型时不会发生装箱和拆箱操作System.Collections.Generici命名空间 List<T> Dictionary<K,V>List语法泛型集合类<数据类型>实例名=new泛型集合类<数据类型>()添加和访问元素、插入和删除元素、清空集合、把元素复制到数组中,而且可以搜索和转换元素、使元素逆序等高级操作FindAll()方法检索ForEach()方法可以使用委托对集合的每一个成员进行操作实例 class Program { static void Main(string[] args) { //泛型集合 //定义一个Student类型的泛型集合 List<Student> list = new List<Student>(); //实例化4个学生对象 Student stu1 = new Student("张三", 1); Student stu2 = new Student("李四", 2); Student stu3 = new Student("王五", 3); Student stu4 = new Student("赵六", 4); //向泛型集合添加元素 list.Add(stu1); list.Add(stu2); list.Add(stu3); list.Add(stu4); Console.WriteLine(list.Count); foreach (Student item in list) { Console.WriteLine("学号:{0},姓名:{1}",item.StuId,item.Name); } //效果与foreach一致 list.ForEach(delegate (Student s) { Console.WriteLine("学号:{0},姓名:{1}", s.StuId,s.Name); }); //在泛型集合中查找所有学号小于3的学生 List<Student> listFind = list.FindAll(delegate (Student s) { if (s.StuId < 3) { return true; } else { return false; } }); listFind.ForEach(delegate (Student s) { Console.WriteLine("学号:{0},姓名:{1}", s.StuId, s.Name); }); }Dictionary<K,V>语法Dictionary<数据类型,数据类型>实例名=new Dictionary<数据类型,数据类型>();Dictionary<TKey,Value>类的功能与HashTable类类似,也是通过键值对来存储元素。TKey表示键的数据类型TValue表示值的数据类型。实例 class Program { static void Main(string[] args) { //泛型集合 //定义一个Student类型的泛型集合 List<Student> list = new List<Student>(); //实例化4个学生对象 Student stu1 = new Student("张三", 1); Student stu2 = new Student("李四", 2); Student stu3 = new Student("王五", 3); Student stu4 = new Student("赵六", 4); //向字典类添加元素 dicStu.Add(stu1.StuId, stu1); dicStu.Add(stu2.StuId, stu2); dicStu.Add(stu3.StuId, stu3); dicStu.Add(stu4.StuId, stu4); //dicStu.Add(stu4.Name,stu4);错,数据类型必须保持一致 foreach (int item in dicStu.Keys) { Console.WriteLine(dicStu[item].Name); } }对象与集合初始化器集合初始化器用来初始化一个集合,它由一系列元素组成,并封闭于“{”和“}”标记内//对象初始化器 Student s1 = new Student{SId=101, SName="张三"}; Student s2 = new Student{SId=102, SName="李四"}; //集合初始化器 List<Student> lstStu = new List<Student> {s1,s2};实例 static void Main(string[] args) { //实例化学生对象 //对象初始化器 Student stu1 = new Student { SId = 1, Name = "FSY" }; Student stu2 = new Student { SId = 2, Name = "YSF" }; //集合初始化器 List<Student> list = new List<Student> { stu1, stu2 }; foreach (Student item in list) { Console.WriteLine("学号:"+item.SId+",姓名"+item.Name); } }Lambda表达式s是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或飙到式目录树类型基本形式(inputparameter)=>expression=>读作“goes to”Lambda语句(inputparameter)=>{statement;};实例 static void Main(string[] args) { //Lambda表达式 //语法:参数=>表达式 int[] arr = { 436, 67, 78, 9, 3, 57, 2, 7, 9, 1 }; //查找数组中奇数的个数 Console.WriteLine(arr.Count(n => n % 2 == 1)); /* public static bool JiSuan(int n) { if (n %== 1) { return truwe; } else { return false; } } */ }总结Array类Createlnstance方法来创建Array对象属于System命名空间集合用于管理在运行时动态创建的元素项集合ArrayList类可以批量操作Hashtable类键值对System.Collections命名空间泛型集合ListDictionary<Tkey,Tvalue>类型安全属于System.Collections.Generic命名空间Lambda表达式一种更纯粹的匿名方法
2022年06月12日
0 阅读
0 评论
0 点赞
2022-06-09
第九章常用类
第九章常用类目标{dotted startColor="#ff6c6c" endColor="#1989fa"/}Math类为三角函数、对数函数和其他通用数学函数提供常数和静态方法对数字变量提供操作方法系统类,只需会操作 class Program { static void Main(string[] args) { //Math类是一个静态类 Console.WriteLine(Math.PI);//圆周率 Console.WriteLine(Math.Abs(-2));//返回自然数的绝对值 Console.WriteLine(Math.Acos(0.5));//返回余弦值为指定数字的角度(单位为弧度) Console.WriteLine(180*Math.Acos(0.5)/Math.PI);//返回余弦值为指定数字的角度 Console.WriteLine(Math.Floor(6.7));//对小数向下取整 Console.WriteLine(Math.Round(6.7));//返回四舍五入的值 Console.WriteLine(Math.Sqrt(9));//返回指定数的平方根 Console.WriteLine(Math.Pow(3, 2));//求一个数的指定次幂 } }{dotted startColor="#ff6c6c" endColor="#1989fa"/}Random类命名空间:System伪随机生成器伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,因为它们是一种确定的数学算法选择的,但是从实用的角度而言,其随机程度已经够用。class Program { static void Main(string[] args) { //Random类是用来产生随机数的一个系统类 // 第一种实例化 Random rd = new Random(); Console.WriteLine(rd.Next());//返回一个随机数 Console.WriteLine(rd.Next(10));//返回一个指定最大值的随机数 Console.WriteLine(rd.Next(100,200));//返回一个指定范围的随机数 //第二种实例化 Random rd2 = new Random(6); for (int i = 0; i < 10; i++) { Console.Write(rd2.Next(100,200)+" "); } } }{dotted startColor="#ff6c6c" endColor="#1989fa"/}DateTime类一个结构体,它表示时间上的一刻,通常以日期和当天的时间表示构造函数Datetime静态属性NowToday static void Main(string[] args) { //DateTime是表示时间的结构体 Console.WriteLine(DateTime.IsLeapYear(2024)); //年份是否是闰年 Console.WriteLine(DateTime.Now);//获取此计算机上的当前时间 Console.WriteLine(DateTime.Now.AddYears(3));//在当前时间的基础上加上相应的日期 Console.WriteLine(DateTime.Today);//获取此计算机上的当前日期,时间为0 Console.WriteLine(DateTime.Today.ToLongDateString());//获取此计算机上的当前日期 Console.WriteLine(DateTime.Today.ToShortDateString());//获取此计算机上的当前日期 Console.WriteLine(DateTime.Now.ToLongTimeString());//获取此计算机上的当前时间,时分秒 Console.WriteLine(DateTime.Now.ToShortTimeString());//获取此计算机上的当前时间,时分 Console.WriteLine(DateTime.Now.ToString());//获取此计算机上的当前时间 Console.WriteLine(DateTime.Now.ToString());//获取当地的时间 }{dotted startColor="#ff6c6c" endColor="#1989fa"/}String类和StringBUilder类System.String类具有不变性和string关键字对应可以使用“+”连接多个字符串可以使用索引器提取字符频繁的插入、删除或替换操作就会明显的降低性能StringBuilder类具有可变性只能进行增、删、改操作Length,属性获取字符串的实际长度,Capacity属性获取字符串占据的内存容量实例 static void Main(string[] args) { //String和StringBuiler都是和字符串有关的类 //String类 string str = "你好," + "我是FSY,我是FSY,我是FSY"; Console.WriteLine(str); Console.WriteLine(str.Length);//计算字符串的长度,空格也算 Console.WriteLine(str.Remove(3,5));//从0开始计算,删除后面的字符 Console.WriteLine(str.Replace("F", "Y"));//替换指定字符 Console.WriteLine(str.Insert(3,"1"));//插入字符的位置及字符 Console.WriteLine(str.Substring(3,5));//从字符串中提取一些字符 Console.WriteLine("======================================================"); //按照指定规则分割字符串 string[] arr = str.Split(','); //遍历输出数组中的元素 foreach (string item in arr) { Console.WriteLine(item+"*"); } Console.WriteLine("========================================================"); //StringBuilder具有可变性 StringBuilder sb = new StringBuilder("Hello World"); Console.WriteLine(sb.Capacity);//字符串在内存中的容量 sb.Append("!你好,世界!");//在字符串后追加内容 Console.WriteLine(sb); Console.WriteLine(sb.Capacity);//字符串在内存中的容量 sb.Remove(3, 5);//将指定范围的字符从此实例中移除 Console.WriteLine(sb); }{dotted startColor="#ff6c6c" endColor="#1989fa"/}正则表达式引入System.Text.RegularExpressionsi命名空间Regex包含了正则表达式,以及使用正则表达式的各种方法。MathchCollction包含了一个正则表达式找到的所有匹配项。Match包含了一次匹配中所有匹配的文本。GroupCollection包含了一次匹配中的所有分组。Group包含了一个分组集合中一个组的细节。CaptureCollection包含一个组的所有Capture对象。Capture返回组内一次捕获所匹配的字符串。Regex类构造方法Regex(string pattern);Regex(string pattern,RegexOptions options);标志描述IgnoreCase忽略大小写,默认是区分大小写的None不设定标志,这是默认选项MultiLine指定了^和$可以匹配行的开头和结尾,以及字符串的开头和结尾。也就是说,使用换行符分隔,在每一行都能得到不同的匹配。但“.”仍然不匹配换行符IsMatch()方法实例方法New regex静态方法Regex.IsMatch实例 class Program { static void Main(string[] args) { //第一种:创建正则表达式对象 Regex rg = new Regex("ABC"); string str = "there is much ABC"; //使用IsMatch方法对字符串进行匹配 Console.WriteLine(rg.IsMatch(str)); //第二种:创建正则表达式对象 Regex reg = new Regex("ABC", RegexOptions.IgnoreCase);//不区分大小写 string str1 = "there is much AbC"; Console.WriteLine(reg.IsMatch(str1)); }Replace()方法实例方法New regex静态方法Regex.Replace实例Console.WriteLine(Regex.Replace("舔狗得house", "得", "不得"));Split()方法静态方法public static string[]Split(string input,string pattern)public static string[]Split(string input,string pattern,RegexOptions options)实例方法 string[] strArr = Regex.Split("绿色生态,绿色生活,铜绿,人生赢家", "绿"); foreach (var item in strArr) { Console.WriteLine(item); }{dotted startColor="#ff6c6c" endColor="#1989fa"/}MathchCollction类Match类和MathchCollction类利用正则表达式进行匹配时往往匹配成功的次数不止1次,如果想知道每一个成功匹配的细节,则需要用Match类和MatchCollection类。Match类表示一次成功的匹配,MatchCollection类是一个Match对象的集合。我们可以使用Regex类的Match()方法来得到一个Match对象或者用Matchs()方法来得到一个MatchCollection对象C#正则表达式匹配字符之含义1、正则表达式的作用:用来描述字符串的特征。2、各个匹配字符的含义:, :表示除\n以外的单个字符 [] :表示在字符数组[门中罗列出来的字符任意取单个 | :表示”或"的意思 () :表示改变优先级或"提取组" * :限定前面的表达式出现0次或多次 + :限定前面的表达式出现1次或多次 ? :限定前面的表达式出现0次或1次 ^ :表示以表达式开头(例:^http表示字符串以"http"开头) $ :表示以表达式结尾(例:com$表示字符串以"com"结尾) \d :小写\d表示0-9之间的数字 \D :大写\D表示除了0-9之外的字符 \w :写\w表示[a-zA-Z0-9] \W :大写\W表示除了[a-zA-Z0-9]之外的字符 \s :小写\s表示非可见字符(如空格、tab、\r\n..........) \S :大写\S表示除了非可见字符之外的字符实例 string str3="a sailor went to sea to set,to see what he could see"; MatchCollection mc = Regex.Matches(str3,"se\\w");//\是分隔符,\w是一个字符 Console.WriteLine(mc.Count); foreach (Match item in mc) { Console.WriteLine(item); } //验证手机号 string phoneNum = "^1[0-9]{10}$";//手机号的规律 string tel = Console.ReadLine(); //判断用户输入的数字是不是手机号 if (Regex.IsMatch(tel,phoneNum)) { Console.WriteLine("是一个手机号"); } else { Console.WriteLine("随便了"); }总结掌握Math类及方法的使用掌握Randoma类及方法的使用掌握DateTime类及方法的使用System.String类的对象具有不变性System.Text.StringBuilder类的对象的内容可以改变Regex类可用正则表达式处理复杂的字符串问题
2022年06月09日
0 阅读
3 评论
0 点赞
1
2
3
...
5