嗨我无法让这个工作我在这里得到一个错误与我的对象比较...我怎么能把英寸转换成一个字符串(我从来没有使用比较除了字符串以外的任何东西),或使用比较运算符比较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;
}
答案 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)
。