我正在尝试解决 Blockworld 问题的一个实例。基本上,NxN 网格包含 block A、B、C 和代理。只有Agent可以移动,如果途中遇到Block,那么它们的位置就会交换。例如,Agent(1, 0)向左走遇到B(0, 0) block ,则两者的新位置将是Agent(0, 0)和B(1, 0)。
我的 Agent 和 Block 类都是 Entity 的子类。
这是我的函数 swap()。它检查移动后,Agent 是否位于某个 Block 上,然后 Block 的新位置将是 Agent 之前的位置。
当我尝试使用多态性时,我尝试使用 (Block block : blockList) 并且它可以工作,但不能使用 (Entity en :EntityList) 。
有人能发现我犯的错误吗?
public void swap() {
for (Entity en : entityList) {
if (agent.position.equals(block.position) && (en instanceof Block)) {
System.out.print("Agent overlap block: " + en);
en.previousPosition = new Dimension(block.position.width, block.position.height);
en.setPosition(agent.previousPosition);
}
}
}
最佳答案
首先,你没有告诉if语句中的“ block ”来自哪里。 您可能需要做的是:
public void swap(){
for(Entity en:entityList){
if((en instanceof Block)&&(en.position.equals(agent.position)){
// ^here is "en" instead of block
System.out.println("Agent overlab block: "+en);
en.previousPosition=new Dimension(
en.position.width,
en.position.height);
en.setPosition(agent.previousPosition);
}
}
}
最后,您可以使用 java.awt.Point 代替 Dimension。 另外,您应该对“previousPosition”字段使用 setter 方法。
关于java - 通过多态交换对象的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20816800/