我正在做一个为照片制作滤镜的项目,我们在此使用getter和setter方法设置新的RGB值。
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)-确定
Color(1.0,1.0,1.0).getRed()-预期0.0-返回1.0
因此,setter可以按我的需要运行,但getter返回的是原始值。这不是一个孤立的案例,当每个setter成功运行时,我的每个getter都针对各自的颜色返回原始值(1.0)。
最佳答案
您的最后一个条件else if (color1<0.0) { red=0.0; }
永远不会是true
,因为color1
小于0
的所有情况都将在if if (color1 <= 1.0)
语句的开头被捕获。因此,将永远不会设置值0.0
。