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);
}
}
}
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.
See more on this question at Stackoverflow