2013-07-09 86 views
0

我的目標是搜索多樹結構以查看哪個項目與我正在查找的名稱匹配。我通過實現一個接口,我在每個需要搜索的類中實現一個名爲SearchByName的接口。SearchableByName接口不斷返回null

我的數據被包含的方式是我有一個ArrayList,其中包含Party對象的ArrayList,每個對象都有一個名稱被稱爲洞穴的物體,每個締約方都有一個被稱爲成員的ArrayList,每個成員都有一個名字,每個生物都有一個名爲artifacts的ArrayList,這些artifacts由Artifact對象組成,每個對象都擁有一個名稱;

每次搜索時,即使應該有匹配,搜索也會返回null。

這是我執行搜索代碼:

for (Party p : SorcerersCave.theCave.parties){ 
       SearchableByName foundItem = p.searchByName(name); 
       if (foundItem != null) { 
        GenerateInterface.theGame.printOutput("\t" + foundItem); 
       } else { 
        GenerateInterface.theGame.printOutput("Item NOT FOUND"); 
       } 
       break; 
      } 

這是我實現的接口:

interface SearchableByName { 
public SearchableByName searchByName (String name); 
public String getName(); 

}

,這是該接口被黨的實施:

public SearchableByName searchByName (String n) { 
    if (getName() == n) { 
     return this; 
    } else { 
     for (Creature c : members) { 
      SearchableByName found = c.searchByName(n); 
      if (found != null) { 
       return found; 
      } 
     } 
    } 
    return null; 
} 

這是生物正在實現的接口:

public SearchableByName searchByName (String n) { 
    if (getName() == n) { 
     return this; 
    } else { 
     for (Artifact a : artifacts) { 
      SearchableByName found = a.searchByName(n); 
      if (found !=null) { 
       return found; 
      } 
     } 
    } 
    return null; 
} 

最後我實現工件的接口:

public SearchableByName searchByName (String n) { 
    return (getName() == n) ? this : null; 
} 

這是我第一次嘗試在搜索到類,而不是做的一切頂層。

+0

'if(getName()== n)'是你的問題... –

回答

1

更改如下行:

getName().equals(n); 

但是確保的getName永遠不能爲null,如果它可以爲空,把空檢查。