C#知识点-05(Params可变参数,彩票案例)

params可变参数:

params:封装多个相同数据类型的参数
被params标记的数组,成为可变参数数组
1、你可以正常传入一个与之数据类型匹配的数组
2、传入与数组类型元素一致的若干个元素进去,params会把这些跟数组元素类型一致的数据,拼成一个数组
3、使用细节:params可变参数数组,必须是形参列表中的最后一个元素。

计算任意多个数间的最大值(提示:params)
 

static void Main(string[] args)
        {
            int max = GetMax(1, 2, 3, 4, 5);
            int[] n = { 2, 3, 4, 45, 65 };
            int max2 = GetMax(n);

            Console.WriteLine(max);
            Console.WriteLine(max2);
            Console.ReadKey();
        }

        static int GetMax(params int[] nums)
        {
            int max = nums[0];
            for (int i = 0; i < nums.Length; i++)
            {
                if (nums[i] > max)
                {
                    max = nums[i];
                }
            }
            return max;
        }

彩票案例

要求:
方法一:让用户自选数字
选数字    6个红球  1个篮球    红球  1-33  篮球 1-16      所有的红球,不能重复  篮球可以跟红球重复
方法二:随机生成中奖号码
生成中奖号码  6个红球 1个篮球  红球 1-33  篮球 1-16   所有的红球,不能重复  篮球可以跟红球重复 
方法三:
比对用户自选数字和中奖数字的重复的个数

static void Main(string[] args)
        {
            int[] myNumbers = GetMyNumbers();

            Console.WriteLine("您选的号码是{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}",
                myNumbers[0], myNumbers[1], myNumbers[2], myNumbers[3], myNumbers[4], myNumbers[5], myNumbers[6]);

            int[] winNumbers = Get_500_Numbers();
            Console.WriteLine("本次大奖,中奖号码为{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}",
                winNumbers[0], winNumbers[1], winNumbers[2], winNumbers[3], winNumbers[4], winNumbers[5], winNumbers[6]);

            Console.WriteLine("========================开奖拉!!!!!!!=======================");

            string res = GetMoney(myNumbers, winNumbers);
            Console.WriteLine("恭喜您,本次获得的大奖是{0}", res);
            Console.ReadKey();
        }

        /// <summary>
        /// 返回用户自选的6个红球+1个蓝球
        /// </summary>
        /// <returns></returns>
        static int[] GetMyNumbers()
        {
            int[] myNumbers = new int[7];  //6个红球+1个蓝球
                                           //处理红球的业务逻辑
            for (int i = 0; i < myNumbers.Length - 1; i++)
            {
                Console.WriteLine("请输入第{0}个红球", i + 1);
                int number = Convert.ToInt32(Console.ReadLine());
                //number  1-33正确的值,并且不重复   1-33正确,但是重复   1-33之外
                if (number < 1 || number > 33)
                {
                    //数字越界
                    Console.WriteLine("输入的数字,不在正确的范围内,请重新输入!!!!");
                    i--;
                }
                else
                {
                    //1 -33  可能重复,也可能不重复
                    if (Array.IndexOf(myNumbers, number) == -1)
                    {
                        //表示:数字是第一次出现,可以加到数组中
                        myNumbers[i] = number;
                    }
                    else
                    {
                        //重复了
                        Console.WriteLine("不允许输入重复数字,请重新输入");
                        i--;
                    }
                }

            }

            //处理蓝球逻辑
            while (true)
            {
                //蓝球
                Console.WriteLine("请输入蓝球");
                int blueNumber = Convert.ToInt32(Console.ReadLine());
                //1-16
                if (blueNumber >= 1 && blueNumber <= 16)
                {
                    //符合要求
                    myNumbers[6] = blueNumber;
                    break;
                }
                else
                {
                    //数据越界
                    Console.WriteLine("请输入正确范围的蓝球");
                }
            }

            return myNumbers;
        }
        /// <summary>
        /// 中奖号码
        /// </summary>
        /// <returns></returns>
        static int[] Get_500_Numbers()
        {
            int[] winNumbers = new int[7];

            Random r = new Random();
            //给中奖号码的红球赋值
            for (int i = 0; i < winNumbers.Length - 1; i++)
            {
                int rNumber = r.Next(1, 34);
                if (Array.IndexOf(winNumbers, rNumber) == -1)
                {
                    //不重复
                    winNumbers[i] = rNumber;
                }
                else
                {
                    i--;
                }
            }

            //篮球
            winNumbers[6] = r.Next(1, 17);

            return winNumbers;
        }
        /// <summary>
        /// 兑奖
        /// </summary>
        /// <returns></returns>
        static string GetMoney(int[] myNumbers, int[] winNumbers)
        {
            string res = null;//"" null
            int count = 0;//记录中奖的次数

            //篮球的比较
            if (myNumbers[6] == winNumbers[6])
            {
                count += 2;
            }
            //红球的比较
            for (int i = 0; i < myNumbers.Length - 1; i++)    //   1 2 3 4 5 6  3
            {
                for (int j = 0; j < winNumbers.Length - 1; j++)
                {
                    if (myNumbers[i] == winNumbers[j])
                    {
                        count++;
                    }
                }
            }

            if (count >= 1 && count <= 3)
            {
                res = "100w";
            }
            else if (count > 3 && count <= 6)
            {
                res = "300w";
            }
            else
            {
                res = "谢谢参与!!!!!";
            }
            return res;
        }

其中比较某一个数组里有没有重复的数字使用Array.Indexof(数组名,比较的数字)
如果有重复的数字 则返回数组中相同数字的索引;如果没有则返回-1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值