using System;
namespace ZhuaJiu {
class ZhuaJiu {
public static void Main() {
string[] person;
int personNum;
initPerson(out person, out personNum);
zhuajiu(person, personNum);
Console.ReadKey();
}
public static void initPerson(out string[] person, out int personNum) {
bool flag = true;
personNum = 0;
//检测人数为数字
while (flag) {
try {
Console.Write("请输入要抓阄的人数:");
personNum = int.Parse(Console.ReadLine());
flag = false;
}
catch {
Console.WriteLine("输入的非数字,请重新输入");
}
}
person = new string[personNum];
//检测姓名非空
for (int i = 0; i < personNum; i++) {
Console.Write("请输入第{0}个人的姓名:", i + 1);
flag = true;
while (flag) {
person[i] = Console.ReadLine();
if (person[i] == "" || person[i] == null)
Console.Write("未输入姓名,请重新输入第{0}个人的姓名:", i + 1);
else
flag = false;
}
}
}
public static void zhuajiu(string[] person, int personNum) {
Console.WriteLine("现在开始抓阄...");
System.Random ran = new Random();
for (int i = 0; i < personNum; i++) {
//每次生成最大不超过当前数组长度的随机数,数组长度每次减1;
int ranNow = ran.Next(personNum - i);
Console.WriteLine("第{0}次的抓阄结果是:{1}", i + 1, person[ranNow]);
//每次把数组长度减1;
delPerson(ref person, ranNow);
}
}
public static void delPerson(ref string[] person, int ranNow) {
string[] tempPerson = new string[person.Length - 1];
//在获得的随机数之后,均往前挪一位;
for (int i = ranNow; i < (person.Length - 1); i++) {
person[i] = person[i + 1];
}
//每次把数组长度减1;
for (int j = 0; j < person.Length - 1; j++) {
tempPerson[j] = person[j];
}
person = tempPerson;
}
}
}