I'm have problems trying to figure out how to compare selectedRadio between AM FM AND XM so that I can determine which one it is currently on and then return the station of the particular radio. I know that i need the equals method i'm just not sure the correct way to use it to get the result i'm looking for.
public class AutoRadioSystem
{
private Radio selectedRadio;
private AMRadio radioAM;
private FMRadio radioFM;
private XMRadio radioXM;
//I'm not sure if this is the correct way to do this so that selectedRadio equals the object of radioAM
public AutoRadioSystem()
{
selectedRadio = radioAM;
}
//trying to figure out how to compare if selectedRadio is one of these.
public double getCurrentStation()
{
if (selectedRadio == radioAM)
{
return radioAM.getCurrentStaion();
}
else if (selectedRadio == radioFM)
{
return radioFM.getCurrentStaion();
}
return 0.0;
}
// its supposed to switch the radio from AM to FM when this method is called
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);
}
}
public abstract class Radio
{
double currentStation;
RadioSelectionBar radioSelectionBar;
public Radio()
{
this.currentStation = getMin_Station();
}
public abstract double getMax_Station();
public abstract double getMin_Station();
public abstract double getIncrement();
public void up()
{
}
public void down()
{
}
public double getCurrentStaion()
{
return this.currentStation;
}
public void setCurrentStation(double freq)
{
this.currentStation = freq;
}
public void setStation(int buttonNumber, double station)
{
}
public double getStation(int buttonNumber)
{
return 0.0;
}
public String toString()
{
String message = ("" + currentStation);
return message;
}
public boolean equals (Object o)
{
if (o == null)
return false;
if (! (o instanceof Radio))
return false;
Radio other = (Radio) o;
return this.currentStation == other.currentStation;
}
public static void main(String[] args)
{
Radio amRadio = new AMRadio();
System.out.println(amRadio);
Radio fmRadio = new FMRadio();
System.out.println(fmRadio);
Radio xmRadio = new XMRadio();
System.out.println(xmRadio);
}
}
public class FMRadio extends Radio
{
private static final double Max_Station = 108.0;
private static final double Min_Station = 88.0;
private static final double Increment = .01;
public FMRadio()
{
currentStation = Min_Station;
}
public double getMax_Station()
{
return this.Max_Station;
}
public double getMin_Station()
{
return this.Min_Station;
}
public double getIncrement()
{
return this.Increment;
}
public String toString()
{
String message = ("FM " + this.currentStation);
return message;
}
}
Define
equals
method in all subclasses likeAMRadio
,FMRadio
and so on. You can useEqualsBuilder
from Apache commons for this. http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/builder/EqualsBuilder.htmlTypical
equals
method usingEqualsBuilder
looks like this. It uses reflection to compare equality.And while comparing, do not use
==
since it checks for reference equality, not logical equality. Useequals
method likeMain point: (moved from bottom of post)
You'll want to learn the difference between the tests
ObjA == ObjB
,ObjA.equals(ObjB)
, andObjA instanceof ClassB
.This method
Probably won't work as you expect. If you implement the
double getCurrentStation()
method inside the Radio base class (which you did), you can just do something like:But that's probably overkill, so you should just replace the
getCurrentStation()
calls inAutoRadioSystem
withselectedRadio.getCurrentStation()
.Similarly,
Won't work as you expect. You probably want something like
Also,
Can be simplified to
Since
o instanceof SomeClass
returnsfalse
ifo
isnull
.There are other issues as well.