习题(异常与设计模式)20240801

avatar
作者
猴君
阅读量:0

文章目录

一、请简述Exception 的作用定义和使用场景

定义:程序中的运行时错误,它违反一个系统约束或应用程序约束,或出现了在正常操作时未预料的情形。
使用场景:分为系统异常和自定义异常。常见的系统异常有:ArithmeticException(算数异常),NullReferenceException(空引用异常),IndexOutOfRangeException(索引越界异常),InvalidOperationException(无效操作异常)等。异常处理包括:try-catch块,finally块,throw关键字以及使用using语句处理资源。

二、异常捕获练习

题目 1: 除法计算器

编写一个程序,读取两个整数并进行除法运算。如果除数为零,程序应捕获 DivideByZeroException 异常,并输出适当的错误消息。
要求:
用户输入两个整数。
捕获除零异常,并输出错误信息。

using System; using System.Diagnostics; using System.Drawing;   namespace ConsoleApp1 {     public class Program     {         static void Main(string[] args)         {             string x=Console.ReadLine();             string y=Console.ReadLine();             int a=Convert.ToInt32(x);             int b=Convert.ToInt32(y);             compute(a,b);             Console.ReadKey();         }                  public static void compute(int x, int y)         {             try             {                 if(y==0)                 {                     x /= y;                 }             }             catch(System.DivideByZeroException ex)             {                 Console.WriteLine(ex.Message);             }         }     } } 

题目 2: 文件读取

编写一个程序,尝试从指定文件中读取内容。如果文件不存在或路径无效,程序应捕获 FileNotFoundException 异常,并输出适当的错误消息。
要求:
使用 System.IO 命名空间中的 FileNotFoundException 异常。
捕获文件未找到异常,并输出错误信息。

using System; using System.Diagnostics; using System.Drawing; using System.IO; using System.Text;  namespace ConsoleApp1 {     public class Program     {         static void Main(string[] args)         {             Read();             Console.ReadKey();         }                  public static void Read()         {             try             {                 FileStream file = new FileStream("C:\\test.txt", FileMode.Open);                 file.Close();             }             catch(System.IO.FileNotFoundException ex)             {                 Console.WriteLine(ex.Message);             }         }     } } 

题目 3: 数字转换

编写一个程序,尝试将用户输入的字符串转换为整数。如果输入的字符串不是有效的数字,程序应捕获 FormatException 异常,并输出适当的错误消息。
要求:
用户输入一个字符串。
尝试将其转换为整数。
捕获格式异常,并输出错误信息。

using System; using System.Diagnostics; using System.Drawing; using System.IO; using System.Text;  namespace ConsoleApp1 {     public class Program     {         static void Main(string[] args)         {             string a=Console.ReadLine();             string b=Console.ReadLine();             Change(a,b);             Console.ReadKey();         }                  public static void Change(string a,string b)         {             try             {                 int x = Convert.ToInt32(a); int y = Convert.ToInt32(b);                }             catch(System.FormatException ex)             {                 Console.WriteLine(ex.Message);             }         }     } } 

题目 4: 数组访问

编写一个程序,尝试访问数组中的一个元素。如果索引超出数组的范围,程序应捕获 IndexOutOfRangeException 异常,并输出适当的错误消息。
要求:
创建一个整数数组。
用户输入一个索引。
捕获数组索引越界异常,并输出错误信息。

using System; using System.Diagnostics; using System.Drawing; using System.Globalization; using System.IO; using System.Text;  namespace ConsoleApp1 {     public class Program     {         static void Main(string[] args)         {             Read();             Console.ReadKey();         }                  public static void Read()         {             int[] nums = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };             try             {                 int x = nums[11];                }             catch(System.IndexOutOfRangeException ex)             {                 Console.WriteLine(ex.Message);             }         }     } } 

题目 5: 自定义异常

定义一个自定义异常类 InvalidAgeException,继承Exception,用来表示用户输入的年龄不合法(小于0或大于150)。编写一个程序,使用 InvalidAgeException 捕获这种非法年龄输入的异常,并输出适当的错误消息。
要求:
定义 InvalidAgeException 类。
用户输入年龄,检查是否合法,并使用自定义异常进行捕获。

using System; using System.Diagnostics; using System.Drawing; using System.Globalization; using System.IO; using System.Text;  namespace ConsoleApp1 {     public class Program     {         static void Main(string[] args)         {             string a = Console.ReadLine();             int n=Convert.ToInt32(a);             Age(n);             Console.ReadKey();         }                  public static void Age(int n)         {              if (n < 0 || n > 150)             {                 throw new InvalidAgeException("年龄不合法");             }         }     } }   public class InvalidAgeException : System.Exception {     public InvalidAgeException() { }     public InvalidAgeException(string message) : base(message) { }     public InvalidAgeException(string message,object invalidObject) : base(message) { } }  

