java - 如何使用 Token 作为参数实现 compareTo 方法

标签 java

我不知道我的教授要求的时候是什么意思

包含标记的字符串。我是这样做的:

String input;
String[] token=input.split(" ");

int compareTo(BSTNode) – 将 this 对象与参数化对象进行比较。首先,比较对象的String成员;如果它们不相等,则返回适当的值。如果 String 0 成员相等,则比较 int 成员并返回适当的值。

我的 compareTo 方法如下所示。

public int compareTO(BSTNode token){
  if(this.token.equals(token.BSTNode.getToken())){
     if(this.count==count.BSTNode.getCount()){
        return 1;
     }
     else{
        return 0;
     }
     return 1;
  }
  else{
     return 0;
  }
} 

我不确定我在这方面做的事情是否正确

最佳答案

嗯,部分是。

compareTo 通常用于整理事物,所以您不想只返回 0 或 1。如果您有 myObject.compareTo(anotherObject),那么约定是如果它们匹配则返回 0,一个负数如果 myObject 出现在 anotherOBject 之前,则为数字;如果 myObject 出现在 anotherObject 之后,则为正数。

所以如果我们的对象是字符串,那么:

"A".compareTo("A") = 0,
"A".compareTo("B") = -1,
"B".compareTo("A") = 1.

它们可能不是 -1 和 +1,它们可以是任何负数或正数。这仅是示例!

您对“ token ”的想法是正确的。标记只是表达您感兴趣的部分的一种奇特方式。因此在一个句子中,“标记”可以是一个词。在等式中,它可能是一项。

最后,如果您使用的是字符串,这对您来说应该很容易实现——它们已经实现了 compareTo!调用现成的即可。

这里有一整套代码来演示。在这种情况下,类 BSTNode 并没有真正向原始字符串添加任何内容,但它有助于给出想法。请注意,大写字母位于小写字母之前,因为这是字符串的默认顺序。另外,请参阅还有第二个 compareTo 方法。它的工作原理与第一个一样好,尽管返回的数字不同。最后,请注意我实现了 Comparable 接口(interface)。这样排序就可以轻松进行。

public class BSTNode implements Comparable<BSTNode> {

    public String node;

    public BSTNode(String node) {
        this.node = node;
    }

    public static void main(String[] args) {
        String string = "This is the original string is it not?";

        // Tokenize and make nodes
        String[] tokens = string.split(" ");
        BSTNode[] nodes = new BSTNode[tokens.length];
        for (int i = 0; i < nodes.length; i++) {
            nodes[i] = new BSTNode(tokens[i]);
        }

        // Original
        for (int i = 0; i < nodes.length; i++) {
            System.out.println("Unsorted " + i + ": " + nodes[i]);
        }
        System.out.println();

        // Compare two nodes
        System.out.println("Node[0] compared to Node[1] = "
                + nodes[0].compareTo(nodes[1]));
        System.out.println("Node[1] compared to Node[0] = "
                + nodes[1].compareTo(nodes[0]));
        System.out.println("Node[1] compared to Node[5] = "
                + nodes[1].compareTo(nodes[5]));
        System.out.println();

        // Sort (only possible thanks to compareTo)
        Arrays.sort(nodes);
        for (int i = 0; i < nodes.length; i++) {
            System.out.println("Sorted   " + i + ": " + nodes[i]);
        }

    }

    @Override
    public int compareTo(BSTNode t) {
        return this.node.compareTo(t.node);
    }

    public int compareTo2(BSTNode t) {
        String a = node;
        String b = t.node;

        if (a.compareTo(b) < 0) {
            return -1;
        } else if (a.compareTo(b) == 0) {
            return 0;
        } else {
            return 1;
        }
    }

    @Override
    public String toString() {
        return "BSTNode{" + "node=" + node + '}';
    }
}

关于java - 如何使用 Token 作为参数实现 compareTo 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22663769/

相关文章:

java - 使用 Retrofit 从 json 获取计时信息

java - Spring 批处理 csv :Adding multiple headers to csv

java - Tomcat 8 : Invalid keystore format

java - 如何从上层类获取数据

java - org.openqa.selenium.NoSuchElementException : Returned node (null) was not a DOM element when trying to locate card-fields-iframe by CssSelector

java - 在 Firebase 数据库中读取和写入数据

java - 如何更改当前代码以检查输入是否为字符串类型?

java - Google App Engine 上的 key 是有序的

java - 接口(interface) java.util.Map 是否覆盖 Object 类中的 hashCode() 和 equals()

java - 如果没有指定变量来接受返回值,那么返回值会去哪里?