2016-10-11 81 views
-3

編寫一個方法changeBlue(weight)。不要更改圖片前半部分的任何顏色的像素。下半年,將每個像素的藍色值改爲new blue=original blue * weight編寫一個Java方法changeBlue(weight)

例如,如果一個像素的值(200,100,100)和權重爲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方法的參數是int,不應該這是一個給定的double您的規格?

您也有index最初設置爲0,並且您的循環只能運行,而index> =像素數組長度的一半(pixels.length/2)。因此,除非pixels.length/2返回0,否則此循環不會啓動。一旦開始,它也不會終止。

您最好使用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); 
     } 
    } 
}