有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

每次迭代只调用一次java方法

我正在运行一个模拟,其中数组中的对象通过以下三种方法移动。我的模拟经历了多次迭代(大约30次)。这意味着我要运行move()30次


共 (2) 个答案

  1. # 1 楼答案

    以下是一些其他方法:

    1. 给每个动物一个额外的整数字段,该字段包含它移动到的最后一次迭代(否),而不是布尔值

    2. 有2个ecosystem数组,一个表示“此迭代”,另一个表示“最后一次迭代”。在新迭代开始时翻转它们并清空“this iteration”数组,或者只分配一个新数组并将旧数组GC化。

  2. # 2 楼答案

    如果希望每个动物在每次迭代中只移动一次,则需要标记哪些动物已经移动

    现在,整个生态系统类只有一个布尔变量,这还不足以标记每个移动的对象

    您可以使用集合来存储已移动的动物

    将其添加到生态系统类中:

    private Set<Animal> alreadyMoved;
    

    然后在每个周期的开始,创建一个新的集合,从头开始:

    alreadyMoved = new HashSet<Animal>();
    

    然后在移动方法中:

    public synchronized void move() {
    
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < column; j++) {
    
                if (ecosystem[i][j] != null) {
    
                    if (!alreadyMoved.contains(ecosystem[i][j]) {
    
                         // move it
    
                         alreadyMoved.add(ecosystem[i][j]);
    
                    }
    
                }
    
            }
        }
    }