もう問題はありませんが、コードの動作を理解したいです。最初、私はいくつかの乱数を生成していましたが、コードのどこかで Math.random がすべての反復に対して同じ数を返していました。次の 2 つのクラスで最小限の例を作成しようとしました。
ファーストクラス:
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());
}
}
2 番目のクラス:
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回の反復全体で常に同じランダム値を取得する理由を追跡するために、最小限のコード例を生成しようとしていました. この最小限の例では、結果は正しくランダムですが、私の実際の状況では、2 番目のクラスの出力は 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