2016-10-11 2 views
-3

changeBlue(weight)을 작성하십시오. 그림의 전반부에있는 픽셀의 색을 변경하지 마십시오. 후반에는 각 픽셀의 청색 값을 new blue=original blue * weight으로 변경하십시오. 픽셀이 (200,100,100)의 값을 가지며, 중량 경우Java 메소드를 작성하십시오 changeBlue (weight)

예를 들어, 0.5, 는 새로운 값 (200,100,50) 일 것이다. 가중치가 1.5이면 이고 새 값은 (200,100,150)입니다.

모든 이미지를 사용하여이 방법을 테스트 할 수 있습니다.

다음은 내가 가지고있는 것입니다. 나는 거의 가깝다고 생각하지만, 약간의 오류가 있습니다. 모든 조언을 부탁드립니다.

public void changeBlue(int weight) 
{ 
    Pixel[] pixelArray = this.getPixels(); 
    Pixel pixelObj = null; 
    int value = 0; 
    int index = 0; 

    while (index >= pixelArray.length/2) 
    { 

     pixelObj = pixelArray[index]; 

     value = pixelObj.getBlue(); 

     value = (value * weight); 

     pixelObj.setBlue(value); 

     index++; 
    } 
} 
+7

어떤 오류가 있습니까? – Actorclavilis

+4

'index> = pixelArray.length/2', 내 생각에이 'loop'는 꽤 자주 실행되지 않을 것입니다. – SomeJavaGuy

+0

@KevinEsche의 설명에 따라'for' 루프를 사용하여 모든 배열을 반복하고'if' 문을 사용하여 오른쪽 절반을 검사합니다. 아니면 배열의 두 번째 절반에서 색인을 시작하면됩니다. – aleb2000

답변

0

을의 changeBlue 메서드의 매개 변수는이이 double 당신의 사양을 제공하지 않아야, int입니까?

또한 index가 처음 0로 설정, 그리고 루프는 index> = 반 픽셀 어레이 길이 (pixels.length/2) 동안 실행됩니다. 따라서이 루프는 pixels.length/20을 반환하지 않는 한 시작되지 않습니다. 일단 시작되면 결코 종료되지 않습니다.

for 문을 사용하는 것이 가장 좋습니다. int을 배열 길이 (pixels.length/2)의 절반으로 초기화하고 루프가 마지막 pixels 배열 색인 (pixels.length - 1)을 실행 한 후에 종료되도록 설정하고 매번 1 씩 증가시켜야합니다.

자세한 내용 및 for 문을 사용하는 방법은 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html을 참조하십시오.

또한 setBlue()이 매개 변수로 int 인 경우 캐스팅해야합니다. 예 : (int) (weight * value). 그러나 Pixel 클래스의 세부 정보는 제공하지 않습니다.

예 구현 : 실제 노트에

public void changeBlue(double weight) { 
    for (int i = pixelArray.length/2; i < pixelArray.length; i++) { 
     pixelArray[i].setBlue((int) (pixelArray[i].getBlue() * weight)); 
    } 
} 

, 파란색은 0이 경우 changeBlue을 사용하여 변경할 수 없습니다,하지만이 동작이 경우에 다소 논리적 일 것입니다.

+0

감사합니다. 나는 단지 체중이 두 배가 될 필요가 있다고 생각했습니다. – user1729377

0

최선의 구현하지만 시도하지 : 시작을 위해

public void changeBlue(int weight) 
{ 
    Pixel[] pixelArray = this.getPixels(); 
    Pixel pixelObj = null; 
    int value = 0; 
    int index = 0; 
    int halfSize = pixelArray.length/2; 

    for (index = 0; index <= pixelArray.length; index++) { 
     if (index <= halfSize){ 
      // FIrts half of the file 
     } 
     if (index > halfSize) { 
      // Seconde part of the file 
      pixelObj = pixelArray[index]; 

      value = pixelObj.getBlue(); 
      value = (value * weight); 

      pixelObj.setBlue(value); 
     } 
    } 
} 
관련 문제