【发布时间】:2018-01-23 16:17:46
【问题描述】:
我正在创建一个应用程序,我在其中使用遗传算法(尚未实现)使生物跟随食物并避开障碍物。
我在我的模拟类(魔法发生的地方)中有一个存储所有生物的数组列表。需要注意的是,arraylist 充满了抽象类对象,而我的生物都是 Creature 的子类。
我的问题是:我怎样才能制作另一个 ArrayList 或类似的东西,我可以在其中迭代 arraylist 并提取特定的子类?我看了看,由于 java Collections 的工作方式,我似乎没有办法这样做。是否有任何解决方法或某些库可以让我做到这一点?
拥有单独的列表对我来说很重要,因为我需要将行为应用于不同种类的生物并根据生物的“dna”对它们进行权衡。 整个项目的 GitHub 仓库:https://github.com/Jamesinvi/Animosity/tree/master/Animosity
我试过了,但我得到了所有生物的列表,因为它们都是 Creature 类
//in PSEUDOCODE i would like to do this:
new ArrayList newlist=new ArrayList<Creature>();
for(Creature old:oldList){
if (old instanceof CreatureSubclass){
newlist.add(old);
}
}
免责声明:我是一名学生,如果这是一个愚蠢的问题,请原谅我,但我对此有点挣扎。感谢您的帮助:)
ArrayList <Creature>oldlist=new ArrayList<Creature>();
ArrayList <Creature>newlist=new ArrayList<Creature>();
for(int i=0;i<oldlist.size();i++){
if (oldlist.get(i) instanceof CreatureSubclass){
newlist.add(oldlist.get(i));
}
}
【问题讨论】:
-
你试过了,但是你……什么?使该代码成为可编译的真正 Java 代码,您将得到答案(访问者模式会更简洁,但您可以从它开始)
-
...遍历数组列表并提取特定的子类... - 你为什么要这样做?我问是因为这通常表明存在设计错误。您应该能够为对象本身添加足够的功能,这样您就不需要这样做了。
-
我的生物有一种根据权重计算转向向量的方法。我将我希望计算其力的所有生物都传递给该方法。拥有单独的列表意味着我可以更重视对某一类生物产生的力量,而不是另一类生物产生的力量。 @OldCurmudgeon
-
我试过这个,但我得到了所有生物的列表,因为它们都是 Creature 类:不,你没有尝试这个,因为这段代码无法编译.发布您实际尝试过的内容。
-
@JamesKarran 也许你可以在你的某个类的生物中改变你的计算转向向量方法,这样它就可以让它们对生成的力更加重要.
标签: java list arraylist collections simulation