2016-05-18 7 views
0

私は初心者の質問があるので、私はjavaに新しいです。 私は電球プログラムを書く作業をしています。電球プログラムを入れ替える必要があります。 RGBColorクラス(コード内の特定の参照が表示されます)は、LightBulbクラスの基になっている別のクラスです。ここで私は電球のクラスで、これまで行ってきたコードです:私は電球オブジェクトを構築し、switchLight()メソッドを実装しようとしている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 
 
     
 
    } 
 

が、私はないんだけど逆の価値を受け取った...私はそれをどうやって受け取ることができるかについてのヒントがあるかどうかを知ってうれしいです。

ありがとうございます!

答えて

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

ありがとうございました。私はあなたが示唆したことを試しましたが、事は、私が(255,255,255)を値として置いていても、私がこのようにしているとき、toStringメソッドによると、電球は「オフ」です正しい。私は "on"を受け取るべきです... – user6351755

+0

あなたのコンストラクタでは、_switchedOnの初期状態をfalseに設定します。ゼロ以外の色がコンストラクタに渡された場合、最初にライトを点灯させたい場合は、そのチェックをコンストラクタに追加して_switchedOnをtrueに変更する必要があります。現在、すべてのコンストラクタが電球を最初にオフに設定しています。これは、isSwitchedOn()またはswitchLight()メソッドのコードに関係なく変更されません。 –