Tag: 随机

在Java中你如何随机选择一个字母(az)?

如果我想在a和z之间随机选择一个字母,我假设我必须使用Random类: Random rand = new Random(); 但由于这只会生成数字,我需要做些什么来将其应用于字母?

跨系统和版本的java伪随机数的再现性?

在给定初始整数参数的情况下,我需要生成受控的伪随机数序列。 为此,我使用标准Java Random类,由整数参数播种。 我想确保在可预见的未来(甚至更多!)中我将跨系统(操作系统,还有Java / JDK版本)生成相同的序列。 总结:Java是否确保其伪随机数生成器在实现和版本中的可重复性/可移植性? 注意:我已经为Python提出了完全相同的问题 。 我之后将实现语言改为Java,但出于其他原因。

在给定范围之间生成奇数随机数

如何在给定范围之间生成奇数随机数 对于Eg:范围在1到6之间。随机数为3或1或5 生成随机数的方法: Random_No = Min + (int)(Math.Random()*((Max-Min)+1)) 请参考如何在Java中生成特定范围内的随机整数? 生成奇数随机数的方法: Random_No = Min + (int)(Math.Random()*((Max-Min)+1)) if(Random_No%2 ==0) { if((Max%2)==0)&&Random_No==Max) { Random_No = Random_No – 1; } else{ Random_No = Random_No +1; } } 这个函数总是将2转换为3而不是1我们可以将它变成一个更随机的函数,它可以将2转换为3,有时转换为1?

Java生成“随机”数字,不会重复2 ^ 48个周期

基本上我想生成随机数不会重复很长时间(我不想使用序列),例如java使用的LCG: synchronized protected int next(int bits) { seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L <>> (48 – bits)); } 据我所知,这种情况下的种子只会在2 ^ 48次调用后才重复,这是正确的吗? 所以我理解,如果我做了一个像这样的方法: synchronized protected long next() { seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) – 1); return seed; } 保证种子值在2 ^ 48次呼叫之前不重复?

java中的快速实值随机生成器

java.util.Random.nextDouble()对我来说很慢,我需要一些非常快的东西。 我做了一些谷歌搜索,我发现只有基于整数的快速随机生成器。 这里有什么来自区间<0,1的真实数字吗?

使用概率分布生成范围内的随机整数

我有一个问题,我想使用概率分布生成1到5之间的一组随机整数值。 Poisson和Inverse Gamma是两个分布,显示了我所发现的特征(多数均值,更低的数字)。 我正在寻找使用Apache Commons Math,但我不知道如何使用可用的发行版生成我想要的数字。

如何随机化枚举元素?

假设你有一些包含一些元素的enum public enum LightColor { RED, YELLOW, GREEN } 并想随意挑选任何颜色。 我把颜色放进去了 public List lightColorChoices = new ArrayList(); lightColorChoices.add(LightColor.GREEN); lightColorChoices.add(LightColor.YELLOW); lightColorChoices.add(LightColor.RED); 然后选择一个随机颜色: this.lightColor = lightColorChoices.get((int) (Math.random() * 3)); 所有这些(虽然工作正常)似乎不必要地复杂化。 是否有更简单的方法来选择随机枚举元素?

UUID.randomUUID()是否适合用作一次性密码?

如前所述,确认电子邮件应该在确认链接中具有唯一的(实际上)不可猜测的代码 – 实质上是一次性密码 。 UUID.randomUUID()文档说: 使用加密强伪随机数生成器生成UUID。 这是否意味着正确实现的JVM中的UUID随机生成器适合用作唯一的(实际上)不可猜测的OTP?

有效的Java项目47:了解并使用您的库 – 有缺陷的随机整数方法示例

在Josh给出的有缺陷的随机方法的例子中,该方法产生具有给定上界n的正随机数,我不明白他陈述的两个缺陷。 书中的方法是: private static final Random rnd = new Random(); //Common but deeply flawed static int random(int n) { return Math.abs(rnd.nextInt()) % n; } 他说,如果n是2的小幂,则生成的随机数序列将在短时间后重复出现。 为什么会这样? Random.nextInt()的文档说明Returns the next pseudorandom, uniformly distributed int value from this random number generator’s sequence. 所以不应该是,如果n是一个小整数,那么序列将重复,为什么这只适用于2的幂? 接下来他说如果n不是2的幂,一些数字平均会比其他数字更频繁地返回。 如果Random.nextInt()生成均匀分布的随机整数,为什么会发生这种情况呢? (他提供了一个代码片段,清楚地certificate了这一点,但我不明白为什么会出现这种情况,以及这与n是2的权力有什么关系)。

从Java 8开始有没有理由写`new Random()`?

出于某种原因,我曾经认为java.util.Random是线程不安全的,a-la HashMap或BitSet ,而Math.random()实现为包含对带有synchronized块的Random或ThreadLocalRandom.current().nextDouble() 。 实际上,事实certificatejava.util.Random是线程安全的 (通过atomics)。 因此需要注意:即使我需要在单个线程中进行一些随机输入,使用ThreadLocalRandom也是有意义的,因为内部没有primefaces读写,编译为锁定指令并释放内存障碍。 而且,由于Java 8, ThreadLocalRandom本质上是一个单例,它的状态保存在java.lang.Thread类的某些字段中。 因此,方法ThreadLocalRandom.current()不是对ThreadLocalMap的访问,而只是一个静态字段读取,即非常便宜。 我有两个问题: 从计算机科学的角度来看,几个线性同余随机生成器(以ThreadLocalRandom s的方式初始化)的输出是否与单个线性同余随机生成器( java.util.Random实例)的输出相同“随机”? 如果对第一个问题的答案是肯定的,是否有理由编写构造new Random() (没有种子)而不是ThreadLocalRandom.current() ? 更新。 我认为调用类似ThreadLocalRandom.current().ints().parallel().collect(…)可能不正确,因为Thread的随机生成器状态可能未在ForkJoinPool工作线程中初始化,但看起来ThreadLocalRandom覆盖方法ints() , longs()和doubles() ,使上述结构正确。