0

我的目标是搜索多树结构以查看哪个项目与我正在寻找的名称匹配。我通过在我需要搜索的每个类中实现一个名为 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;
}

这是我第一次尝试搜索课程,而不是在顶层做所有事情。

4

1 回答 1

1

更改以下行:

getName().equals(n);

但是请确保 getName 永远不会为空,如果它可以为空,请进行空检查。

于 2013-07-09T15:23:48.147 回答