2014-03-26 78 views
2

我不知道我的教授在请求时的含义如何实现使用令牌作为参数的compareTo方法

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

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

int compareTo(BSTNode) - 将此对象与参数对象进行比较。首先,比较对象的字符串成员;如果它们不相等,则返回适当的值。如果字符串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; 
    } 
} 

我不知道如果有什么我做的是正确的这一

回答

0

嗯,在部分肯定。

compareTo通常用于按顺序放置东西,因此您不想只返回0或1.如果您有myObject.compareTo(anotherObject),那么约定将返回0,如果它们匹配,则a如果myObject出现在anotherObject之前,则为负数,如果myObject出现在anotherObject之后,则为正数。

所以,如果我们的对象是字符串,然后:

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

他们可能不会在-1和+1,它们可以是任何消极或积极的。这仅仅是例子!

您对“标记”的想法是正确的。标记只是说出你感兴趣的部分的一种奇特的方式。所以在一个句子中,“标记”可能是一个词。在一个等式中,它可能是一个术语。

最后,如果你正在使用字符串,这应该很容易实现 - 它们有一个已经实现的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 + '}'; 
    } 
} 
相关问题