더 이상 문제가 없지만 일부 코드의 동작을 이해하고 싶습니다. 처음에는 임의의 숫자를 생성하고 Math.random이 모든 반복에 대해 동일한 숫자를 반환하는 코드에서 어딘가에 생성했습니다.static Math.random change java
이첫 번째 클래스 :
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 반복에 대해 동일한 임의의 값을 얻는 지에 대한 이유입니다. 이 최소 예에서는 결과가 정확하고 무작위입니다. 그러나 실제 상황에서는 두 번째 클래스의 출력이 전체 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;
}
...
새로운 코드 : 다음과 같이 이미 다른 클래스에서 createCircles 클래스의 인스턴스를 생성 한 두 경우 모두
...
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;
}
...
:
...
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는