我想用java的循环嵌套生成不重复的随机数 但是一直有重复的 清高手指点!

public static void main(String[] args)
{
int a[]=new int [23];
boolean y=true;
for(int i=0;i<a.length;i++)
{
int random=(int)(Math.random()*23)+1;
a[i]=random;
for(int j=0;j<i;j++)
{
if(a[j]==a[i])
{
y=false;
}
else
{
y=true;
}
}
if(y)
{
System.out.println(a[i]);
}
}
}

你的思路貌似有点问题

我给你改了你下
你看看哈

public class RandonNum {

public static void main(String[] arg) {
int a[] = new int[23];
boolean y = true;
for (int i = 0; i < a.length; i++) {
do {
y = true;
int random = (int) (Math.random() * 23) + 1;
for (int j = 0; j < i; j++) {
if (a[j] == random) {//应该判断生成的这个随机数与前面的数有没有重复
y = false;//有重复就让y=false 并跳出循环
break;
}
}
if (y) {//如果y为true就表示生成的随机数与以前的数没有重复的
a[i] = random;//没有重复再给a[i]赋值 这里很重要
System.out.println(a[i]);
}
} while(!y);//如果有重复了 在继续随机直到没有重复的为止
}

}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-06
问题应该是11行的if语句有问题。
举例说明:如果a[0]=1,a[1]=2,a[2]=1,j=0开始循环,那a[1]==a[2]的结果是ture,于是y=false,然后就输出1了。肯定是重复出现了。
在y=false;后面加一句break;就可以了。
public static void main(String[] args)
{
int a[]=new int [23];
boolean y=true;
for(int i=0;i<a.length;i++)
{
int random=(int)(Math.random()*23)+1;
a[i]=random;
for(int j=0;j<i;j++)
{
if(a[j]==a[i])
{
y=false;
break;
}
else
{
y=true;
}
}
if(y)
{
System.out.println(a[i]);
}
}
}
相似回答