import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
public class keyExample extends JPanel implements ActionListener, KeyListener {
Timer t = new Timer(5, this);
double x = 0, y = 0;
double changeX = 0, changeY = 0;
public keyExample() {
t.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
}
private static final int N_CIRCLES = 10;
private static final double MIN_RADIUS = 5;
private static final double MAX_RADIUS = 50;
public void run() {
Random gen = new Random();
for (int i = 0; i < N_CIRCLES; i++) {
double r = gen.nextDouble(MIN_RADIUS, MAX_RADIUS);
double x = gen.nextDouble(0, getWidth() - 2 * r);
double y = gen.nextDouble(0, getHeight() - 2 * r);
Circle circle = new Circle(x, y, 2 * r, 2 * r);
circle.setFilled(true);
int red = gen.nextInt(256);
int green = gen.nextInt(256);
int blue = gen.nextInt(256);
Color backColor = new Color(red, green, blue);
pane.add(panel);
}
add(circle);
}
}
我应该创建一个代码来生成具有随机颜色和大小的圆。同时调整一些零件和另一个。我造成了我无法理解的混乱。请帮我修改代码,这样我就能产生我想要的结果。
1条答案
按热度按时间1sbrub3j1#
所以,首先,没有
Random#nextDouble(min, max)
,您可以通过阅读javadocs来判断这一点。所以,快速浏览一下javadocs
Random#nextDouble
说返回此随机数生成器序列中的下一个伪随机、均匀分布的介于0.0和1.0之间的双精度值。
这意味着
nextDouble
将从中返回一个“随机”数0.0
至1.0
. 这听起来可能没什么用,但你会惊讶的。现在,您必须运行自己的最小/最大逻辑。不是很难。从计算两个值之间的范围开始,使用
Random#nextDouble
把它乘以“范围”再加上最小值,很简单。我不知道是什么
Circle
是的,你没有提供,所以,继续。这个
pane.add(panel);
似乎是一个确定的灾难配方。我猜panel
是组件,但不能将组件添加到自身。假设
Circle
是某种成分add(circle);
在外面for-loop
,所以它不会起什么作用,因为circle
仅在for-loop
上下文。