0

このプロジェクトを正しく機能させるには多くの問題がありましたが、現在、このクラスを正しく機能させることに固執しています。ラジオ クラスから現在の放送局を取得し、それをこのクラスに渡すことを想定しています。問題は、AM と FM のどちらかを選択して現在の放送局を表示しようとしていることです。currentStation のデフォルト値である 0.0 を返し続けるため、equals メソッドを正しく使用しているかどうかはわかりません。

public class AutoRadioSystem
{

  private Radio selectedRadio;
  private AMRadio radioAM;
  private FMRadio radioFM; 
  private XMRadio radioXM;

  public AutoRadioSystem()
  {
    selectedRadio = new AMRadio();
  }
  public double getCurrentStation()
  {
    if (selectedRadio.equals(radioAM))
    {
      return radioAM.getCurrentStaion();
    }
    else if (selectedRadio.equals(radioFM))
    {
      return radioFM.getCurrentStaion();
    }
    return 0.0;
  }
  public void selectRadio()
  {
    //if (selectedRadio.equals(radioAM))
     // selectedRadio = radioFM;
  }
  public boolean equals (Object o)    
 {        
   if (o == null)           
     return false;        
   if (! (o instanceof AutoRadioSystem))           
     return false;       
   AutoRadioSystem other = (AutoRadioSystem) o;       
   return this.selectedRadio == other.selectedRadio;    
 }
  public static void main (String [] args) { 
    AutoRadioSystem c = new AutoRadioSystem();
    //c.selectRadio();
    double b = c.getCurrentStation();
    System.out.println(b);
  }
}
4

3 に答える 3

1

あなたはそれを間違っているようです(tm)。インターフェイスは、3 つの無線クラスすべてによって実装されるメソッドをRadio公開する必要があります。getCurrentStaion()次に、getCurrentStation()メソッドを呼び出しselectedRadio.getCurrentStation()てその結果を返すことができます。

また、AutoRadioSystem に equals() メソッドを実装していますが、これは Radio インスタンスを比較するときに効果がありません。

于 2013-09-24T22:18:39.840 に答える
0

Java のオブジェクトは、2 つの方法でオブジェクトを比較できるため、比較に関しては少し異なります。

  • を使用して、オブジェクトの参照を比較できます==
  • o1.equals(o2)また、 where o1,o2are objectsを使用して、自作のメソッドにカスタマイズされたチェックを実行させることができます。

NullPointerException をスローしない場合にo instanceof AutoRadioSystem返されることに注意してください。falseo==null

PS: 前の質問で回答したものと同様に、他にも問題があります。

于 2013-09-24T22:20:16.417 に答える
0

単に

private Radio selectedRadio;
private AMRadio radioAM;
private FMRadio radioFM; 
private XMRadio radioXM;

public AutoRadioSystem()
{
    selectedRadio = new AMRadio();
}

radioAMradioFM、およびradioXMはすべてnull、デフォルトで に初期化されます。

参照と比較すると、適切なequals()メソッドはすぐに返されます。だからこれでfalsenull

public double getCurrentStation()
{
    if (selectedRadio.equals(radioAM))
    {
        return radioAM.getCurrentStaion();
    }
    else if (selectedRadio.equals(radioFM))
    {
        return radioFM.getCurrentStaion();
    }
    return 0.0;
}

のいずれも にif評価されずtrue、 を返す最後のケースが得られます0.0

メソッドを正しく実装するequals()だけでなく、正しく初期化する必要があります。

于 2013-09-24T22:15:48.050 に答える