使用instanceof搜索Arraylists以获取用户查询JAVA

时间:2014-10-22 14:48:02

标签: java inheritance arraylist instanceof

searchDatabase方法将接受查询字符串并搜索ArrayList以查看该对象是否包含查询(您的搜索应该不区分大小写!)作为名称或属于该对象类型(提示:使用instanceof来检查对象类型)。它将返回一个ArrayList,其中包含其对象包含查询字符串的所有值。

我需要查看查询是否与类名相同(例如Don / Talent / Overseer),如果是,则打印该类型的所有对象。如果它等于其中一个对象中的名称,那么我只是打印出该对象。我很困惑从这里做什么。我循环遍历数据库中的所有goons并检查它们是否是Don / Overseer / Talents的实例,如果他们正在检查用户查询是否等于对象类型,是否打印所有这些对象但是如果它不是然后检查它是否等于arraylist中“Dom”类型的任何对象的名称。

protected ArrayList<Goon> searchDatabase(String query)
{
    ArrayList<Goon> clone = new ArrayList<Goon>();
    for(Goon a : goonDB)
    {
        if(a instanceof Don)
        {
            if(query.equalsIgnoreCase("don"))
            {

            }
            else 
            {
                if(a.getName().equals(query))
                {

                }
            }
        }
        else if(a instanceof Overseer)
        {

        }

2 个答案:

答案 0 :(得分:0)

你的问题陈述含糊不清,这是我的假设:

  • Goon是Don / Talent / Overseer的父类(他们扩展/实施 它)。
  • 您接受代表对象或名称的查询 其中一个实现类中的属性。
  • 如果query是类型名称:在列表中返回该类型的所有对象。
  • 否则,检查它是否与name属性匹配:返回具有相同name属性的所有对象。 (虽然你说打印一个对象,我会忽略它,因为那时我会返回null并且会出现更多的需求问题)

我不想为你编写代码,因为这看起来像是一个家庭作业,你可以稍微挣扎一下,但这里有一个逻辑,你需要用来遵循上面的假设:< / p>

我首先检查查询是否是Don / Talent / Overseer。如果是,则遍历列表并将该类型的所有对象(instanceof)添加到克隆列表中。如果不是,则浏览整个列表并添加名称与查询匹配的列表。退回清单。

答案 1 :(得分:0)

虽然我看到你已经弄明白了。我仍然想发布我的答案:P(否则我什么都没做)。也许其他有相同问题的人可以使用它。我认为Don和Overseer顺便实施了Goon。作为一个解决方案,我只是在数据库上循环检查查询和类名是否匹配。

我还添加了一个主要方法来测试搜索代码。正如您在输出中看到的那样,只打印了Don's

package stackoverflow.question_26510341;

import java.util.ArrayList;
import java.util.Iterator;

public class Search {

static ArrayList<Goon> goonDB = new ArrayList<Goon>();

public static void main(String[] args){
    goonDB.add(new Don());
    goonDB.add(new Don());
    goonDB.add(new Overseer());
    ArrayList<Goon> list = searchDatabase("Don");
    for(int i = 0; i < list.size(); i++){
        System.out.println(list.get(i));
    }
}

protected static ArrayList<Goon> searchDatabase(String query){
    ArrayList<Goon> clone = new ArrayList<Goon>();
    Iterator<Goon> iterator = goonDB.iterator();
    Goon temp;
    while(iterator.hasNext()){
        if(query.equals("Don") && (temp = iterator.next()) instanceof Don){
            clone.add(temp);
        }else if(query.equals("Overseer") && (temp = iterator.next()) instanceof Overseer){
            clone.add(temp);
        }//etc...
    }
    return clone;
}

private static interface Goon{
}

private static class Overseer implements Goon{
}

private static class Don implements Goon{
}

}