CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

关于两个互不重复的整形数组的怪问题(在线)

楼主吴泉(剑正)2004-09-01 20:45:48 在 .NET技术 / C# 提问

//获得第一个随机整形数组  
      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

相关问题

  • 一个数组,怎样去掉数组里面重复的项?
  • 去掉数组中的重复值
  • 如何消除数组中重复项
  • 怎么去数组的重复值!(急!)
  • 把数组里重复数字去掉
  • 怎样从一个文本文件中读取一个整形数组和写入一个整形数组?
  • 怎样删除整形数组中相同的数?
  • 怎样定义一个二维数组类,整形?
  • 如何在构造函数中初始化整形数组?
  • 整形数组里面数据按大小排列???

关键词

  • 整形数组
  • random
  • arraylist

得分解答快速导航

  • 帖主:吴泉
  • ajqc
  • haiwangstar
  • skyover
  • humin1906
  • brightheroes

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo