2012-04-10 16 views
0

バイナリツリーに文字列を挿入する方法に問題があります。以下のコードは問題のメソッドです。基本的には、単語がまだツリーにない場合(BinaryTreeNode)、ツリー内にある場合はその頻度(count変数はBinaryTreeNode)が1つ増えます。私の問題は一時変数searchWordです。 Stringと定義するとタイプの不一致が発生し、タイプStringにはgetFrequency()というステートメントが定義されていません。ジェネリック型Tは、プレースホルダとしてのみ存在し、動作しません。したがって、それを何と定義すべきですか?バイナリツリー変数型の問題

buildBinaryTree方法:

public static void buildBinaryTree(String word) { 
    //if word is already in tree 
    if(wordTree.contains(word)) { 
     //find existing word node 
     T searchWord = wordTree.find(word); //problem here 

     //increment frequency by 1 
     searchWord.setFrequency(searchWord.getFrequency() + 1); 
    } else { 
     //add word to tree 
     System.out.println(word); 
     wordTree.addElement(word); 
    } 
} 

BinaryTreeNodeコンストラクタ:

/** 
* Creates a new tree node with the specified data. 
* @param obj the element that will become a part of the new tree node 
*/ 
BinaryTreeNode(T obj) { 
    element = obj; 
    left = null; 
    right = null; 
    frequency = 1; 
} 

周波数を取得/ setメソッド:

/** 
* Gets the frequency. 
* @return the frequency 
*/ 
public int getFrequency() { 
    return frequency; 
} 

/** 
* Sets the frequency. 
* @param frequency the frequency to set 
*/ 
public void setFrequency(int frequency) { 
    this.frequency = frequency; 
} 
+0

getFrequencyメソッドはどこで定義されていますか? –

+0

'BinaryTreeNode()' – lollercopter

答えて

1

チャットで話をした後、あなたは両方を持つクラスを定義する必要がありますplacの種類として使用するStringint eをバイナリツリーに置き換えて、型変数Tを置き換えます。次に、getString()などのメソッドを定義して、StringincrementFrequency()を返して周波数に追加します。バイナリツリーからオブジェクトを取得すると、これらのメソッドを呼び出すための正しい型になります。

+0

これを実行した後、「タイプの不一致:オブジェクトからBinaryTreeNodeに変換できません」というメッセージが表示されます。 'find()'は 'T '型のオブジェクトを返します。 – lollercopter

+0

あなたのワードツリーコードを投稿してください。 –

+0

'wordTree'はバイナリツリーです。私はあなたが "コードを投稿する"ということは、単なる1行の定義なので、何を意味するのか分かりません。バイナリツリークラスから特定のメソッドが必要ですか? – lollercopter