2014-02-28 3 views
0

두 개의 픽셀 (r, g, b)의 밝기를 비교하는 기본 산술 (코드에 이미있는 것보다 진보 된 것은 없습니다)을 사용하여 Java로 메서드를 작성하려고합니다. c2. c1과 c2에서 (r, g, b) 값을 가져 와서 더 밝은 값을 비교하여 선택하고 세 번째 색상을 출력해야합니다. 다음은 내가 가지고있는 것입니다 :컬러 사진 필터 메서드 Java

public static int combineBrighter(Color c1, Color c2) { 
     int r = c1.getRed(); 
     int g = c1.getGreen(); 
     int b = c1.getBlue(); 

     int rr = c2.getRed(); 
     int gg = c2.getGreen(); 
     int bb = c2.getBlue(); 

     if(r >= rr){ 
     int rrr = r;  
     } else if(rr>=r) { 
      int rrr = rr; 
     } 

     if(g >= gg){ 
      int ggg = g;  
      } else if(gg>=g) { 
      int ggg = gg; 
      } 


     if(b >= bb){ 
      int bbb = b;  
      } else if(bb>=b) { 
       int bbb = bb; 
      } 
     Color f = new Color(rrr, ggg, bbb); 
     return f; 

왜 작동하지 않는가? rrr, ggg 및 bbb를 int로 새 Color()에 삽입 할 수없는 오류가 발생하지만 Color 또는 다른 유형으로 전환하면 int로 다시 전환하라는 메시지가 표시됩니다.

답변

0

범위 지정 문제입니다. rrr, gggbbb 변수는 Color 생성자에서 사용할 때 보이지 않는 범위에서 정의됩니다.

프로그램에서 더 일찍 선언하십시오. http://www.cs.umd.edu/~clin/MoreJava/ControlFlow/block.html

그러나 선언하고 삼항 ? 연산자를 사용하여 동시에 그것들을 초기화 할 수 :

public static int combineBrighter(Color c1, Color c2) { 
    int r = c1.getRed(); 
    int g = c1.getGreen(); 
    int b = c1.getBlue(); 

    int rr = c2.getRed(); 
    int gg = c2.getGreen(); 
    int bb = c2.getBlue(); 

    int rrr;    // declare them in this scope 
    int ggg; 
    int bbb; 

    if(r >= rr){ 
     rrr = r;    // assign values later 
    } else { 
     rrr = rr; 
    } 

    ... 

    Color f = new Color(rrr, ggg, bbb); 
    return f; 

여기 블록 범위에 대해 좀 더 정보입니다.

int rrr = r >= rr ? r : rr; 
int ggg = g >= gg ? r : gg; 
int bbb = b >= bb ? r : bb; 

그러나 휠을 다시 발명하는 이유는 무엇입니까? 이 것은 이해하기가 훨씬 쉽습니다.

int maxRed = Math.max(c1.getRed(), c2.getRed()); 
int maxGreen = Math.max(c1.getGreen(), c2.getGreen()); 
int maxBlue = Math.max(c1.getBlue(), c2.getBlue()); 
+0

Math.max()는 확실히 여기에 오는 길입니다. if 문 앞에 변수를 초기화하기 위해 편집 한 예제의 경우 "int rrr = 0;"으로 초기화해야합니다. 감사. –

+0

선언 할 때 코드 패스를 사용하기 전에 모든 코드 패스에 값을 할당하지 않으면 안됩니다. 그래서'else if'를'else'로 바꿨습니다. –