一、任务
写一个怪物类,创建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:
//翻转API
monsters.Reverse();
break;
}
for (int i = 0; i < 10; i++)
{
Console.WriteLine(monsters[i]);
}
}
catch
{
Console.WriteLine("请输入数字");
}
}
}
}

被折叠的 条评论
为什么被折叠?



