2

嗨,我无法让它工作我在我的对象比较中遇到错误......我怎么能将英寸转换为字符串(我从未使用过与字符串以外的任何东西进行比较),或者使用比较运算符来比较整数,

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;
   }
4

2 回答 2

1

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

@Override
public int compareTo(Distance obj) {
    ....
    if (this == obj) return EQUAL; <--- This
    ...
}
于 2012-09-12T02:51:48.473 回答
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).

于 2012-09-12T02:58:27.600 回答