使用对象的float属性的compareTo()方法。如何使用,为什么?

科琳娜:

我班上的代码,我不太了解。我在互联网上读到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();
//  };
}
GhostCat:

Comparable接口协定,分别的compareTo()方法是:

  • 从排序角度来看,当两个对象都被视为“相同”时,它将返回0
  • 它返回-1或+1(确切地说是任何负值或正值),以指示“其他”对象何时分别小于“此”对象。

换句话说:该方法提供了一种方法,可以定义可以排序的对象自然顺序。

如果按速度订购汽车确实有意义,那就完全不一样了。我会说:,那没有道理。如果有的话,您可以/应该定义外部“比较器”对象,这些对象定义了“订购”汽车的不同方式,然后SpeedComparator显然会按速度排序(但采用显式方式)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

覆盖compareTo()方法时,为什么要使用Comparable接口中的compareTo()?

如何使用compareTo()方法比较列表中的对象?

为什么我不能使用包含mysqli对象的属性?

为什么可以使用数组访问对象属性?

如何对列表对象的属性使用 Exists 方法

为什么在可比较的实现中的CompareTo中使用`this`?

Java Integer compareTo()-为什么要使用比较与减法?

为什么 compareTo 不使用日期返回结果

为什么以及如何使用promise()方法?

每次使用 compareTo() 方法具有不同的排序属性

当arraylist包含对象时,如何使用Junit / Java测试compareTo?

如何使用compareTo比较迭代器中的每个对象

使用 Windbg 仅获取对象的属性值的方法是什么?

使用map()时克隆对象属性的最佳方法是什么?

在FluentAssertions中,为什么应该使用方法而不是属性?

为什么VS 2017建议使用方法替换属性?

为什么float无法与(x,y)值数组一起使用?JavaScript对象与数组?

为什么要使用其属性绘制多个对象,而第二个对象使用先前的对象值?

为什么python为什么在“。”之后的对象和方法名称之间允许使用空格。

如果我使用超类来初始化子类对象,为什么该对象具有子类的属性,但是具有超类的方法呢?

为什么在Java float比较中使用Float.floatToIntBits()?

使用compareTo实现equals方法

如何编写比较对象的compareTo方法?

如何使用 CompareTo() 和 TreeSet()

为什么io模块对象没有属性'RawIOBase',尽管我正在使用python 2.6

使用对象分解分配时,为什么将属性“名称”强制转换为字符串?

为什么在替换原始原型对象后仍可以使用旧的原型属性

为什么我的内部对象属性名称不使用驼峰式大小写?

为什么对对象setState使用ES6计算属性语法?