2015-12-02 47 views
0

我正在做一個項目來爲照片製作過濾器,其中我們用getter和setter方法設置了新的RGB值。Java getter返回的原始值,而不是由setter更新的值

public class Color { 

private double red; 
private double green; 
private double blue; 

public Color() { 
this.setRed(1.0); 
this.setGreen(1.0); 
this.setBlue(1.0); 
} 

public Color(double red, double green, double blue) { 
this.setRed(red); 
this.setGreen(green); 
this.setBlue(blue); 
} 

... (code for other functions after those tests pass) 

public double getRed(){ 
    return red; 
} 

public void setRed(double color1){ 
    if (color1 <= 1.0){ 
     if (color1 >= 0.0){ 
      red = color1; 
     } 
    } 
    else if (color1>1.0){ 
     red=1.0; 
    } 
    else if (color1<0.0){ 
     red=0.0; 
    } 
} 

} 

每個getter和setter都是getRed/setRed的重複。我檢查通過一個程序,我沒有訪問定義,但這是輸出我收到:

失敗的測試:

情景:3.1 - 打完電話後setRed(-1.0),getRed( )的返回值應該是0.0

顏色(1.0,1.0,1.0).setRed(-1.0) - 確定

顏色(1.0,1.0,1.0).getRed() - 預期0.0 - 1.0返回

所以setter的功能正如我所需要的那樣,但是getter正在返回原始值即這不是一個孤立的案例,我的每個getters都會在每個setter成功運行時爲其各自的顏色返回原始值(1.0)。

+1

您是否每次運行getter時都創建一個新顏色? – JCOC611

+0

每次測試運行都沒有新的顏色。我們使用相同的Color實例來測試set/get – jobosno

+0

單行setter:'this.red = color1 <0.0? 0.0:color1> 1.0? 1.0:color1;' –

回答

2

你的最後一個條件else if (color1<0.0) { red=0.0; }永遠不會true,因爲所有的情況下,當color1小於0將首先被抓if語句if (color1 <= 1.0)。因此,價值0.0永遠不會被設置。

+0

這似乎是問題所在。改變嵌套如果從普通的if/else似乎已經完成了這個技巧。非常感謝。 – jobosno

+0

@jobosno很高興我能幫到你。如果這解決了您的問題,您可以通過點擊我的回覆信息中的標記來接受我的回答。 – ctomek

+0

在接受答案之前,似乎至少有15分鐘的時間。我很樂意在所述時限到期後將其標記爲此。再次感謝! – jobosno