2014-03-26 98 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 + '}'; 
    } 
} 
相關問題