我的目标是搜索多树结构,以查看哪个项与我要查找的名称相匹配。我这样做是通过在我需要搜索的每个类中实现一个名为SearchByName的接口来实现的。
我的数据包含的方式是我有一个名为Party的PartyList,它由Party对象组成,每个对象都有一个名为cave的对象,每个Party都有一个名为Members的ArrayList,由每个都有一个名字的Creature对象组成,并且每个生物都有一个ArrayList,称为工件,由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();
}
这是在Party中实现的界面:
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;
}
这是在Creature中实现的界面:
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;
}
最后我在Artifact中实现了接口:
public SearchableByName searchByName ( String n ) {
return ( getName() == n ) ? this : null;
}
这是我第一次尝试搜索课程,而不是在顶层做所有事情。
答案 0 :(得分:1)
更改以下行:
getName().equals(n);
但是请确保getName永远不为null,如果它可以为null,则进行空检查。