我现在在做一个教程。需要实现生成20个各不相同的数字存入数组中。我使用一个递归函数实现判断生成的随机数是否相同。可是结果却常常有2个是相同的,其他的都是不同的。代码如下:请大家指教,谢谢!!
int[] a = new int[20];
Random s = new Random(); for (int i = 0; i < 20; i++)
{ int r = s.Next(1, 30);
if (i == 0)
{ a[i] = r; }
else
{
a[i] = Get(a, r, i, s);//递归函数 }
private int Get(int[] a, int random, int i, Random s)
{ for (int j = 0; j < i; j++)
{
if (random == a[j])
{
random = s.Next(1, 30);
Get(a, random, i, s); } }
return random; }
int[] a = new int[20];
Random s = new Random(); for (int i = 0; i < 20; i++)
{ int r = s.Next(1, 30);
if (i == 0)
{ a[i] = r; }
else
{
a[i] = Get(a, r, i, s);//递归函数 }
private int Get(int[] a, int random, int i, Random s)
{ for (int j = 0; j < i; j++)
{
if (random == a[j])
{
random = s.Next(1, 30);
Get(a, random, i, s); } }
return random; }
解决方案 »
- ********* C# WF 中如何做类似内容的 ListView 项**********
- 怎样继承单态类
- GridView 编辑功能 中的 "更新" 问题 请高手帮助!! 在线等!!@
- 急寻《用户需求调研报告》一份(模板、文件皆可)
- 请教:用vc写的控件,在c#中用时有如下问题需解决
- 怎么回事?请帮忙看看
- 如何在制作安装包时自动检测客户是否安装.NET Framework并安装呢
- 小问题(快来拿分):怎样知道自己安装的Visual Studio .NET的版本?
- 怎么通过拖放网页连接获得该连接指向的地址?
- 如何获得当鼠标单击windowsapp标题栏后就可以实现winform移动的效果。。如果在别的控件上实现同样的功能需要将鼠标定义为哪种动作事件
- 讨论:基于.NET开发的自动化软件测试、自动化软件构造管理与软件配置管理
- 一个麻烦的问题!如何远程控制某台机器!就象qq这样
你第一次取随机数的时候就从这里面取,取完一个后,把这个值和最后一位的互换位置
这样下次取就是从Index:0-28里面取,以此类推....这样肯定不会出现重复
private int m_int = 0;
private ArrayList m_list = new ArrayList();
private void Get()
{
Random s = new Random();
while(m_list.Count != 20)
{
m_int = s.Next(1, 30);
if(m_list.Contains(m_int))
{
continue;
}
else
{
m_list.Add(m_int);
}
}
}这样可以解决
这是ArrayList的命名空间
也是个数组
foreach(int i in m_list)
{
listBox1.Items.Add(i.ToString());
}
这样就可以了
private void Get()
{
Random s = new Random();
for(int i = 0; i < 20; i++)
{
bool m_b = false;
m_int = s.Next(1, 30);
for(int j = 0; j < m_list.Length; j ++)
{
if(m_int == m_list[j])
{
m_b = true;
i --;
break;
}
}
if(m_b == false)
{
m_list[i] = m_int;
}
}
}
然后
foreach(int i in m_list)
{
listBox1.Items.Add(i.ToString());
}
不过我这个方法比较笨