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()
最初是十六进制类,用于将十六进制值转换为_numDec。但是,当我尝试使用this.getClass()时,我收到错误。有人可以帮忙吗?
答案 0 :(得分:0)
明确写出确切的类名。
if (a instanceof Hexadecimal) {
if (this._numDec > ((Hexadecimal) a)._numDec)
Output = 1;
if (this._numDec < ((Hexadecimal) a)._numDec)
Output = -1;
}
顺便说一下,如果a
不是Hexadecimal
对象,那么你的方法将返回0.它应该返回非零值。
答案 1 :(得分:0)
由于您对getClass()
的调用无效,因此您遇到问题,因为您使用了错误的转换语法。正确的语法形式为:
<type> target_var = (<type>) source_var;
其中<type>
应该是实际的Java类型(基元或对象)。有效的Java原语类型是(int,float,long,double,char,boolean ...)。有效对象类型由其完全限定名称指定,如果导入类型,则为简单名称。例如(String,Serializable,Object,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;
}
请注意,我已使用访问器方法替换了直接属性访问的使用。