随机生成1000个1~100之内的整数,统计出不重复的数值和其重复的次数
Random rand = new Random();
int[]arr = new int[1000];
int[]unique = new int[100];
int[]count = new int[100];
int k = 0;
unique[k]=rand.nextInt(100)+1;
arr[0]=unique[k];
count[k++]=1;
for (int i=0,j; i < arr.length; i++) {
arr[i]=rand.nextInt(100)+1;
for (j = 0; j <k; j++) {
if(unique [j]==arr[i]){
break;
}
}
if(j==k){
unique[k]=arr[i];
count[k++]=1;
} else{
count[j]++;
}
}
随机生成100个,取值1~50之间的整数,任何单值重复不超过两次,输出其数组
Random rand = new Random();
final int N=100;
int[] arr=new int[N]; //重复不超过两次的数组
int ix = 0; //uqarr数组中已存入的元素个数
int[] uqarr = new int[N]; //用于存放不重复值的数组
int[] uqcnt = new int[N]; //用于计uqarr数组每个元素的重复个数
for (int i = 0,t,tx; i < arr.length; ) {
t=rand.nextInt(50)+1;
tx = -1;
for (int j = 0; j <ix; j++) {
if (t==uqarr[j]){ //生成的数t跟uqarr数组中的值uqarr[j]有重复,执行tx=j的下标交换,并跳出for循环,判断下面的重复次数是否超过2次
tx = j;
break;
}
}
if(tx!=-1&&uqcnt[tx]>=2)continue; //若生成的数t和uqarr数组有重复且重复的次数超过两次,则再重新生成t,判断是否重复
//有两种情况才会执行到以下步骤:1:随机数t跟所有uqarr[j]不同,for循环,j++遍历整个数组,直到j<ix退出循环,此时tx=-1;2:随机数t找到跟uqarr[j]相同,且重复没超过2次
arr[i++]=t; //则把t赋值给arr[i],且i++;
if (tx==-1){ //若是情况1,则把t值放到uqarr数组中,并计一次数
uqarr[ix] =t;
uqcnt[ix++]++;
}else {
uqcnt[tx]++; //若是情况2,tx=j的下标已交换,uqcnt计数
}
}
for (int i = 0; i < ix; i++) {
System.out.println(uqarr[i]+":"+uqcnt[i]);
}
int cnt = 0;
for (int i : arr) {
System.out.print(i+"\t");
if (++cnt%14==0){
System.out.println();
}
}