三、使用C#实现建造者模式,并说明其模式的适用场景

using System; using System.Diagnostics; using System.Drawing; using System.Globalization; using System.IO; using System.Text;  namespace ConsoleApp1 {     public class Actor     {         public string Name { get; set; }         public int Age { get; set; }         public string Sex { get; set; }     }       public interface IActorBuider     {         Actor Product { get; set; }         void CreateName();         void CreateAge();         void CreateSex();         Actor ReturnResult();     }      public class AngleBuilder : IActorBuider     {         private Actor _product;          public Actor Product         {             get             {                 if (_product == null)                 {                     _product = new Actor();                 }                 return _product;             }             set => _product = value;         }          public void CreateName()         {             Product.Name = "天使";         }          public void CreateAge()         {             Product.Age = 20;         }          public void CreateSex()         {             Product.Sex = "女";         }          public Actor ReturnResult()         {             return Product;         }     }           public class ActorDirector         {             private IActorBuider _builder;              public void SetBuilder(IActorBuider builder)             {                 _builder = builder;             }              public Actor Constructor()           {             _builder.CreateName();             _builder.CreateAge();             _builder.CreateSex();            return  _builder.ReturnResult();           }         }       public class Program     {         static void Main(string[] args)         {             ActorDirector ad= new ActorDirector();             ad.SetBuilder(new AngleBuilder());             Actor actor=ad.Constructor();             Console.WriteLine($"名称为:{actor.Name}");             Console.WriteLine($"年龄为:{actor.Age}");             Console.WriteLine($"性别为:{actor.Sex}");         }     } } 

四、使用C#实现原型模式,并说明其模式的适用场景

using System; using System.Diagnostics; using System.Drawing; using System.Globalization; using System.IO; using System.Text;  namespace ConsoleApp1 {     public abstract class Prototype     {         public abstract void Fight();         public abstract void BegAlms();         public abstract Prototype Clone();     }      public sealed class XingZheSunPrototype : Prototype     {         public override void Fight()         {             Console.WriteLine("腾云驾雾,各种武艺");         }         public override void BegAlms()         {             Console.WriteLine("什么都能要来");         }         public override Prototype Clone()         {             return (XingZheSunPrototype)this.MemberwiseClone();         }     }      public sealed class SunXingZhePrototype : Prototype     {         public override void Fight()         {             Console.WriteLine("七十二变");         }         public override void BegAlms()         {             Console.WriteLine("只能要来水果");         }         public override Prototype Clone()         {             return (SunXingZhePrototype)this.MemberwiseClone();         }     }       public class Program     {         static void Main(string[] args)         {             Prototype xingzhesun=new XingZheSunPrototype();             Prototype xingzhesun2=xingzhesun.Clone();             Prototype xingzhesun3= xingzhesun.Clone();              Prototype sunxingzhe=new SunXingZhePrototype();             Prototype sunxingzhe2=sunxingzhe.Clone();             Prototype sunxingzhe3= sunxingzhe.Clone();             Prototype sunxingzhe4= sunxingzhe.Clone();             Prototype sunxingzhe5= sunxingzhe.Clone();              sunxingzhe2.Fight();             xingzhesun3.BegAlms();              Console.Read();         }     } } 

五、使用C#实现适配器模式,并说明其模式的适用场景

using System; using System.Diagnostics; using System.Drawing; using System.Globalization; using System.IO; using System.Text;  namespace ConsoleApp1 {     public class TwoHoleTarget     {         public virtual void Request()         {             Console.WriteLine("两孔的充电器可以使用");         }     }     public class ThreeHoleAdaptee     {         public void SpecificRequest()         {             Console.WriteLine("我是三个孔的插头也可以使用了");         }     }      public interface ITwoHoleTarget     {         void Request();     }      public class threeToTwoAdapter : ThreeHoleAdaptee, ITwoHoleTarget     {         public void Request()         {             this.SpecificRequest();         }     }      public class ThreeToTwoAdapter : TwoHoleTarget     {         private ThreeHoleAdaptee threeHoleAdaptee = new ThreeHoleAdaptee();          public override void Request()         {             threeHoleAdaptee.SpecificRequest();         }     }       public class Program     {         static void Main(string[] args)         {             TwoHoleTarget homeTwoHole = new ThreeToTwoAdapter();             homeTwoHole.Request();                          ITwoHoleTarget change = new threeToTwoAdapter();             change.Request();             Console.ReadLine();         }     } }  

