我目前正在研究一种利用Java的awt类的测试程序。在这个程序中,我试图在网格的特定象限中生成4个随机点。
在审核我的代码时,您能为组织提出更好的建议吗?
我目前只是使用for循环来显示4个点,如下所示:
for (int dotsOnGrid = 1; dotsOnGrid < 5; dotsOnGrid++)
{
int x = (int) (Math.random() * (.50 * width));
int y = (int) (Math.random() * (.50 * height));
g.setColor(Color.RED);
g.fillOval(x, y, r, r);
}
至于在网格的左上角有4个红点,我很坚固。
我只是在弄清楚如何制作黄色和绿色点。使用Math.random()时如何工作?
提前感谢您的帮助!
答案 0 :(得分:1)
做一些简单的数学运算并不难理解。首先找出方形的坐标x范围,并找出方形的坐标y范围。在这两个范围内做两个random,这将是你的x,y值。简单。
答案 1 :(得分:0)
只需为其他颜色添加新的部分:
for (int numDots = 1; numDots < 5; numDots++)
{
g.setColor(Color.YELLOW);
int x = (int) (Math.random() * (.50 * width)) + (.50 * width);
int y = (int) (Math.random() * (.50 * height));
g.fillOval(x, y, r, r);
}
for (int numDots = 1; numDots < 5; numDots++)
{
g.setColor(Color.GREEN);
int x = (int) (Math.random() * (.50 * width));
int y = (int) (Math.random() * (.50 * height) + (.50 * height));
g.fillOval(x, y, r, r);
}
答案 2 :(得分:0)
(虽然这闻起来像家庭作业:))
假设您必须用颜色填充四个网格。对于四个网格中的每个网格,您可以执行相同的代码。因此,创建一个为一种颜色制作网格的函数(这意味着颜色将是一个参数)。然后,一旦制作了四个网格,将它们粘贴在一个大网格中。
在伪代码中:
public Grid makeGrid(final Color color) {
Grid g = new Grid();
for(numberOfDotsPainted = 0; numberOfDotsPainted < NUMBER_OF_DOTS_TO_BE_PAINTED; ++numberOfDotsPainted) {
// choose random spot for the new dot
// Create a dot with the given color
// Add the new dot to the grid
}
return g;
}
需要为每种颜色调用此函数,然后根据需要将坐标转换到正确位置所需的颜色。如果将四个网格放在笛卡尔坐标系的四个象限上,则可以轻松进行数学运算。 (翻译将以网格的宽度存在加法和减法)。
这种方法可以避免代码重复,并且比复制粘贴相同代码的结构更加结构化,每个部分都进行了少量更改。每当您需要将一个小东西更改为核心功能时,您只需要更改代码的一部分而不是更改n次(n颜色数量)。这非常容易出错。