2016-05-18 47 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()方法中的代碼如何,這都不會改變。 –