2

我正在compareTo为特定类的 Comparable Interface 编写方法。我需要取两个不同的字符串并比较它们,看看一个是否比另一个具有更大的价值。我通常会使用.compareTo(),但在这种情况下,它会给我一个错误并且无法正常工作。这就是我所拥有的:

public int compareTo(Object o) {
    if (name < ((AccountOwnerComparable) o).name)
        return -1;
    else if (name > ((AccountOwnerComparable) o).name)
        return 1;
    else
        return 0;

}

我知道我不能使用,< or >但这只是为了展示场景是什么。

4

4 回答 4

1

你只需要做:

name.compareTo(String_to_be_compare);

相比于

公共 int compareTo(对象 o)

将此字符串与另一个对象进行比较。如果 Object 是 String,则此函数的行为类似于 compareTo(String)。

注意:

返回

如果参数是按字典顺序等于该字符串的字符串,则值为 0;如果参数是按 字典顺序大于此字符串的字符串,则值小于 0 ; 如果参数是按字典顺序小于此字符串的字符串,则值大于 0 。来源

所以对于你的情况:

public int compareTo(Object o)
{
    AccountOwnerComparable obj = (AccountOwnerComparable) o;
    return obj.name.compareTo(this.name);
}

tw:实现可比较的接口,指定要比较的对象(通常是相同的类型),因为您没有指定接口与任何奇怪的对象进行比较的任何内容。

于 2012-12-02T17:49:28.983 回答
1

Comparable接口是通用的。你的类声明应该看起来像这样:

class AccountOwnerComparable implements Comparable<AccountOwnerComparable> {...

注意AccountOwnerComparable类型参数。有了这个,你会有

public int compareTo(AccountOwnerComparable other) {
    return name.compareTo(other.name);
}
于 2012-12-02T18:14:54.357 回答
1

您可能在投射时错过了括号或其他东西。试试下面的一段代码。

public int compareTo(Object o) {
    if (name.compareTo(((AccountOwnerComparable) o).name) > 0) {
        System.out.println("Greater");
        return -1;
    } else if (name.compareTo(((AccountOwnerComparable) o).name) < 0) {
        System.out.println("Lesser");
        return 1;
    } else {
        System.out.println("Equal");
        return 0;
    }

}
于 2012-12-02T18:16:12.167 回答
0

使用Integer.parseInt()方法。通过这种方式,您可以使用>or<并且它更冗长。我假设您想比较两个String包含数字的对象。虽然你没有写在问题中,但标题是这样写的。

于 2012-12-02T17:41:32.973 回答