2015-01-08 39 views
0

我想创建一个随机数,然后创建9个矩形,但其中一个会以不同的颜色,一个不同的颜色将根据随机数出来,所以我已经做到了,但代码太长了,我怎么能缩短它?随机和图形太长的代码

public void paint(Graphics g) { 
    rand = new Random(); 
    n = rand.nextInt(9) + 1; 
    if (n == 1) { 
     g.setColor(Color.LIGHT_GRAY); 
     rec1 = new Rectangle(10, 130, 50, 50); 
     g.fillRect((int) rec1.getX(), (int) rec1.getY(), 
       (int) rec1.getWidth(), (int) rec1.getHeight()); 
     g.setColor(Color.DARK_GRAY); 
     rec2 = new Rectangle(70, 130, 50, 50); 
     g.fillRect((int) rec2.getX(), (int) rec2.getY(), 
       (int) rec2.getWidth(), (int) rec2.getHeight()); 
     rec3 = new Rectangle(130, 130, 50, 50); 
     g.fillRect((int) rec3.getX(), (int) rec3.getY(), 
       (int) rec3.getWidth(), (int) rec3.getHeight()); 
     rec4 = new Rectangle(10, 70, 50, 50); 
     g.fillRect((int) rec4.getX(), (int) rec4.getY(), 
       (int) rec4.getWidth(), (int) rec4.getHeight()); 
     rec5 = new Rectangle(70, 70, 50, 50); 
     g.fillRect((int) rec5.getX(), (int) rec5.getY(), 
       (int) rec5.getWidth(), (int) rec5.getHeight()); 
     rec6 = new Rectangle(130, 70, 50, 50); 
     g.fillRect((int) rec6.getX(), (int) rec6.getY(), 
       (int) rec6.getWidth(), (int) rec6.getHeight()); 
     rec7 = new Rectangle(10, 10, 50, 50); 
     g.fillRect((int) rec7.getX(), (int) rec7.getY(), 
       (int) rec7.getWidth(), (int) rec7.getHeight()); 
     rec8 = new Rectangle(70, 10, 50, 50); 
     g.fillRect((int) rec8.getX(), (int) rec8.getY(), 
       (int) rec8.getWidth(), (int) rec8.getHeight()); 
     rec9 = new Rectangle(130, 10, 50, 50); 
     g.fillRect((int) rec9.getX(), (int) rec9.getY(), 
       (int) rec9.getWidth(), (int) rec9.getHeight()); 
    } else if (n == 2) { 
     rec1 = new Rectangle(10, 130, 50, 50); 
     g.fillRect((int) rec1.getX(), (int) rec1.getY(), 
       (int) rec1.getWidth(), (int) rec1.getHeight()); 
     g.setColor(Color.LIGHT_GRAY); 
     rec2 = new Rectangle(70, 130, 50, 50); 
     g.fillRect((int) rec2.getX(), (int) rec2.getY(), 
       (int) rec2.getWidth(), (int) rec2.getHeight()); 
     g.setColor(Color.DARK_GRAY); 
     rec3 = new Rectangle(130, 130, 50, 50); 
     g.fillRect((int) rec3.getX(), (int) rec3.getY(), 
       (int) rec3.getWidth(), (int) rec3.getHeight()); 
     rec4 = new Rectangle(10, 70, 50, 50); 
     g.fillRect((int) rec4.getX(), (int) rec4.getY(), 
       (int) rec4.getWidth(), (int) rec4.getHeight()); 
     rec5 = new Rectangle(70, 70, 50, 50); 
     g.fillRect((int) rec5.getX(), (int) rec5.getY(), 
       (int) rec5.getWidth(), (int) rec5.getHeight()); 
     rec6 = new Rectangle(130, 70, 50, 50); 
     g.fillRect((int) rec6.getX(), (int) rec6.getY(), 
       (int) rec6.getWidth(), (int) rec6.getHeight()); 
     rec7 = new Rectangle(10, 10, 50, 50); 
     g.fillRect((int) rec7.getX(), (int) rec7.getY(), 
       (int) rec7.getWidth(), (int) rec7.getHeight()); 
     rec8 = new Rectangle(70, 10, 50, 50); 
     g.fillRect((int) rec8.getX(), (int) rec8.getY(), 
       (int) rec8.getWidth(), (int) rec8.getHeight()); 
     rec9 = new Rectangle(130, 10, 50, 50); 
     g.fillRect((int) rec9.getX(), (int) rec9.getY(), 
       (int) rec9.getWidth(), (int) rec9.getHeight()); 
    } else if (n == 3) { 
     rec1 = new Rectangle(10, 130, 50, 50); 
     g.fillRect((int) rec1.getX(), (int) rec1.getY(), 
       (int) rec1.getWidth(), (int) rec1.getHeight()); 
     rec2 = new Rectangle(70, 130, 50, 50); 
     g.fillRect((int) rec2.getX(), (int) rec2.getY(), 
       (int) rec2.getWidth(), (int) rec2.getHeight()); 
     g.setColor(Color.LIGHT_GRAY); 
     rec3 = new Rectangle(130, 130, 50, 50); 
     g.fillRect((int) rec3.getX(), (int) rec3.getY(), 
       (int) rec3.getWidth(), (int) rec3.getHeight()); 
     g.setColor(Color.DARK_GRAY); 
     rec4 = new Rectangle(10, 70, 50, 50); 
     g.fillRect((int) rec4.getX(), (int) rec4.getY(), 
       (int) rec4.getWidth(), (int) rec4.getHeight()); 
     rec5 = new Rectangle(70, 70, 50, 50); 
     g.fillRect((int) rec5.getX(), (int) rec5.getY(), 
       (int) rec5.getWidth(), (int) rec5.getHeight()); 
     rec6 = new Rectangle(130, 70, 50, 50); 
     g.fillRect((int) rec6.getX(), (int) rec6.getY(), 
       (int) rec6.getWidth(), (int) rec6.getHeight()); 
     rec7 = new Rectangle(10, 10, 50, 50); 
     g.fillRect((int) rec7.getX(), (int) rec7.getY(), 
       (int) rec7.getWidth(), (int) rec7.getHeight()); 
     rec8 = new Rectangle(70, 10, 50, 50); 
     g.fillRect((int) rec8.getX(), (int) rec8.getY(), 
       (int) rec8.getWidth(), (int) rec8.getHeight()); 
     rec9 = new Rectangle(130, 10, 50, 50); 
     g.fillRect((int) rec9.getX(), (int) rec9.getY(), 
       (int) rec9.getWidth(), (int) rec9.getHeight()); 
    } else if (n == 4) { 
     rec1 = new Rectangle(10, 130, 50, 50); 
     g.fillRect((int) rec1.getX(), (int) rec1.getY(), 
       (int) rec1.getWidth(), (int) rec1.getHeight()); 
     rec2 = new Rectangle(70, 130, 50, 50); 
     g.fillRect((int) rec2.getX(), (int) rec2.getY(), 
       (int) rec2.getWidth(), (int) rec2.getHeight()); 
     rec3 = new Rectangle(130, 130, 50, 50); 
     g.fillRect((int) rec3.getX(), (int) rec3.getY(), 
       (int) rec3.getWidth(), (int) rec3.getHeight()); 
     g.setColor(Color.LIGHT_GRAY); 
     rec4 = new Rectangle(10, 70, 50, 50); 
     g.fillRect((int) rec4.getX(), (int) rec4.getY(), 
       (int) rec4.getWidth(), (int) rec4.getHeight()); 
     g.setColor(Color.DARK_GRAY); 
     rec5 = new Rectangle(70, 70, 50, 50); 
     g.fillRect((int) rec5.getX(), (int) rec5.getY(), 
       (int) rec5.getWidth(), (int) rec5.getHeight()); 
     rec6 = new Rectangle(130, 70, 50, 50); 
     g.fillRect((int) rec6.getX(), (int) rec6.getY(), 
       (int) rec6.getWidth(), (int) rec6.getHeight()); 
     rec7 = new Rectangle(10, 10, 50, 50); 
     g.fillRect((int) rec7.getX(), (int) rec7.getY(), 
       (int) rec7.getWidth(), (int) rec7.getHeight()); 
     rec8 = new Rectangle(70, 10, 50, 50); 
     g.fillRect((int) rec8.getX(), (int) rec8.getY(), 
       (int) rec8.getWidth(), (int) rec8.getHeight()); 
     rec9 = new Rectangle(130, 10, 50, 50); 
     g.fillRect((int) rec9.getX(), (int) rec9.getY(), 
       (int) rec9.getWidth(), (int) rec9.getHeight()); 
    } else if (n == 5) { 
     rec1 = new Rectangle(10, 130, 50, 50); 
     g.fillRect((int) rec1.getX(), (int) rec1.getY(), 
       (int) rec1.getWidth(), (int) rec1.getHeight()); 
     rec2 = new Rectangle(70, 130, 50, 50); 
     g.fillRect((int) rec2.getX(), (int) rec2.getY(), 
       (int) rec2.getWidth(), (int) rec2.getHeight()); 
     rec3 = new Rectangle(130, 130, 50, 50); 
     g.fillRect((int) rec3.getX(), (int) rec3.getY(), 
       (int) rec3.getWidth(), (int) rec3.getHeight()); 
     rec4 = new Rectangle(10, 70, 50, 50); 
     g.fillRect((int) rec4.getX(), (int) rec4.getY(), 
       (int) rec4.getWidth(), (int) rec4.getHeight()); 
     g.setColor(Color.LIGHT_GRAY); 
     rec5 = new Rectangle(70, 70, 50, 50); 
     g.fillRect((int) rec5.getX(), (int) rec5.getY(), 
       (int) rec5.getWidth(), (int) rec5.getHeight()); 
     g.setColor(Color.DARK_GRAY); 
     rec6 = new Rectangle(130, 70, 50, 50); 
     g.fillRect((int) rec6.getX(), (int) rec6.getY(), 
       (int) rec6.getWidth(), (int) rec6.getHeight()); 
     rec7 = new Rectangle(10, 10, 50, 50); 
     g.fillRect((int) rec7.getX(), (int) rec7.getY(), 
       (int) rec7.getWidth(), (int) rec7.getHeight()); 
     rec8 = new Rectangle(70, 10, 50, 50); 
     g.fillRect((int) rec8.getX(), (int) rec8.getY(), 
       (int) rec8.getWidth(), (int) rec8.getHeight()); 
     rec9 = new Rectangle(130, 10, 50, 50); 
     g.fillRect((int) rec9.getX(), (int) rec9.getY(), 
       (int) rec9.getWidth(), (int) rec9.getHeight()); 
    } else if (n == 6) { 
     rec1 = new Rectangle(10, 130, 50, 50); 
     g.fillRect((int) rec1.getX(), (int) rec1.getY(), 
       (int) rec1.getWidth(), (int) rec1.getHeight()); 
     rec2 = new Rectangle(70, 130, 50, 50); 
     g.fillRect((int) rec2.getX(), (int) rec2.getY(), 
       (int) rec2.getWidth(), (int) rec2.getHeight()); 
     rec3 = new Rectangle(130, 130, 50, 50); 
     g.fillRect((int) rec3.getX(), (int) rec3.getY(), 
       (int) rec3.getWidth(), (int) rec3.getHeight()); 
     rec4 = new Rectangle(10, 70, 50, 50); 
     g.fillRect((int) rec4.getX(), (int) rec4.getY(), 
       (int) rec4.getWidth(), (int) rec4.getHeight()); 
     rec5 = new Rectangle(70, 70, 50, 50); 
     g.fillRect((int) rec5.getX(), (int) rec5.getY(), 
       (int) rec5.getWidth(), (int) rec5.getHeight()); 
     g.setColor(Color.LIGHT_GRAY); 
     rec6 = new Rectangle(130, 70, 50, 50); 
     g.fillRect((int) rec6.getX(), (int) rec6.getY(), 
       (int) rec6.getWidth(), (int) rec6.getHeight()); 
     g.setColor(Color.DARK_GRAY); 
     rec7 = new Rectangle(10, 10, 50, 50); 
     g.fillRect((int) rec7.getX(), (int) rec7.getY(), 
       (int) rec7.getWidth(), (int) rec7.getHeight()); 
     rec8 = new Rectangle(70, 10, 50, 50); 
     g.fillRect((int) rec8.getX(), (int) rec8.getY(), 
       (int) rec8.getWidth(), (int) rec8.getHeight()); 
     rec9 = new Rectangle(130, 10, 50, 50); 
     g.fillRect((int) rec9.getX(), (int) rec9.getY(), 
       (int) rec9.getWidth(), (int) rec9.getHeight()); 
    } else if (n == 7) { 
     rec1 = new Rectangle(10, 130, 50, 50); 
     g.fillRect((int) rec1.getX(), (int) rec1.getY(), 
       (int) rec1.getWidth(), (int) rec1.getHeight()); 
     rec2 = new Rectangle(70, 130, 50, 50); 
     g.fillRect((int) rec2.getX(), (int) rec2.getY(), 
       (int) rec2.getWidth(), (int) rec2.getHeight()); 
     rec3 = new Rectangle(130, 130, 50, 50); 
     g.fillRect((int) rec3.getX(), (int) rec3.getY(), 
       (int) rec3.getWidth(), (int) rec3.getHeight()); 
     rec4 = new Rectangle(10, 70, 50, 50); 
     g.fillRect((int) rec4.getX(), (int) rec4.getY(), 
       (int) rec4.getWidth(), (int) rec4.getHeight()); 
     rec5 = new Rectangle(70, 70, 50, 50); 
     g.fillRect((int) rec5.getX(), (int) rec5.getY(), 
       (int) rec5.getWidth(), (int) rec5.getHeight()); 
     rec6 = new Rectangle(130, 70, 50, 50); 
     g.fillRect((int) rec6.getX(), (int) rec6.getY(), 
       (int) rec6.getWidth(), (int) rec6.getHeight()); 
     g.setColor(Color.LIGHT_GRAY); 
     rec7 = new Rectangle(10, 10, 50, 50); 
     g.fillRect((int) rec7.getX(), (int) rec7.getY(), 
       (int) rec7.getWidth(), (int) rec7.getHeight()); 
     g.setColor(Color.DARK_GRAY); 
     rec8 = new Rectangle(70, 10, 50, 50); 
     g.fillRect((int) rec8.getX(), (int) rec8.getY(), 
       (int) rec8.getWidth(), (int) rec8.getHeight()); 
     rec9 = new Rectangle(130, 10, 50, 50); 
     g.fillRect((int) rec9.getX(), (int) rec9.getY(), 
       (int) rec9.getWidth(), (int) rec9.getHeight()); 
    } else if (n == 8) { 
     rec1 = new Rectangle(10, 130, 50, 50); 
     g.fillRect((int) rec1.getX(), (int) rec1.getY(), 
       (int) rec1.getWidth(), (int) rec1.getHeight()); 
     rec2 = new Rectangle(70, 130, 50, 50); 
     g.fillRect((int) rec2.getX(), (int) rec2.getY(), 
       (int) rec2.getWidth(), (int) rec2.getHeight()); 
     rec3 = new Rectangle(130, 130, 50, 50); 
     g.fillRect((int) rec3.getX(), (int) rec3.getY(), 
       (int) rec3.getWidth(), (int) rec3.getHeight()); 
     rec4 = new Rectangle(10, 70, 50, 50); 
     g.fillRect((int) rec4.getX(), (int) rec4.getY(), 
       (int) rec4.getWidth(), (int) rec4.getHeight()); 
     rec5 = new Rectangle(70, 70, 50, 50); 
     g.fillRect((int) rec5.getX(), (int) rec5.getY(), 
       (int) rec5.getWidth(), (int) rec5.getHeight()); 
     rec6 = new Rectangle(130, 70, 50, 50); 
     g.fillRect((int) rec6.getX(), (int) rec6.getY(), 
       (int) rec6.getWidth(), (int) rec6.getHeight()); 
     rec7 = new Rectangle(10, 10, 50, 50); 
     g.fillRect((int) rec7.getX(), (int) rec7.getY(), 
       (int) rec7.getWidth(), (int) rec7.getHeight()); 
     g.setColor(Color.LIGHT_GRAY); 
     rec8 = new Rectangle(70, 10, 50, 50); 
     g.fillRect((int) rec8.getX(), (int) rec8.getY(), 
       (int) rec8.getWidth(), (int) rec8.getHeight()); 
     g.setColor(Color.DARK_GRAY); 
     rec9 = new Rectangle(130, 10, 50, 50); 
     g.fillRect((int) rec9.getX(), (int) rec9.getY(), 
       (int) rec9.getWidth(), (int) rec9.getHeight()); 
    } else { 
     rec1 = new Rectangle(10, 130, 50, 50); 
     g.fillRect((int) rec1.getX(), (int) rec1.getY(), 
       (int) rec1.getWidth(), (int) rec1.getHeight()); 
     rec2 = new Rectangle(70, 130, 50, 50); 
     g.fillRect((int) rec2.getX(), (int) rec2.getY(), 
       (int) rec2.getWidth(), (int) rec2.getHeight()); 
     rec3 = new Rectangle(130, 130, 50, 50); 
     g.fillRect((int) rec3.getX(), (int) rec3.getY(), 
       (int) rec3.getWidth(), (int) rec3.getHeight()); 
     rec4 = new Rectangle(10, 70, 50, 50); 
     g.fillRect((int) rec4.getX(), (int) rec4.getY(), 
       (int) rec4.getWidth(), (int) rec4.getHeight()); 
     rec5 = new Rectangle(70, 70, 50, 50); 
     g.fillRect((int) rec5.getX(), (int) rec5.getY(), 
       (int) rec5.getWidth(), (int) rec5.getHeight()); 
     rec6 = new Rectangle(130, 70, 50, 50); 
     g.fillRect((int) rec6.getX(), (int) rec6.getY(), 
       (int) rec6.getWidth(), (int) rec6.getHeight()); 
     rec7 = new Rectangle(10, 10, 50, 50); 
     g.fillRect((int) rec7.getX(), (int) rec7.getY(), 
       (int) rec7.getWidth(), (int) rec7.getHeight()); 
     rec8 = new Rectangle(70, 10, 50, 50); 
     g.fillRect((int) rec8.getX(), (int) rec8.getY(), 
       (int) rec8.getWidth(), (int) rec8.getHeight()); 
     g.setColor(Color.LIGHT_GRAY); 
     rec9 = new Rectangle(130, 10, 50, 50); 
     g.fillRect((int) rec9.getX(), (int) rec9.getY(), 
       (int) rec9.getWidth(), (int) rec9.getHeight()); 
    } 

} 

