基于java的网格程序

基于java的网格程序,java,class,awt,Java,Class,Awt,我目前正在开发一个利用Java中awt类的测试程序。在这个程序中,我试图在网格的特定象限中生成4个随机点 在审查我的代码时,您能否就组织的发展提出更好的建议 我目前正在使用for循环显示4个点,如下所示: for (int dotsOnGrid = 1; dotsOnGrid < 5; dotsOnGrid++) { int x = (int) (Math.random() * (.50 * width)); int y = (int) (Mat

我目前正在开发一个利用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); 
    }
for(int-dotsOnGrid=1;dotsOnGrid<5;dotsOnGrid++)
{
intx=(int)(Math.random()*(.50*宽度));
int y=(int)(Math.random()*(.50*高度));
g、 setColor(Color.RED);
g、 椭圆形(x,y,r,r);
}
在网格左上角有4个红点,我是实心的

我只是不知道如何制作黄点和绿点。使用Math.random()时,这将如何工作


提前感谢您的帮助

做一些简单的数学运算,不难理解。首先找出正方形的坐标x范围,以及正方形的坐标y范围。在这两个范围内做两次随机,这将是你的x,y值。简单

只需为其他颜色添加新部分:

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);
}
for(int numDots=1;numDots<5;numDots++)
{
g、 setColor(颜色为黄色);
int x=(int)(Math.random()*(.50*宽度))+(.50*宽度);
int y=(int)(Math.random()*(.50*高度));
g、 椭圆形(x,y,r,r);
}
对于(int numDots=1;numDots<5;numDots++)
{
g、 setColor(Color.GREEN);
intx=(int)(Math.random()*(.50*宽度));
int y=(int)(Math.random()*(.50*高度)+(.50*高度));
g、 椭圆形(x,y,r,r);
}
(虽然这闻起来像是家庭作业:)

假设您必须用颜色填充四个网格。对于四个网格中的每个网格,可以执行相同的代码。因此,创建一个函数,为一种颜色创建一个网格(这意味着颜色将是一个参数)。然后,一旦制作好四个网格,将它们粘贴在一起,形成一个大网格

在伪代码中:

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;
}
public Grid makeGrid(最终颜色){
网格g=新网格();
对于(numberOfDotsPainted=0;numberOfDotsPainted<要绘制的点的数量;++numberOfDotsPainted){
//为新点选择随机点
//用给定的颜色创建一个点
//将新点添加到网格中
}
返回g;
}
需要为每种颜色调用此函数,然后根据需要将坐标转换到正确位置的颜色调用此函数。如果你把你的四个网格放在笛卡尔坐标系的四个象限上,数学就简单了。(根据网格的宽度,将存在加法和减法的转换)


这种方法将避免代码重复,并且比重复复制粘贴相同的代码要结构化得多,只需在每个部分做一些小的更改。每次您需要对核心功能更改一件小事时,您只需要更改代码的一部分,而不需要更改n次(n颜色的数量)。这很容易出错。

您可能希望随机获取整个屏幕的坐标,并根据获得的坐标选择颜色。您知道如何生成介于0和宽度/2之间的随机数。您需要一个介于宽度/2和宽度之间的随机数。你不认为仅仅增加宽度/2就可以了吗?是的,我明白你的意思。拥有一块代码比多次复制和粘贴要简单得多。这是我在这个项目中的目标,因为它可能会变得重复。试试看,让我知道它是否有效。显然,在这个项目中,按照我的设置方式,点并不总是停留在边界内,这意味着在网格内。根据我之前编写的代码,我将如何着手解决这个小问题?点的中间是否在网格中?如果使用大圆点,则应在代码中考虑到所选点距离网格边界至少一个半径。如果圆点完全在网格之外,则会出现另一个错误。啊,我明白了,这很有帮助!