0

我在让这个项目正常工作时遇到了很多问题,但我目前一直坚持让这个类正常工作。它的假设是从广播类中获取当前电台并将其传递给该类。问题是我试图在 AM 和 FM 之间进行选择并显示当前电台。我不确定我是否正确使用了 equals 方法,因为它一直返回 0.0,这是 currentStation 的默认值。

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)。该Radio接口应公开getCurrentStaion()将由所有 3 个无线电类实现的方法。然后你的getCurrentStation()方法可以调用selectedRadio.getCurrentStation()并返回它的结果。

此外,您正在 AutoRadioSystem 中实现 equals() 方法,该方法在比较 Radio 实例时无效。

于 2013-09-24T22:18:39.840 回答
0

请注意,只需使用

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

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

radioAM, radioFM, 和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 回答
0

在比较对象时,Java 中的对象有些不同,因为您可以通过两种方式比较对象。

  • 您可以使用 比较对象的引用==
  • o1.equals(o2)并且您可以通过使用where o1,o2are objects让自制方法进行自定义检查。

请注意,如果并且不抛出 NullPointerException ,则o instanceof AutoRadioSystem返回。falseo==null

PS:还有其他问题以及您上一个问题中的回答。

于 2013-09-24T22:20:16.417 回答