gpt4 book ai didi

java - 静态Math.随机变化java

转载 作者:行者123 更新时间:2023-12-01 14:12:03 27 4
gpt4 key购买 nike

我不再有问题了,但是我想了解某些代码的行为。最初,我生成一些随机数,并且在我的代码中的某个位置,Math.random 对于所有迭代都返回相同的数字。我尝试使用以下两个类创建一个最小的示例:

头等舱:

public class randomTest {   


public randomTest()
{ }
public double generateRandomNumber()
{
double r = Math.random();
return r;
}
public static void main(String args[])
{
randomTest t = new randomTest();
for (int i = 0; i < 10; i++)
System.out.println(t.generateRandomNumber());
}
}

第二课:

public class anotherClass {
private randomTest t = new randomTest();

public static void main(String args[])
{

for (int i = 0; i < 10; i++)
{
anotherClass c = new anotherClass();
System.out.println(c.t.generateRandomNumber());
}

}
}

我试图生成一个最小的代码示例来跟踪为什么我在整个 10 次迭代中总是获得相同的随机值。在这个最小的示例中,结果是正确且随机的,但是在我的实际情况中,第二个类的输出在整个十次迭代中是相同的。

最后我通过将调用的方法更改为静态方法来解决问题。我仍然不明白这如何解决我的问题,以及原来的问题在哪里。

旧的非工作代码:

...
public ImagePlus createAnImage()
{
drawBackground(c.ip);

width = ip.getWidth();
height =ip.getHeight();
createCircles(requiredCircles); // this is not creating random numbers
ArrayList<Circle> list = circlesList;
drawBoundaries(list, ip, percentage);
background.setProcessor(ip);

return background;
}
...

新代码:

...
public static ImagePlus createAnImage()
{
createCircles c = new createCircles();
c.drawBackground(c.ip);

c.width = c.ip.getWidth();
c.height =c.ip.getHeight();
c.createCircles(c.requiredCircles); // this is creating random numbers
ArrayList<Circle> list = c.circlesList;
c.drawBoundaries(list, c.ip, c.percentage);
c.background.setProcessor(c.ip);

return c.background;
}
...

在这两种情况下,我已经从另一个类创建了 createCircles 类的实例,如下所示:

...
private ImagePlus createRandomImage(int radius, int numberOfCircles, double minPercentage, double maxPercentage, int minBackground, int maxBackground)
{
// create the image using class createCircles
createCircles c = new createCircles();
c.setParameters(radius, radius, minBackground, maxBackground, numberOfCircles, imageWidth, imageHeight, minPercentage, maxPercentage);
ImagePlus imp = c.createAnImage(); // calling the static method works

return imp;
}

虽然我的问题解决了,但我仍然需要了解其背后的原因。我想更好地理解静态方法与非静态方法可能会解释这一点。有人知道吗?

最诚挚的问候,M·特莱斯

最佳答案

不要使用数学。 random (它产生 double ,而不是整数)

使用Random类生成 0 到 N 之间的随机整数。

To generate a series of random numbers as a unit, you need to use a single Random object - do not create a new Random object for each new random number.

import java.util.Random;

/** Generate 10 random integers in the range 0..99. */
public final class RandomInteger {

public static final void main(String... aArgs){
log("Generating 10 random integers in range 0..99.");

//note a single Random object is reused here
Random randomGenerator = new Random();
for (int idx = 1; idx <= 10; ++idx){
int randomInt = randomGenerator.nextInt(100);
log("Generated : " + randomInt);
}

log("Done.");
}

private static void log(String aMessage){
System.out.println(aMessage);
}
}

关于java - 静态Math.随机变化java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18441648/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com