0
public int compareTo(Object a) {  
    int Output = 0;  
    if(this.equals(a))  
        Output = 0;  
    if(a instanceof this.getClass()) {  
        if(this._numDec > ((this.getClass())a)._numDec)   
        Output = 1;  
        if(this._numDec < ((this.getClass())a)._numDec)   
        Output = -1;  
    }  
    return Output;  
}

你好。我的 CS 老师告诉我们的班级创建一个函数,该函数将确定两个值中的哪一个更大,如果前者较大则输出 1,如果它们相等则输出 0,如果前者较小则输出 -1。this.getClass()最初是一个 Hexadecimal 类,用于将 Hexadecimal 值转换为 _numDec 。但是,当我尝试使用 this.getClass() 时出现错误。有人可以帮忙吗?

4

2 回答 2

0

您没有遇到问题,因为您的调用getClass()不起作用,您遇到问题是因为您使用了不正确的转换语法。正确的语法格式如下:

<type> target_var = (<type>) source_var;

where<type>应该是一个实际的 Java 类型(原始或对象)。有效的 Java 原始类型是(int、float、long、double、char、boolean ...)。有效的对象类型由它们的完全限定名称指定,如果类型被导入,则由简单名称指定。例如(字符串、可序列化、对象、JFrame ...)。

在您的代码中,这一行:

if(this._numDec > ((this.getClass())a)._numDec)

不会编译,因为您将转换指定为this.getClass(),这是一个动态表达式,而不是有效类型。

有几种方法可以实现您的真正目标,也就是确定提供的对象是否属于可以与当前对象进行比较的类型,然后执行比较。这是一种这样的方式:

if(a instanceof Binary)) {
    if(this.getNumDec() > ((Binary)a).getNumDec())   
        Output = 1;  
    else 
        Output = -1;  
} else if(a instanceof Hexadecimal) {
    if(this.getNumDec() > ((Hexadecimal)a).getNumDec())
        Output = 1;
    else
        Output = -1;
}

请注意,我已将直接属性访问的使用替换为访问器方法。

于 2012-11-28T05:20:26.307 回答
0

明确写出确切的类名。

if (a instanceof Hexadecimal) {  
    if (this._numDec > ((Hexadecimal) a)._numDec)   
        Output = 1;  
    if (this._numDec < ((Hexadecimal) a)._numDec)   
        Output = -1;  
}

顺便说一句,如果a不是Hexadecimal对象,那么您的方法将返回 0。它应该返回非零。

于 2012-11-28T04:29:50.447 回答