compareTo()方法java表现得很奇怪

时间:2012-09-12 02:48:12

标签: java object comparison compareto

嗨我无法让这个工作我在这里得到一个错误与我的对象比较...我怎么能把英寸转换成一个字符串(我从来没有使用比较除了字符串以外的任何东西),或使用比较运算符比较intigers,

Object comparison = this.inches.compareTo(obj.inches);

这是我到目前为止的代码

import java.io.*;
import java.util.*;
import java.lang.Integer;
import java.lang.reflect.Array;

 public class Distance implements Comparable<Distance> {

private static final String HashCodeUtil = null;
private int feet;
private int inches; 
private final int DEFAULT_FT = 1;
private final int DEFAULT_IN = 1;

public Distance(){
    feet = DEFAULT_FT;
    inches = DEFAULT_IN;
}
public Distance(int ft, int in){
    feet = ft;
    inches = in;
}

public void setFeet(int ft){
    try {
        if(ft<0){
            throw new CustomException("Distance is not negative");

        }

    }
    catch(CustomException c){
        System.err.println(c);
        feet =ft;
    }
}

public int getFeet(){
    return feet;
}

public void setInches(int in){

    try
    {
        if (in<0)
            throw new CustomException("Distance is not negative");
        //inches = in;
    }
    catch(CustomException c)
    {
        System.err.println(c);
        inches = in;
    }

}

public int getInches(){
    return inches;
}


public String toString (){
    return "<" + feet + ":" + inches + ">";

}

public Distance add(Distance m){
    Distance n = new Distance();
    n.inches = this.inches + m.inches;
    n.feet = this.feet + m.feet;

    while(n.inches>12){
        n.inches = n.inches - 12;
        n.feet++;
    }

    return n;
}

public Distance subtract(Distance f){
    Distance m = new Distance();
    m.inches = this.inches - f.inches;
    m.feet = this.feet - f.feet;
    while(m.inches<0){
        m.inches = m.inches - 12;
        feet--;

    }

    return m;
}


@Override
public int compareTo(Distance obj) {
    // TODO Auto-generated method stub

    final int BEFORE = -1;
    final int EQUAL = 0;
    final int AFTER = 1;

    if (this == obj) return EQUAL;

    if(this.DEFAULT_IN < obj.DEFAULT_FT) return BEFORE;
    if(this.DEFAULT_IN > obj.DEFAULT_FT) return AFTER;

    Object comparison = this.inches.compareTo(obj.inches);
    if (this.inches == obj.inches) return compareTo(null);

    assert this.equals(obj) : "compareTo inconsistent with equals";

    return EQUAL;

}

@Override public boolean equals( Object obj){
    if (obj != null) return false;
    if (!(obj intanceof Distance)) return false;

    Distance that = (Distance)obj;

            ( this.feet == that.feet &&
            this.inches == that.inches);
            return true;
            else
            return false;
}


 @Override public int hashCode(int, int) {
    int result = HashCodeUtil.inches;
    result = HashCodeUtil.hash(result, inches );
    result = HashCodeUtil.hash(result, feet);
    ruturn result;
   }

2 个答案:

答案 0 :(得分:1)

您正在比较对象引用。尝试比较对象值;覆盖hashCode()或比较字段值。

@Override
public int compareTo(Distance obj) {
    ....
    if (this == obj) return EQUAL; <--- This
    ...
}

答案 1 :(得分:1)

这一行:

Object comparison = this.inches.compareTo(obj.inches);

您正试图取消引用int,一种原始类型。编译器应该给您一个错误:您只能使用点Objects取消引用.

我不确定您希望这个compareTo代码做什么,但此时,为了比较原始类型,您应该使用==

 if (this.inches == obj.inches) return compareTo(null);

请注意,在这一行:if (this == obj) return EQUAL;您正在比较对象引用,这可能是您想要的,也可能不是。由于您的课程未覆盖equals方法,因此此比较等同于this.equals(obj)