看看我这个
int i = 0;
Random r = new Random();
int[] s2 = new int[10];//建立的数组没有赋值 默认都是0
do
{
int a = r.Next(1, 51);//随机取1-50楼
if (i == 0)
{
s2 = a;
}
bool bl = false;
if (i >= 1)
{
do//判断是否相等,相等重新赋值
{
a = a = r.Next(1, 51);
for (int c = 0; c < i; c++)
{
if (a == s2[c])//判读是否有相等的数
bl = true;
}
if (bl == false)
s2 = a;
}
while (bl);//如果为false就是又重复,循环重新赋值
}
i++;
}
while (i < 10);
foreach (int s1 in s2)
{
Console.WriteLine(s1);
}
Console.ReadKey();作者: 孤帆破浪 时间: 2013-6-16 10:20 本帖最后由 孤帆破浪 于 2013-6-17 17:06 编辑
我的意见是先不要急于给数组赋值,而是先判断产生的随机数是否符合要求。
static void Main(string[] args)
{
int i = 0; //迭代变量
int[] num = new int[10]; //接收随机数的数组
Random random = new Random();
do
{
bool isRight = true; //标识产生的随机数是否正确
int r = random.Next(1, 51); //先不要给数组赋值,用一个变量接收
for (int j = 0; j < i; j++) //判断随机数数组里面是否已有相同的数
{
if (r == num[j]) //如果找到有相同的数,说明产生的随机数不正确,退出当前for循环
{
isRight = false;
break;
}
}
if (!isRight) //如果产生的随机数不正确,就不执行if后面的代码,而是重新执行do-while循环,产生新的随机数
{
continue;
}
num = r; //如果执行到了这里,说明产生的随机数符合要求,那么就给数组赋值
i++;
} while (i < num.Length);
foreach (int item in num)
{
Console.WriteLine(item);
}
Console.ReadKey();
}作者: 陈壹 时间: 2013-6-16 10:31
for (int c = 0; c < i; c++)
{if (a == s2[c])//判读是否有相等的数
{continue;}
else{s2[i] = a;}
你的错误在这里,当a==s2[c]时continue继续的是for (int c = 0; c < i; c++)这个循环,简单说在执行循环是只要是s2[c]中任意一个不等于a,s2[i]就已经被赋值
你可以在for (int c = 0; c < i; c++)设置断点查看运行过程
解决的方式就如2l、3l所示,将s2[i]的赋值转移到for (int c = 0; c < i; c++)这个循环外,for (int c = 0; c < i; c++)这个循环只单纯的作为赋值条件所在作者: y96352 时间: 2013-6-16 12:04
{:soso_e142:}明白了 谢谢大家