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