我有一个项目,我必须填充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设置为程序随机生成的最大数?
任何帮助将不胜感激!谢谢你的时间
答案 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
}
}