2016-05-18 46 views
0

我是新来的java,所以我有一个初学者的问题。 我有一个工作要做,编写一个灯泡程序,在这个程序中我必须关闭它。 RGBColor类(您将在代码中看到它的某些引用)是LightBulb类所基于的另一个类。下面是我到目前为止已经做了灯泡类的代码:LightBulb工作 - 初学者


 
public class LightBulb 
 
{ 
 
    private RGBColor _color; 
 
    private boolean _switchedOn; 
 
    private final int MIN_VAL = 0; 
 
    private final int MAX_VAL = 255; 
 
    
 
    public LightBulb(int red, int green, int blue) 
 
    { 
 
     _color = new RGBColor(red, green, blue); 
 
     _switchedOn = false; 
 
     
 
     if((red < MIN_VAL) || (red > MAX_VAL) || (green < MIN_VAL) || (green > MAX_VAL) || (blue < MIN_VAL) || (blue > MAX_VAL)) 
 
     { 
 
      red = MIN_VAL; 
 
      green = MIN_VAL; 
 
      blue = MIN_VAL; 
 
     } 
 
    } 
 
    
 
    public LightBulb(RGBColor color) 
 
    { 
 
     _color = new RGBColor(color); 
 
     _switchedOn = false; 
 
    } 
 
    
 
    public LightBulb(LightBulb other) 
 
    { 
 
     _color = new RGBColor(other._color); 
 
     _switchedOn = false; 
 
    } 
 
    
 
    public String toString() 
 
    { 
 
     String onOrOff; 
 
     if(isSwitchedOn() == true) 
 
      onOrOff = "On"; 
 
     else 
 
      onOrOff = "Off"; 
 
     
 
     return ("(" + _color.getRed() + "," + _color.getGreen() + "," + _color.getBlue() + ")" + ", " + onOrOff); 
 
    } 
 
    
 
    public RGBColor getColor() 
 
    { 
 
     return new RGBColor(_color); 
 
    } 
 
    
 
    public void setColor(RGBColor color) 
 
    { 
 
     _color = new RGBColor(color); 
 
    } 
 
    
 
    public boolean isSwitchedOn() 
 
    { 
 
     if((_color.getRed() == 0) && (_color.getGreen() == 0) && (_color.getBlue() == 0)) 
 
      _switchedOn = false; 
 
     else 
 
      _switchedOn = true; 
 
     
 
     return _switchedOn; 
 
    } 
 
    
 
    public void switchLight() 
 
    { 
 
     //_switchedOn = !_switchedOn; // option 1: Doesn't switch it to the reversed value 
 
     
 
     if(isSwitchedOn() == true) 
 
      _switchedOn = false; 
 
     else 
 
      _switchedOn = true; // option 2: Doesn't switch it to the reversed value either 
 
     
 
    } 
 

当我建立一个灯泡的对象,并试图实现switchLight()方法,我不是接收到反向值...我很乐意知道您是否对我有提示,我该如何接收它。

谢谢!

回答

1

看来你的逻辑混合了开关灯。在switchLight()方法中,您正确设置_switchedOn布尔值,但是在isSwitchedOn()方法中,您不是询问_switchedOn布尔值,而是检查颜色,然后根据颜色更改_switchedOn布尔值。我会说在这种方法中检查颜色是错误的,因为如果你将颜色设置为0来表示它关闭了,你不在任何地方做任何事情,那么你并没有保持原来的颜色。我会改变下面的方法。

public boolean isSwitchedOn() 
    { 
     return _switchedOn; 
    } 

    public void switchLight() 
    { 
     _switchedOn = !_switchedOn; // This should work now. 
    } 

另外,我会检查你的(r,g,b)构造函数。如果红色不在范围内会发生什么,但绿色和蓝色是什么?那是你的意图吗?

+0

谢谢你的回答。我尝试了你的建议,但事情是,当我这样做时,根据toString方法,即使当我将(255,255,255)作为值放入灯泡时,灯泡也是“关闭”,而不是正确。我应该收到“on”... – user6351755

+0

在您的构造函数中,您将_switchedOn的初始状态设置为false。如果你说如果一个非零颜色传递给构造函数,你最初想让光线开启,那么你需要在构造函数中添加该校验,然后将_switchedOn改为true。目前,您的所有构造函数都将灯泡设置为关闭状态。无论isSwitchedOn()或switchLight()方法中的代码如何,这都不会改变。 –