怎么让中间的产生的随机数不重复啊?
答案:6 悬赏:30 手机版
解决时间 2021-11-10 13:30
- 提问者网友:愿为果
- 2021-11-09 12:50
怎么让中间的产生的随机数不重复啊?
最佳答案
- 五星知识达人网友:迟山
- 2021-11-09 12:59
Random()两个构造方法
Random()可以说是以System.monoTime为种子,理论上不会产生重复数字,但是实际运行中还是有可能
Random(long seed),指定种子产生随机数,理论上不同种子不会有相同随机数。
this.seed = (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1); 但是受限制于计算机支持的位数,仍然有重复可能
因此,理论上都实现不了真正的随机数,所以要想真正的产生不重复数字,只能去检测是否存在于已经生成的数字当中。用一个全局变量Set就可以实现了,对于你的问题,下面的代码应该足够了
Random()可以说是以System.monoTime为种子,理论上不会产生重复数字,但是实际运行中还是有可能
Random(long seed),指定种子产生随机数,理论上不同种子不会有相同随机数。
this.seed = (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1); 但是受限制于计算机支持的位数,仍然有重复可能
因此,理论上都实现不了真正的随机数,所以要想真正的产生不重复数字,只能去检测是否存在于已经生成的数字当中。用一个全局变量Set就可以实现了,对于你的问题,下面的代码应该足够了
全部回答
- 1楼网友:往事隔山水
- 2021-11-09 17:39
假设我让随机数在 1-16中产生,所以我创建一个16个数的数组,把随机数写成函数放到最外侧。第一次产生随机数,去数组中匹配,如果有,删除数组中那个数,继续执行;第二次产生随机数,去数组中匹配,如果没有,调用之前我们封装好的产生随机数的函数,再进行随机。直到产生数组中匹配的数,这样16次不会有一次重复。(因为之前我们把匹配到的数删除了,所以没找到说明和之前的重复)
- 2楼网友:你哪知我潦倒为你
- 2021-11-09 17:26
伪随机数
new Random(9999);每次一样是因为你固定你的随机因子是9999只有每次修改不同的因子才能使每次出现的数不一样.
在实例化的时候可以把你的9999每次改一下。用system.currentTimeMillis() ;传进去这样会使你每次的随机数都不一样
例子Random r= new Random(System.currentTimeMillis() );
r.nextInt(9999);
或者在你每次
nextInt前设置一下你随机数的种子
r.setSeed(System.currentTimeMillis() );
也是OK的.
这样你每次出来的随机数都不一样了.
public GuessNumberGUI() {
super("猜字游戏");
this.randGenerator = new Random(System.currentTimeMillis() );
this.randomNum = generateRandomNum();
System.out.println("Construtor"+this.randomNum);
initComponent();
componentAddListener();
}
把你的构造函数改成这样就行了
new Random(9999);每次一样是因为你固定你的随机因子是9999只有每次修改不同的因子才能使每次出现的数不一样.
在实例化的时候可以把你的9999每次改一下。用system.currentTimeMillis() ;传进去这样会使你每次的随机数都不一样
例子Random r= new Random(System.currentTimeMillis() );
r.nextInt(9999);
或者在你每次
nextInt前设置一下你随机数的种子
r.setSeed(System.currentTimeMillis() );
也是OK的.
这样你每次出来的随机数都不一样了.
public GuessNumberGUI() {
super("猜字游戏");
this.randGenerator = new Random(System.currentTimeMillis() );
this.randomNum = generateRandomNum();
System.out.println("Construtor"+this.randomNum);
initComponent();
componentAddListener();
}
把你的构造函数改成这样就行了
- 3楼网友:往事埋风中
- 2021-11-09 16:02
把产生的随机数放到hashset里面
- 4楼网友:胯下狙击手
- 2021-11-09 14:39
Random()两个构造方法
Random()可以说是以System.monoTime为种子,理论上不会产生重复数字,但是实际运行中还是有可能
Random(long seed),指定种子产生随机数,理论上不同种子不会有相同随机数。
this.seed = (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1); 但是受限制于计算机支持的位数,仍然有重复可能
因此,理论上都实现不了真正的随机数,所以要想真正的产生不重复数字,只能去检测是否存在于已经生成的数字当中。用一个全局变量Set就可以实现了,对于你的问题,下面的代码应该足够了
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;
public class Test {
private static Set set = new TreeSet();
private static Random rand = new Random();
public static void main(String[] args) {
for(int i = 10, randNum; i < 50; i++){
randNum = generateRandomNum();
System.out.println(randNum);
}
}
static int generateRandomNum(){
int randNum = 0;
do{
randNum = rand.nextInt();
}while(set.contains(randNum) || randNum <= 1000);
return randNum;
}
}
Random()可以说是以System.monoTime为种子,理论上不会产生重复数字,但是实际运行中还是有可能
Random(long seed),指定种子产生随机数,理论上不同种子不会有相同随机数。
this.seed = (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1); 但是受限制于计算机支持的位数,仍然有重复可能
因此,理论上都实现不了真正的随机数,所以要想真正的产生不重复数字,只能去检测是否存在于已经生成的数字当中。用一个全局变量Set就可以实现了,对于你的问题,下面的代码应该足够了
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;
public class Test {
private static Set
private static Random rand = new Random();
public static void main(String[] args) {
for(int i = 10, randNum; i < 50; i++){
randNum = generateRandomNum();
System.out.println(randNum);
}
}
static int generateRandomNum(){
int randNum = 0;
do{
randNum = rand.nextInt();
}while(set.contains(randNum) || randNum <= 1000);
return randNum;
}
}
- 5楼网友:神也偏爱
- 2021-11-09 14:07
用个list列表,存储你生成的随机数,并检测是否重复,如果重复就再生成,暂时只能想到这样的了。虽然效率不高
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