2

こんにちは、これを機能させるのに問題があります。オブジェクト比較でここでエラーが発生します...インチを文字列にキャストするにはどうすればよいですか (文字列以外の比較を使用したことはありません)、または比較演算子を使用して 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;
   }
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 に答える