繁体   English   中英

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

[英]How to implement a compareTo method using the Token as a parameter

我不知道我的教授问他的意思

包含令牌的字符串。 我这样做如下:

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

int compareTo(BSTNode)–比较此对象与参数对象。 首先,比较对象的String成员; 如果它们不相等,则返回适当的值。 如果String 0members相等,则比较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,可能是负数也可能是正数。 这仅是示例!

您使用“令牌”的想法是正确的。 令牌只是表达您感兴趣的部分的一种奇特的方式。因此在句子中,“令牌”可能是一个单词。 在等式中,它可能是一个术语。

最后,如果您使用的是String,则应该易于实现-它们已经实现了compareTo! 您可以致电现成的。

这是一堆完整的代码来演示。 在这种情况下,类BSTNode不会真正向原始字符串添加任何内容,但可以帮助您实现这一想法。 请注意,大写字母位于小写字母之前,因为这是字符串的默认顺序。 此外,请参见还有第二个compareTo方法。 尽管返回的数字有所不同,但它的效果与第一个一样好。 最后,请注意我实现了Comparable接口。 这样便可以轻松进行排序。

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 + '}';
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM