C#练习题——List排序与反转操作详解:怪物属性排序示例
一、任务
写一个怪物类,创建10个怪物将其添加到List中对List列表进行排序,根据用户输入数字进行排序
1、攻击排序
2、防御排序
3、血量排序
4、反转
二、代码解析
1. Monster类定义
attack:攻击力defend:防御力hp:血量
一个静态字段SortType
用于存储用户选择的排序类型
2. 随机生成怪物列表
使用Random类生成10个具有随机属性的怪物对象,并添加到List<Monster>集合中。
3. 排序逻辑实现
按攻击力升序排列
按防御力升序排列
按血量升序排列
翻转列表顺序
4. 比较函数详解
monsters.Sort((a, b) =>
{return a.attack > b.attack ? 1 : -1;
});
返回负数表示a应该排在b前面
返回正数表示a应该排在b后面
返回0表示a和b相等
这种设计允许Sort方法内部算法根据比较结果确定元素的相对位置。
5. 异常处理
使用try-catch块捕获用户输入非数字时的异常,提高程序健壮性。
三、完整代码
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
using System.Xml.Linq;namespace 进阶测试
{class Monster{public static int SortType = 1;public int attack;public int defend;public int hp;public Monster(int attack, int defend, int hp){this.attack = attack;this.defend = defend;this.hp = hp;}public override string ToString(){return string.Format("怪物信息-血量{0}攻击力{1}防御力{2}", this.hp, this.attack, this.defend);}}class Program{static void Main(string[] args){List<Monster> monsters = new List<Monster>();Random r = new Random();for (int i = 0; i < 10; i++){monsters.Add(new Monster(r.Next(100, 201), r.Next(5, 21), r.Next(2, 10)));Console.WriteLine(monsters[i]);}Console.WriteLine("********************");try{Console.WriteLine("请输入1~4的数字进行排序");Console.WriteLine("1:按攻击力升序排列");Console.WriteLine("2:按防御力升序排列");Console.WriteLine("3:按血量序排列");Console.WriteLine("4:翻转");Monster.SortType = int.Parse(Console.ReadLine());switch (Monster.SortType){case 1:monsters.Sort((a, b) =>{return a.attack > b.attack ? 1 : -1;});break;case 2:monsters.Sort((a, b) =>{return a.defend > b.defend ? 1 : -1;});break;case 3:monsters.Sort((a, b) =>{return a.hp > b.hp ? 1 : -1;});break;case 4://翻转APImonsters.Reverse();break;}for (int i = 0; i < 10; i++){Console.WriteLine(monsters[i]);}}catch{Console.WriteLine("请输入数字");}}}
}