方法一:
使用一个数组,控制count值,不重复则存入:
int i,j;int flag=0,rc=0,count=0,r;
srand((unsigned)time(NULL));
int* a=new int[8];
int (*g)[3]=new int[3][3];
for(i=1;i<=8;i++)//数列a
{
a[i-1]=i;
//cout<<"检a"<<i-1<<" "<<i;
}
int* b=new int[8];
while(count<8){//随机b
r=rand()%8+1;
flag=0;
for(j=0;j<8;j++){
if(b[j]==r){//已存在
flag=1;
}
}
if(flag!=1){
b[count]=r;
count++;
}
}
方法2:
使用两个数组,其中一个数组可以置为全1也可以置为范围内所有值:
int[] num=new int[21];
int[] a=new int[21];
int i=0;
int j=0;
int f=0;
for(i=0;i<20;i++){//1-20
a[i]=i+1;
}
for(i=0;i<20;i++){
num[i]=getrand();//获取一个随机数
f=0;
for(j=0;j<20;j++){
if(a[j]==num[i]&&a[j]!=0){
a[j]=0;//已存在置0
}
else if(j==num[i]-1&&a[j]==0){//检测a[j]的0
num[i]=0;
}
}
}
for(i=0;i<20;i++){
System.out.println(num[i]+" "+a[i]);
}
for(i=0;i<20;i++){
for (j = 0; j < 20; j++){
if(num[i]==0) {
if(a[j]!=0){
num[i]=a[j];//把未存入的值放入
a[j]=0;//此处注意置0,不然会被再次处理
}
}
}
}
for(i=0;i<20;i++){
System.out.println(num[i]);
}
方法3:
使用集合,转载自这里
public static void main(String[] args) {
// TODO Auto-generated method stub
//1,有Random类创建随机数对象
Random wsq = new Random();
//2,需要存储10个随机数,而且不能重复,所以我们用HashSet集合
HashSet<Integer> yy = new HashSet<>();
//3,如果HashSetsize是小于10就可以不断的存储,如果大于等于10就停止储存
while(yy.size()<10){
//4,通过Random类中的nextInt(n)方法获取1到20之间的随机数,并将这些随机数存储在HashSet集合中
yy.add(wsq.nextInt(20)+1);
}
System.out.println("随机数如下:");
for (Integer integer : yy) {
System.out.println(integer);
}