关于两个互不重复的整形数组的怪问题(在线)
//获得第一个随机整形数组
Random mRandom1=new Random();
ArrayList a1=new ArrayList();
int a=0;
while(a1.Count<5)
{
a=mRandom1.Next(1,50);
if(!a1.Contains(a))
{
a1.Add(a);
}
}
//获得第二个随机整形数组
Random mRandom2=new Random();
ArrayList a2=new ArrayList();
int b=0;
while(a2.Count<5)
{
b=mRandom2.Next(0,100);
if (!a2.Contains(b))
{
//通过此方式避免a2数组和a1中的数值产生重复
for (int i=0;i<5;i++)
{
if(Convert.ToString(b)!=a1[i].ToString())
{
a2.Add(b);
}
}
//通过此方式避免a2数组和a1中的数值产生重复
}
}
为什么第二个数组会是随机的几个重复数字?
我用Console.Write分别显示了这两个数组。
我头都快爆了。
问题点数:100、回复次数:10Top
1 楼吴泉(剑正)回复于 2004-09-01 20:47:30 得分 0
上面错了,这才是我的问题
//获得第一个随机整形数组
Random mRandom1=new Random();
ArrayList a1=new ArrayList();
int a=0;
while(a1.Count<5)
{
a=mRandom1.Next(1,50);
if(!a1.Contains(a))
{
a1.Add(a);
}
}
//获得第二个随机整形数组
Random mRandom2=new Random();
ArrayList a2=new ArrayList();
int b=0;
while(a2.Count<5)
{
b=mRandom2.Next(1,50);
if (!a2.Contains(b))
{
//通过此方式避免a2数组和a1中的数值产生重复
for (int i=0;i<5;i++)
{
if(Convert.ToString(b)!=a1[i].ToString())
{
a2.Add(b);
}
}
//通过此方式避免a2数组和a1中的数值产生重复
}
}
为什么第二个数组会是随机的几个重复数字?
我用Console.Write分别显示了这两个数组。
我头都快爆了。Top
2 楼ajqc(一条做着"家"的梦的黄牛)回复于 2004-09-01 21:15:33 得分 1
因为CPU太快了.Top
3 楼haiwangstar(南河三(信为万事之本))回复于 2004-09-01 21:27:39 得分 1
同意楼上。Top
4 楼skyover(嘻哈呵嘿)回复于 2004-09-01 21:31:47 得分 2
不要用mRandom2了。
直接用mRandom即可。
mRandom.NextTop
5 楼humin1906(HJM)回复于 2004-09-01 21:32:30 得分 1
呵呵,cup快也不好啊Top
6 楼吴泉(剑正)回复于 2004-09-01 21:32:36 得分 0
打击太大了!Top
7 楼brightheroes(在地狱中仰望天堂)回复于 2004-09-01 21:34:53 得分 95
try
Random mRandom1=new Random();
ArrayList a1=new ArrayList();
int a=0;
while(a1.Count<5)
{
a=mRandom1.Next(1,50);
if(!a1.Contains(a))
{
a1.Add(a);
Console.WriteLine(a);
}
}
//获得第二个随机整形数组
Random mRandom2=new Random();
ArrayList a2=new ArrayList();
int b=0;
while(a2.Count<5)
{
b=mRandom2.Next(1,50);
if(!a2.Contains(b) && !a1.Contains(b))
{
a2.Add(b);
Console.WriteLine(b);
}
}Top
8 楼brightheroes(在地狱中仰望天堂)回复于 2004-09-01 21:35:54 得分 0
楼主的做法太繁琐了
错误出在这个地方
if (!a2.Contains(b))
{
//通过此方式避免a2数组和a1中的数值产生重复
for (int i=0;i<5;i++)
{
if(Convert.ToString(b)!=a1[i].ToString())
{
a2.Add(b);
Console.WriteLine(b);
}
}
//通过此方式避免a2数组和a1中的数值产生重复
}
Top
9 楼brightheroes(在地狱中仰望天堂)回复于 2004-09-01 21:37:48 得分 0
当条件if (!a2.Contains(b))满足
之后
你的程序进入循环
for (int i=0;i<5;i++)
当满足if(Convert.ToString(b)!=a1[i].ToString())
条件之后,就加入了a2
而条件if(Convert.ToString(b)!=a1[i].ToString())是一定会出现满足的情况的
所以就循环了5次加入了a2
不重复才怪
--PS:cpu没有问题Top
10 楼skyover(嘻哈呵嘿)回复于 2004-09-01 21:58:19 得分 0
public static void Main(string[] args)
{
ArrayList ar1 = new ArrayList();
ArrayList ar2 = new ArrayList();
int l = 50;
System.Random r = new Random();
while(true)
{
int iNumber = r.Next(100);
//Console.WriteLine(iNumber);
if(ar1.Contains(iNumber))
continue;
if(ar1.Count<l)
ar1.Add(iNumber);
iNumber = r.Next(100);
if(ar1.Contains(iNumber) || ar2.Contains(iNumber))
continue;
if(ar2.Count<l)
ar2.Add(iNumber);
if(ar1.Count==l && ar2.Count==l)
break;
}
for(int i=0;i<ar1.Count;i++)
Console.WriteLine("ar1[{0}]\t=\t{1}",i,ar1[i]);
Console.WriteLine();
for(int i=0;i<ar2.Count;i++)
Console.WriteLine("ar2[{0}]\t=\t{1}",i,ar2[i]);
}Top




