Random and graphics too long code

I want to create a random number, then create 9 rectangles but one of them will be in a different color, the one with the different color will be according to the random number came out, so I have done it but the code is too long, how can I make it shorter?

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());
    }

}

New code::

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);
        }
    }
}
Jon Skeet
people
quotationmark

I would start off by writing a helper method:

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);
}

Then in the code that needs to draw the rectangles (e.g. where the code in your question is) use a nested loop to draw all 9 rectangles, working out the color of each rectangle based on the value of 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);
    }
}

That's assuming you don't actually need the Rectangle objects at all. If you do, you'd change the drawRectangle method to create and return a Rectangle, and then either have a Rectangle[], a List<Rectangle> or possibly a Rectangle[][] depending on what you want to do with them. I would strongly recommend that you don't just have 9 separate variables.

people

See more on this question at Stackoverflow