为何进入死循环?

lgnet 2005-02-24 12:11:38
小弟想定义一个int数组(长度为20),数组里面的数据为1--20中的任何一个随机数(1--20中的任何一个整数),但是数组里面的数据不能够重复(比如为1,2,5,4,3,7,6,8,9,10,12,11,13,14,16,15,18,17,20,19),因此小弟设计了如下代码:

int[] rands = new int[20];
int values,count,k;
values=0;
count=0;
k=0;
bool ys=true;
for(int i=0;i<rands.Length;i++)
{
rands[i]=0;
}
while(ys)
{
Random ra=new Random();
values=ra.Next(1,20);
for(int i=0;i<rands.Length;i++)
{
if(values==rands[i])
{
count=count+1;
}
}
if(count==0)
{
rands[k]=values;
k=k+1;
}
count=0;
if (k==20)
{
ys=false;
}
}

小弟已觉得没有任何问题,程序一运行就进入死循环,百思不得其解,还请各位大虾给予指教!
谢谢!
...全文
84 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sun926 2005-02-24
  • 打赏
  • 举报
回复
sjzwinfor(蜘蛛侠) 的方法是对的,
不好意思,刚才看的不够仔细。
jialiang 2005-02-24
  • 打赏
  • 举报
回复
算法不对
思路:
1。先将要求的随机数放入一个数组:如temp[20]
2。随机取1-20间的一个数字,取得数字i后,得出一个随机数temp[i]放入rands[0]
3。将temp[i]移除,重新整理为temp[19],重复2得出随机数temp[i]放入rands[1]
如此循环
lgnet 2005-02-24
  • 打赏
  • 举报
回复
终于得到解决,马上结贴,谢谢大虾们!!!
lgnet 2005-02-24
  • 打赏
  • 举报
回复
问题解决,就是这样实现的:
.
.
.
values=ra.Next(1,20);
改为:
values=ra.Next(1,21);
.
.
.
就正确了,所以小弟不明白
values=ra.Next(1,21);该句是取值范围是大于等于1,小于20,还是大于等于1,小于等于20?
lgnet 2005-02-24
  • 打赏
  • 举报
回复
if (k==19)
改为以上这句时,rands[19]总是为0,其他前19个都对了,都是从1--20中的一个正数值,但是rands[19]随时都是零,难过,再想想,再努力!
sjzwinfor 2005-02-24
  • 打赏
  • 举报
回复
values=ra.Next(1,21);//next(1,20)返回的值是不包括20的
ofei 2005-02-24
  • 打赏
  • 举报
回复
算法有错误
sun926 2005-02-24
  • 打赏
  • 举报
回复
if (k==19)

110,568

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