2011-09-21 95 views
2

我试图重写可比正是如此:java的实现比较两个元素

public int compareTo(Object other) {   
    if(other.getlength() > this.getlength()){ 
     return 1; 
    } else if (other.getlength() < this.getlength()){ 
     return -1; 
    } else { 
     if (other.getVal() > this.getVal()){ 
      return 1; 
     } else { 
      return -1; 
     } 
    } 
} 

我希望发生的,是对长度的第一排序列表中,如果长度是一样的,我希望那些相同的长项目按其价值进行排序(到位)。但是我的实现工作不正常。任何人都可以看到我做错了什么?

我的结果是:

a b = 3 
a b c = 1 
a b c = 1 
a b = 2 
a b = 1 

我想要的结果是:

a b c = 1 
a b c = 1 
a b = 3 
a b = 2 
a b = 1 
+1

如果长度和Val相同会怎么样?你永远不会返回0. –

+1

我不明白你的问题:(( –

+0

我试过else,在else循环内返回0,即如果other.getVal()== this.getVal()那么它将返回0,但结果相同 – Neutralise

回答

2

尽可能避免逻辑。认真 - 在可行的情况下,使用算术来避免if/else。它往往更可靠。在这种情况下:

public int compareTo(Object o) {   
    int ret = other.getlength() - this.getlength(); 
    if (ret == 0) { 
    ret = other.getVal() - this.getVal(); 
    } 
    return ret; 
} 
+0

完美。谢谢,还有一个不错的提示。 – Neutralise

0

它不是从你的话该列表将已排序或不清晰。但你可以通过比较长度后对列表进行排序来处理。但在你明显做错的事情上是object.getValue()...这没有意义,你必须遍历这两个列表并比较值,以得出它们是否相等。

如果没有例子对上面的评论抱歉,这是不明显的,这是不可能与你的比较器有这个结果。你的逻辑看起来对我很正确。但是,如果合并w00t的注释也是一个好主意,否则你将有一个<'b以及a> b并且可能导致运行时错误。请检查比较器是否正确应用于您的排序功能(对象)。

+0

w00te的评论有正确的答案。您可能想删除您的编码。 –