我没有问题了,但是我想了解一些代码的行为。最初,我生成了一些随机数,并且在我的代码中的某个地方,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. Tleis