六、使用C#实现桥接模式,并说明其模式的适用场景

using ConsoleApp1; using System; using System.Diagnostics; using System.Drawing; using System.Globalization; using System.IO; using System.Security.Cryptography.X509Certificates; using System.Text;  namespace ConsoleApp1 {      public abstract class Database     {         protected PlatformImplementor _implementor;          protected Database(PlatformImplementor implementor)         {             this._implementor = implementor;         }          public abstract void Create();     }      public abstract class PlatformImplementor     {         public abstract void Process();     }      public class SqlServer2000 : Database     {         public SqlServer2000(PlatformImplementor implementor) : base(implementor){ }             public override void Create()         {             this._implementor.Process();         }         }     }  public class SqlServer2005 : Database {     public SqlServer2005(PlatformImplementor implementor) : base(implementor){ }         public override void Create()     {         this._implementor.Process();     }  }  public class SqlServer2000UnixImplementor : PlatformImplementor {     public override void Process()     {         Console.WriteLine("SqlServer2000针对Unix的具体实现");     } }  public sealed class SqlServer2005UnixImplementor : PlatformImplementor {     public override void Process()     {         Console.WriteLine("SqlServer2005针对Unix的具体实现");     } }    public class Program     {         static void Main(string[] args)     {         PlatformImplementor SqlServer2000UnixImp = new SqlServer2000UnixImplementor();         PlatformImplementor SqlServer2005UnixImp = new SqlServer2005UnixImplementor();          Database SqlServer2000Unix = new SqlServer2000(SqlServer2000UnixImp);         Database SqlServer2005Unix = new SqlServer2005(SqlServer2005UnixImp);         SqlServer2000Unix.Create();         SqlServer2005Unix.Create();         Console.ReadLine();     } }  

七、使用C#实现装饰器模式,并说明其模式的适用场景

using ConsoleApp1; using System; using System.Diagnostics; using System.Drawing; using System.Globalization; using System.IO; using System.Security.Cryptography.X509Certificates; using System.Text;  namespace ConsoleApp1 {     public abstract class House     {         public abstract void Renuvation();     }      public abstract class DecorationStrategy : House     {         protected House _house;          protected DecorationStrategy(House house)         {             this._house = house;         }          public override void Renuvation()         {             if (this._house != null)             {                 this._house.Renuvation();             }         }     }          public sealed class StarDengHouse : House {             public override void Renuvation()             {                 Console.WriteLine("装修StarDeng的房子");             }         }          public sealed class HouseSecurityDecorator : DecorationStrategy         {             public HouseSecurityDecorator(House house) : base(house) { }              public override void Renuvation()             {                 base.Renuvation();                 Console.WriteLine("增加安全系统");             }          }          public sealed class KeepWarmDecorator : DecorationStrategy         {             public KeepWarmDecorator(House house) : base(house) { }              public override void Renuvation()             {                 base.Renuvation();                 Console.WriteLine("增加了保温的功能");             }         }         public class Program     {         static void Main(string[] args)         {             House myselfHouse = new StarDengHouse();              DecorationStrategy securityHouse = new HouseSecurityDecorator(myselfHouse);             securityHouse.Renuvation();              DecorationStrategy securityAndWarmHouse = new KeepWarmDecorator(securityHouse);             securityAndWarmHouse.Renuvation();              Console.ReadLine();          }     } } 

八、使用C#实现外观模式,并说明其模式的适用场景

using ConsoleApp1; using System; using System.Diagnostics; using System.Drawing; using System.Globalization; using System.IO; using System.Security.Cryptography.X509Certificates; using System.Text;  namespace ConsoleApp1 {     public class SystemA     {         public void MethodA()         {             Console.WriteLine("执行身份认证");         }     }      public class SystemB     {         public void MethodB()         {             Console.WriteLine("执行系统安全检查");         }     }      public class SystemC     {         public void MethodC()         {             Console.WriteLine("执行网银安全检查");         }     }      public class SystemFacade     {         private SystemA auth;         private SystemB security;         private SystemC netbank;          public SystemFacade()         {             auth = new SystemA();             security = new SystemB();             netbank = new SystemC();         }          public void Buy()         {             auth.MethodA();             security.MethodB();             netbank.MethodC();              Console.WriteLine("我已经成功购买了");         }     }       public class Program     {         static void Main(string[] args)         {             SystemFacade facade = new SystemFacade();             facade.Buy();              Console.ReadKey();         }     } } 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!