C# 如何使此代码在不重复数字的情况下工作?
我需要以随机顺序打印从1到50的数字,而不需要重复 它C# 如何使此代码在不重复数字的情况下工作?,c#,random,arraylist,C#,Random,Arraylist,我需要以随机顺序打印从1到50的数字,而不需要重复 它 static void Main(字符串[]args) { ArrayList r=新的ArrayList(); Random ran=新的Random(); 对于(int i=0;i
static void Main(字符串[]args)
{
ArrayList r=新的ArrayList();
Random ran=新的Random();
对于(int i=0;i<50;i++)
{
r、 加上(run.Next(1,51));;
}
对于(int i=0;i<50;i++)
控制台写入线(r[i]);
Console.ReadKey();
}
如果不想重复1到50之间的数字,最好的办法是用数字1到50填充一个列表,然后洗牌内容。这里有一个关于洗牌的好帖子:
如果不想重复1到50之间的数字,最好的办法是用数字1到50填充一个列表,然后洗牌内容。这里有一个关于洗牌的好帖子:
您需要做的就是检查列表中是否已存在该号码,如果已存在,则获取另一个号码:
static void Main(string[] args)
{
ArrayList r = new ArrayList();
Random ran = new Random();
int num = 0;
for (int i = 0; i < 50; i++)
{
do { num = ran.Next(1, 51); } while (r.Contains(num));
r.Add(num);
}
for (int i = 0; i < 50; i++)
Console.WriteLine(r[i]);
Console.ReadKey();
}
static void Main(字符串[]args)
{
ArrayList r=新的ArrayList();
Random ran=新的Random();
int num=0;
对于(int i=0;i<50;i++)
{
do{num=ran.Next(1,51);}while(r.Contains(num));
r、 添加(num);
}
对于(int i=0;i<50;i++)
控制台写入线(r[i]);
Console.ReadKey();
}
编辑:这将大大提高效率,防止长时间暂停等待非冲突号码:
static void Main(string[] args)
{
List<int> numbers = new List<int>();
Random ran = new Random();
int number = 0;
int min = 1;
int max = 51;
for (int i = 0; i < 50; i++)
{
do
{
number = ran.Next(min, max);
}
while (numbers.Contains(number));
numbers.Add(number);
if (number == min) min++;
if (number == max - 1) max--;
}
for (int i = 0; i < 50; i++)
Console.WriteLine(numbers[i]);
Console.ReadKey();
}
static void Main(字符串[]args)
{
列表编号=新列表();
Random ran=新的Random();
整数=0;
int min=1;
int max=51;
对于(int i=0;i<50;i++)
{
做
{
编号=运行。下一个(最小值、最大值);
}
while(number.Contains(number));
数字。添加(数字);
if(number==min)min++;
如果(数字==max-1)max--;
}
对于(int i=0;i<50;i++)
控制台写入线(编号[i]);
Console.ReadKey();
}
您需要做的就是检查列表中是否已存在该号码,如果已存在,则获取另一个号码:
static void Main(string[] args)
{
ArrayList r = new ArrayList();
Random ran = new Random();
int num = 0;
for (int i = 0; i < 50; i++)
{
do { num = ran.Next(1, 51); } while (r.Contains(num));
r.Add(num);
}
for (int i = 0; i < 50; i++)
Console.WriteLine(r[i]);
Console.ReadKey();
}
static void Main(字符串[]args)
{
ArrayList r=新的ArrayList();
Random ran=新的Random();
int num=0;
对于(int i=0;i<50;i++)
{
do{num=ran.Next(1,51);}while(r.Contains(num));
r、 添加(num);
}
对于(int i=0;i<50;i++)
控制台写入线(r[i]);
Console.ReadKey();
}
编辑:这将大大提高效率,防止长时间暂停等待非冲突号码:
static void Main(string[] args)
{
List<int> numbers = new List<int>();
Random ran = new Random();
int number = 0;
int min = 1;
int max = 51;
for (int i = 0; i < 50; i++)
{
do
{
number = ran.Next(min, max);
}
while (numbers.Contains(number));
numbers.Add(number);
if (number == min) min++;
if (number == max - 1) max--;
}
for (int i = 0; i < 50; i++)
Console.WriteLine(numbers[i]);
Console.ReadKey();
}
static void Main(字符串[]args)
{
列表编号=新列表();
Random ran=新的Random();
整数=0;
int min=1;
int max=51;
对于(int i=0;i<50;i++)
{
做
{
编号=运行。下一个(最小值、最大值);
}
while(number.Contains(number));
数字。添加(数字);
if(number==min)min++;
如果(数字==max-1)max--;
}
对于(int i=0;i<50;i++)
控制台写入线(编号[i]);
Console.ReadKey();
}
您想要的是
下面是由实现的算法
你想要的是 下面是由实现的算法
看看这个:不要再使用
ArrayList
。它属于C#没有泛型的旧时代。改为使用List
。看看这个:不要再使用ArrayList
。它属于C#没有泛型的旧时代。使用列表
。