我的目标是搜索多树结构以查看哪个项目与我正在寻找的名称匹配。我通过在我需要搜索的每个类中实现一个名为 SearchByName 的接口来做到这一点。
包含我的数据的方式是我有一个名为partys 的ArrayList,它由Party 对象组成,每个Party 对象在一个名为cave 的对象中都有一个名称,每个Party 都有一个ArrayList 称为成员,由Creature 对象组成,每个对象都有一个名称,每个生物有一个名为 artifacts 的 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;
}
这是我第一次尝试搜索课程,而不是在顶层做所有事情。