2015-01-08 3 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