搜索

2011-04-20 56 views
1

您好,我有我需要實現由嘗試字典......但現在我無法實現搜索方法的工程....我的代碼是在這裏搜索

public class TriesNode { 
String value; 
ArrayList<TriesNode> children = new ArrayList<TriesNode>(); 


String findNode(TriesNode root , String key){ 
    for (int i=0 ; i<key.length() ; ++i){ 
     char temp= key.charAt(i); 
     if (!(root.children.equals(temp))) 
      return null; 
     else 
      root = root.children.value.equals(temp); 
    } 
} 

在這段代碼我在else語句中有錯誤! 我想通過其中一個孩子來替換它的值,它的值與鍵(temp)的第一個字符相似,但是我不能在「else語句」中執行此操作...以及爲什麼我無法訪問孩子的價值?

回答

0

好的,root是TriesNode類型,但root.children不是同一類型,這就是問題所在。您不能分配不同類型的值。您必須聲明一個root.children類型的變量,然後分配該值。要直接分配root.children根的價值,你必須做到:

root.Add(root.children) 

或多或少...

+0

root.Add(root.children) 在此代碼根是由它的孩子一個替代???? – Rojin 2011-04-20 07:24:53

+0

我想用一個有正確值的孩子來代替root,但是當我寫「children.value」時,我無法訪問太多的值。我該怎麼辦? – Rojin 2011-04-20 07:28:06

+0

你有一個arraylist,所以你將不得不挑選其中一個children.get(i)//這裏我是你想要得到的位置 – 2011-04-20 07:37:42

0

根= root.children.value.equals(臨時)犯規分配root.child到因爲你檢查它是否等於臨時值,所以它被賦值爲真或假。

也java不允許你有if語句返回if狀態的不同類型的值。

這將返回鏈中的最終根,是您尋找的價值?

嘗試

 TriesNode findFinalRoot(TriesNode root, String key){ 
         if(key.length() == 0) 
       return root; 
     for(int x = 0 ; x <root.children.lenth(); x++) 

      if (key.charAt(0) == root.children.get(x).charAt(0)){ 
      findFinalRoot(root,key.subString(1)); // here you loss first character  
}  
+0

我試着檢查key的第一個字符是否是其中一個兒童然後由這個孩子替換根,然後比較由新根的孩子的關鍵字的第二個字符.... 我有這段代碼在python中,但我不能將它轉換爲java 「def find(node,key): 在關鍵字符: 如果字符不是在node.children: 回報無 其他: 節點= node.children [字符] 回報node.value」 – Rojin 2011-04-20 07:38:23

+0

確定你需要做的就是經過全陣列什麼孩子們一個接一個地檢查一下這個值是否一樣。我會改變我的答案,以反映我在這裏的情況 – 2011-04-20 07:40:30

+0

非常感謝,它對我真的很有幫助 – Rojin 2011-04-20 08:14:44