我班上的代码,我不太了解。我在互联网上读到compareTo()方法用于比较字符串和字符串,对象用于字符串,但是在我的代码中,它用于比较浮点数和字符串,我猜呢!您能否说明下面的代码中如何使用compareTo()方法,以及为什么在我们的案例中使用它?
package ro.ase.acs.classes;
import ro.ase.acs.interfaces.Mobility;
//Comparable is a generic interface; click add unimplemented methods ; the method will appear at the end of the class
public final class Car extends Vehicle implements Mobility, Cloneable,Comparable<Car> {
public static final int maxNbOfKm = 1_000_000;//it is static, in order to acces it use .
private EngineType engineType;
private float speed;
public Car() {
super();
engineType = EngineType.gas;
speed = 0;
}
public Car(String _name, EngineType _engineType, float _speed) {
super(_name, true);
engineType = _engineType;
speed = _speed;
}
@Override
public void Start() {
System.out.println("The " + engineType.toString() +
" car has started!");
}
@Override
public void Stop() {
System.out.println("The " + engineType.toString() +
" car has stopped!");
}
@Override
public void DisplaySpeed() {
System.out.println(String.format("The %s car runs with %f km/h",
engineType.toString(), speed));
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("The car named ");
sb.append(name);
sb.append(" has a(n) ");
sb.append(engineType.toString());
sb.append(" engine and is running with ");
sb.append(speed);
sb.append(" km/h");
return sb.toString();
}
@Override
public Object clone() throws CloneNotSupportedException {
Car c = (Car)super.clone();
c.engineType = engineType;
c.speed = speed;
return c;
}
@Override
public boolean equals(Object obj) {
if(!(obj instanceof Car)) {
return false;
}
else {
Car c = (Car)obj;
return name.equals(c.name);
}
}
@Override
public int hashCode()
{
return 31*name.hashCode()+13*(HasEngine()?1:0)+7*engineType.hashCode()+(int)speed*100;
}
public enum EngineType { gas, diesel, electric, hybrid }
@Override
public int compareTo(Car o) {
if(speed==o.speed)
{return 0;}
else if (speed>o.speed)
{
return 1;
}
else
{return -1;}
}
// public final int hashCode() {
// return engineType.hashCode();
// };
}
Comparable接口的协定,分别的compareTo()
方法是:
换句话说:该方法提供了一种方法,可以定义可以排序的对象的自然顺序。
如果按速度订购汽车确实有意义,那就完全不一样了。我会说:不,那没有道理。如果有的话,您可以/应该定义外部“比较器”对象,这些对象定义了“订购”汽车的不同方式,然后SpeedComparator显然会按速度排序(但采用显式方式)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句