我需要在最大值范围内生成随机整数。由于性能至关重要,我决定使用XORShift生成器而不是Java的Random类。longseed=System.nanoTime();seed^=(seed>>35);seed^=(seed此实现(source)给了我一个长整数,但我真正想要的是一个介于0和最大值之间的整数。publicintrandom(intmax){/*...*/}实现此方法最有效的方法是什么? 最佳答案 我从你的代码中得到了一些乐趣并想出了这个:publicclassXORShiftRandom{privatelongla
我想随机化一个float,这样有95%的可能性大约为11.9的可能性为0.01%它永远不会变成0或2这是否可能通过多次使用Random.nextFloat()来实现?概率的可视化说明: 最佳答案 你需要找到一个函数f,这样:f在[0,1]上连续递增f(0)>0和f(1)f(0.01)>=0.1和f(0.99)对于0.025然后只取f(Random.nextDouble())例如,Math.tan(3*(x-0.5))/14.11适合这个,所以对于你的表达式我会使用:Math.tan(3*(Random.nextDouble()-0.
在用Java制作map生成器时,我发现他们的随机数生成器有一个相当令人不安的问题,具体来说,当两个RNG具有非常相似的种子(小整数不同)时,它们的第一个输出值将变得非常相似!示例代码:Randomr=newRandom();longn=100000;//Chooseanynumberr.setSeed(n);System.out.println(r.nextInt());r.setSeed(n+1);System.out.println(r.nextInt());这几乎打破了我对原始JavaRNG的信心,因为我使用坐标来为map生成器提供种子。有人可以建议重新定义Random.next
hashCode()的默认实现在HotSpot上返回randomvalue并将其存储在对象头中。这在Java8中似乎没有改变。其中哈希值是通过调用os::random()计算得出的:staticinlineintptr_tget_next_hash(Thread*Self,oopobj){intptr_tvalue=0;if(hashCode==0){//ThisformusesanunguardedglobalPark-MillerRNG,//soit'spossiblefortwothreadstoraceandgeneratethesameRNG.//OnMPsystemwe'l
在我们的应用程序中,我们使用Random和SecureRandom为某些客户生成一些非常大的信息集。经过一些测量,我们意识到使用存储在磁盘上的种子重新生成信息比存储和读取该信息更快,占用的内存更少。我查看了javadoc,但没有看到任何保证给定常量种子n的结果,比方说,newRandom(n).nextInt()在不同的Java版本中应该是相同的。我的问题是:对于Java8和以前的版本,这是一个安全的假设吗,Java8中的newRandom(n).nextInt()应该返回与以前版本的Java中的值相同吗?(为了公平起见,我会接受回答上述问题的答案,即使他们不回答下面的问题。)虽然我知
对于我正在进行的元胞自动机项目,我需要使用不同的算法和技术随机生成二维boolean数组。目前,我在应用程序中只有一种随机化类型——循环遍历数组中的每个单元格并生成一个随机double变量,然后如果随机数高于0.5,那么我将该单元格设置为true,如果不是,则它被设置为假。我想研究使用更有趣的算法(例如Perlin噪声或类似算法)来生成这些boolean矩阵。如果您知道除PerlinNoise以外的其他任何东西,那么用于地形生成或类似事物的噪声发生器可能会很好(Minecraft的世界生成给了我这个想法)。唯一的问题是我不知道从哪里开始(有什么想法吗?):)
我对SecureRandom的用法有点困惑。我需要在循环中生成nsecure随机数。为每一代使用相同的SecureRandom实例是否安全?以下解决方案在加密强度方面是否存在差异?1)没有种子的单实例SecureRandomsr=newSecureRandom();for(inti=0;i2)每一代的新实例for(inti=0;i3)带种子的单实例SecureRandomsr=newSecureRandom()for(inti=0;i 最佳答案 也许与直觉相反,第三个几乎肯定是最弱的,在循环迭代中重新播种是一个糟糕的主意。第二个是坏
我正在尝试使用FindBugs对我们的项目进行代码审查。我们有一个方法来生成唯一的id(随机):publicstaticStringgenerateUUID(intbase){returnString.valueOf(getCurrentTimeInNanos((long)base))+String.valueOf(Math.abs(random.nextInt()));}并且findBugs指示RV_ABSOLUTE_VALUE_OF_RANDOM_INT警告(RV:错误尝试计算带符号的32位随机整数的绝对值),我猜问题出在String.valueOf(Math.abs(random
编写Java程序时,我们使用setSeed在Random类中。我们为什么要使用这种方法?我们不能只使用Random而不使用setSeed吗?使用setSeed的主要目的是什么? 最佳答案 它的一个用途是它使您能够在未来重现您的程序的结果。例如,我想为数据库中的每一行计算一个随机变量。我希望程序可以重现,但我希望行之间具有随机性。为此,我将随机数种子设置为每一行的主键。这样,当我再次运行该程序时,我得到了相同的结果,但在行之间,随机变量是伪随机的。 关于java-使用Random.setS
我想知道java.util.Random.next(n)是否与n成线性关系还是一个常数?有人可以帮我解决这个问题,或者告诉我如何确定复杂性吗? 最佳答案 来自文档:Random.nextInt(n)usesRandom.next()lessthantwiceonaverage-itusesitonce,andifthevalueobtainedisabovethehighestmultipleofnbelowMAX_INTittriesagain,otherwiseisreturnsthevaluemodulon(thispreve