java中怎么样才可以产生不重复的随机数,如果除了比较,还有什麽其他方法吗?

java中怎么样才可以产生不重复的随机数,如果除了比较,还有什麽其他方法吗?,第1张

既然是随机数 你就不能保证随机出来的数字是不是前面有的
所以当然需要比较是否有相同数字出现 才能保证每重复数字
或者你可以把小范围数字存一个数组,然后乱序排列,因为你数组里面数字是唯一的,只是打乱了顺序,从而保证不重复~

import javautilArrays;
public class S
{
public static int[] random5 ( int start, int end, int count )
{
int[] array = new int[count];
L: for ( int i = 0; i < count; i++ )
{
int random = (int) ( Mathrandom ()  end + start );
for ( int j = 0; j < arraylength; j++ )
{
if (array[j] == random)
{
i--;
continue L;
}
}
array[i] = random;
}
Arrayssort (array);
return array;
}
public static void main ( String[] args )
{
int[] result = random5 (1, 45, 5);
Systemoutprintln (ArraystoString (result));
}
}

                          既然是随机,就没有确定的次数                                      

使用工具:MyEclipse 10

package Snsq;
import javautil;
public class java8 {
//随机数字(0~N)不重复的数字,过程及随机所需的次数。
public static void main(String[] args) {
Scanner in=new  Scanner(Systemin);//创建扫描仪
int  k=innextInt();//接收扫描到的数据(数字类型)
Random rd=new Random();//创建随机机器
int [] a=new int [k];//给数组定义大小为k
int b=0,c=0,d=0;//创建三个数字类型变量以便运算
//b是累计循环次数,c是累计不重复个数,d是已给值数组a[]不重复的个数。
for(int j=0;j<=k20;j++){//创建嵌套for循环,并定义循环次数为(20k)
b++;
int y=rdnextInt(k);//生成随机数(0~k)
for(int i=0;i<k;i++){
if(y!=a[i]){c++;}//每次随机出的数判断是否与数字a[]的每个值重复,是则c做累加,直到c==k
}
if(c==k){d++;a[d-1]=y;Systemoutprint(y+" ");}else{c=0;}//输出每一次随机到与数组a[]里不重复的数,累计不重复个数变量c变为初始值0。
if(d==k-1){break;}//已达到数组a[]里的值都不重复,并结束循环。
}
for(int i=0;i<k;i++){//用嵌套for循环将数组a[]进行冒泡排序从小到大
for(int j=0;j<k-1;j++){
if(a[j]>a[j+1]){d=a[j];a[j]=a[j+1];a[j+1]=d;}
}
}
Systemoutprintln();
for(int i=0;i<k;i++){Systemoutprint(a[i]+" ");}//用for打印已排好序的数,以便验证是否都不重复
Systemoutprintln();
Systemoutprintln("一共随机"+b+"次");//输出结果
}
}

废话不多说直接上代码!
import javautilArrayList;
import javautilRandom;
public class Test {
public static void main(String[] args) {
// 生成 [0-n) 个不重复的随机数
// list 用来保存这些随机数
ArrayList list = new ArrayList();
int n = 10;
Random rand = new Random();
boolean[] bool = new boolean[n];
int num = 0;
for (int i = 0; i < n; i++) {
do {
// 如果产生的数相同继续循环
num = randnextInt(n);
} while (bool[num]);
bool[num] = true;
listadd(num);
}
Systemoutprintln(list);
}
}

public int getRandomNumber(){

Integer randomNumber = (int) (Mathrandom()100);//产生0-100随机数

List<Integer> list = new ArrayList<Integer>();
if (!listcontains(randomNumber)) {//判断是否重复,不是重复的加入集合
listadd(randomNumber);
}else {//如果产生的随机数是重复的,用递归的方法再次生成
getRandomNumber();
}

return randomNumber;
}

我想的思路如上面代码所示。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13381285.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-25
下一篇 2023-07-25

发表评论

登录后才能评论

评论列表(0条)

保存