2014-03-04 51 views
0

它可能是一個愚蠢的錯誤,我做了,但由於某種原因,我的計數器沒有增加,輸出到控制檯爲0代表底部的所有打印語句。 我確信顏色被正確讀取,這意味着增量代碼必須存在問題。在Java中增加錯誤

public void countColours(BufferedImage colouredImage) { 
     int redCount = 0; 
     int greenCount = 0; 
     int blueCount = 0; 
     int totalPixels = (colouredImage.getWidth()*colouredImage.getHeight()); 

     for (int x = 0; x < colouredImage.getWidth(); x++) { 
      for (int y = 0; y < colouredImage.getHeight(); y++) { 

       int red = ((colouredImage.getRGB(x, y)>>> 16) & 0xFF); 
       int green = ((colouredImage.getRGB(x, y)>>> 8) & 0xFF); 
       int blue = ((colouredImage.getRGB(x, y)) & 0xFF); 

       float[] hsb = Color.RGBtoHSB(red, green, blue, null); 
       float hue = hsb[0]; 

       int colour = (int) (hue*360); 

       if (colour <= 60 & colour >= 300) { 
        redCount++; 
       } 

       if (colour >= 60 & colour <= 180) { 
        greenCount++; 
       } 
       if (colour >= 180 & colour <= 300) { 
        blueCount++; 
       } 
      } 
     } 
     int totalRed = (redCount/totalPixels)*100; 
     int totalGreen = (greenCount/totalPixels)*100; 
     int totalBlue = (blueCount/totalPixels)*100; 
     System.out.println(totalRed); 
     System.out.println(totalGreen); 
     System.out.println(totalBlue); 
    } 

伊夫調試儘可能正如我上面所說,顏色是0和360,但如果語句和增量顯然不工作,但我不明白爲什麼之間的值?

在此先感謝

+1

'(redCount/totalPixels)* 100' ==>'(redCount * 100)/ totalPixels'等。 – devnull

回答

2

你混合浮點除法(支持像0.75號)和int部門(這輪狀0.75〜0號)。將您的號碼更改爲雙倍或浮動。

您可以通過添加打印語句測試:

System.out.println("redCount: " + redCount); 
System.out.println("totalPixels: " + totalPixels); 
System.out.pirntln("redCount/totalPixels: " + (redCount/totalPixels)); 

int totalRed = (redCount/totalPixels)*100; 
+0

...或編寫百分比表達式,例如'totalRed =(redCount * 100)/ totalPixels' –

0

我beleive問題不在於你的增量或if語句,而是在這裏:

int totalRed = (redCount/totalPixels)*100; 
    int totalGreen = (greenCount/totalPixels)*100; 
    int totalBlue = (blueCount/totalPixels)*100; 

redCountgreenCountblueCount,和totalPixels都是int's,所以當你劃分時,結果(應該在1和0之間)將被截斷爲零。

爲了解決這個問題,投你vriables到彩車將前:

int totalRed = (int)((float)redCount/totalPixels)*100; 
int totalGreen = (int)((float)greenCount/totalPixels)*100; 
int totalBlue = (int)((float)blueCount/totalPixels)*100;