java - 通过多态交换对象的位置

标签 java polymorphism swap

我正在尝试解决 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/

相关文章:

JavaFx 元素未绑定(bind)到 fx :id 上的 Controller 变量

java - 如何获取BIRT中前10个值

C++:交换指向的变量

azure - Azure 应用服务交换完成时通知 Slack

java - 是什么让其他语言在快速开发方面比 Java 更快?

java - 在 if 语句中格式化多个 'or' 条件的最佳方法

Java 多态性——根据子类型选择正确的方法

c++ - 接口(interface)的虚拟析构函数

java - 为什么我可以创建一个父类类型的变量

algorithm - 交换整数效率