C#练习题——List排序与反转操作详解:怪物属性排序示例

一、任务

写一个怪物类,创建10个怪物将其添加到List中对List列表进行排序,根据用户输入数字进行排序
1、攻击排序
2、防御排序
3、血量排序
4、反转


二、代码解析

1. Monster类定义

attack:攻击力

defend:防御力

hp:血量

一个静态字段SortType用于存储用户选择的排序类型

2. 随机生成怪物列表

使用Random类生成10个具有随机属性的怪物对象,并添加到List<Monster>集合中。

3. 排序逻辑实现

  1. 按攻击力升序排列

  2. 按防御力升序排列

  3. 按血量升序排列

  4. 翻转列表顺序

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("请输入数字");
            }
        }
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值