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