初学者JavaFX,跟踪随机生成的最大半径?

时间:2016-10-13 01:49:58

标签: java random javafx max

我有一个项目,我必须填充600x400窗口(JavaFX),其中30个随机大小的圆圈没有填充。最大的圆圈必须填充半透明的红色(如果有多个具有相同半径的大圆圈,则只能填充一个)。我能够很好地获得屏幕上的所有圈子。我的问题是让最大的圆圈成为红色。我还没有被教过几乎所有谷歌搜索都使用的数组。我无法弄清楚如何跟踪最大的圆圈。他对我们的暗示是:"当谈到跟踪最大的圆圈时,请记住两个参考变量可以指向同一个Circle对象。保持一个单独的Circle引用变量,该变量始终指向最大的圆(到目前为止已创建)。您可能希望将此变量初始化为半径为0的圆。您可以使用getRadius方法获得圆的半径。"我创建了一个圆形对象和一个largestCircle对象,但不了解如何使maximumCircle对象具有最大半径。

这是我到目前为止的代码:

    {
    Random gen = new Random();
    int x = 0;
    int y = 0;
    int radius = 0;
    double largestRadius = Math.max(radius);
    Circle largestCircle = null;
    Group root = new Group();
    //prints out 30 circles
    for (int i = 0; i <= 30; i++)
    {
        Circle circle = new Circle(x, y, radius);

        {
            radius = gen.nextInt(66) + 10; //generates random radius from 10 to 75
            x = gen.nextInt(600 - 2 * radius) + radius;
            y = gen.nextInt(400 - 2 * radius) + radius;
        }

        if (circle.getRadius() == largestRadius)
        {
            largestCircle = circle;
            largestCircle.setFill(Color.rgb(255, 0, 0, 0.3));
        }

        circle.setFill(null);
        circle.setStroke(Color.rgb(gen.nextInt(256), + gen.nextInt(256), gen.nextInt(256)));
        circle.setStrokeWidth(3);
        root.getChildren().add(circle);
    }

生成随机圆后如何找到生成的最大半径并将其设置为largestCircle?圆的最大半径可以是75,但有时圆的半径都不是75.如何将max设置为程序随机生成的最大数?

任何帮助将不胜感激!谢谢你的时间

3 个答案:

答案 0 :(得分:0)

以下内容如何。

它有两个修复 -1,在确定当前圆圈是否最大时使用>而不是== -2,在完成所有圆圈后,更改最后一个圆圈的颜色......否则,您可能会将多个圆圈设为红色。

    {
Random gen = new Random();
int x = 0;
int y = 0;
int radius = 0;
double largestRadius = Math.max(radius);
Circle largestCircle = null;
Group root = new Group();
//prints out 30 circles
for (int i = 0; i <= 30; i++)
{
    Circle circle = new Circle(x, y, radius);

    if (circle.getRadius() > largestRadius)
    {
        largestCircle = circle;
    }

    {
        radius = gen.nextInt(66) + 10; //generates random radius from 10 to 75
        x = gen.nextInt(600 - 2 * radius) + radius;
        y = gen.nextInt(400 - 2 * radius) + radius;
    }

    circle.setFill(null);
    circle.setStroke(Color.rgb(gen.nextInt(256), + gen.nextInt(256), gen.nextInt(256)));
    circle.setStrokeWidth(3);
    root.getChildren().add(circle);
}
largestCircle.setFill(Color.rgb(255, 0, 0, 0.3));

答案 1 :(得分:0)

通常最好使用一个超出项目范围的小数字来初始化任何max变量。在这种情况下,由于半径不能为-1,我会这样做

double largestRadius = -1;

在此之后,半径有多大并不重要,任何大于-1的半径都会改变最大的天数。

在我看来,您只缺少一个部分,即新创建的circle是否有半径> largestRadius

if(circle.getRadius() > largestRadius){
    largestCircle = circle;
    largestRadius = circle.getRadius();
}

在此之后,您已检查新圆的半径是否大于并且您已检查新圆的半径是否等于。保留您已有的if语句,您将始终使用largestRadius引用最新的圈子。

答案 2 :(得分:0)

我会将圆形对象保留在数组中。使用double(或任何适合您的随机值的数字类型)通过简单的比较来跟踪高值(每次生成随机数时,我的当前高值是否小于新的随机值?如果是,请更新高值)价值并创建一个这样大小的圆圈。

一旦你的阵列中有30个圆圈,只需循环遍历它,直到找到第一次出现的高值,当你发现它变成任何颜色的圆圈时。

Circle[] myCircles=new Circle[30];
double largestCircle;
for(int i=0;i<30;i++){
// determine your x,y, and radius here
   myCircles[i]=new Circle(x,y,radius);
   if(radius>largestCircle) largestCircle=radius;
}

然后循环通过myCircles并为每个人做事

for(int i=0;i<30;i++){
   if(myCircles[i].getRadius()==largestCircle){
      // make myCircles[i] red here
   }
}