新代码::

private static void drawRectangle(Graphics g, int column, int row, 
     Color color) { 
    g.setColor(color); 
    g.fillRect(column * 60 + 10, row * 60 + 10, 50, 50); 
    n = rand.nextInt(9); 
    for (row = 0; row < 3; row++) { 
     for (column = 0; column < 3; column++) { 
      drawRectangle(g, column, row, 
        n == row * 3 + column ? Color.LIGHT_GRAY 
          : Color.DARK_GRAY); 
     } 
    } 
} 
+0

你知道循环和数组吗? –

+1

创建8个矩形。之后检查随机数。这样你只能为任何可能的情况创建一个矩形。或者您可以创建9并为该案例设置填充颜色。 –

+0

事后你确实需要'Rectangle'对象吗? –

回答

4

我会开始写一个辅助方法:在需要绘制矩形的代码

private static void drawRectangle(Graphics g, int column, int row, Color color) { 
    // TODO: Remember the previous color of g and reset it afterwards? 
    g.setColor(color); 
    g.fillRect(column * 60 + 10, row * 60 + 10, 50, 50); 
} 

然后(例如在代码在你的问题是)使用嵌套循环绘制所有9个矩形,根据n的值计算出每个矩形的颜色:

// It's simpler to use n being 0 to 8, if that's okay with the rest of your code. 
n = rand.nextInt(9); 
for (int row = 0; row < 3; row++) { 
    for (int column = 0; column < 3; column++) { 
     drawRectangle(g, column, row, 
      n == row * 3 + column ? Color.LIGHT_GRAY : Color.DARK_GRAY); 
    } 
} 

这是假设你根本不需要Rectangle对象。如果这样做,则会更改drawRectangle方法以创建并返回Rectangle,然后根据您想要对它们执行的操作,具有Rectangle[]List<Rectangle>或可能的Rectangle[][]。我强烈建议你不要只有9个单独的变量。

+0

非常整洁的代码+1 – Hayden

+0

我不明白它:\什么是int行和int列,什么是颜色:(你可以请做一个解释..? – user3731180

+0

你可以在编辑中看到新的代码..我基本上复制了你的代码,但是它给出了一个空的JFrame .. – user3731180