每次迭代只调用一次java方法 1 周,5 日 Questions & Answers 100 我正在运行一个模拟,其中数组中的对象通过以下三种方法移动。我的模拟经历了多次迭代(大约30次)。这意味着我要运行move()30次
# 1 楼答案 以下是一些其他方法: 给每个动物一个额外的整数字段,该字段包含它移动到的最后一次迭代(否),而不是布尔值 有2个ecosystem数组,一个表示“此迭代”,另一个表示“最后一次迭代”。在新迭代开始时翻转它们并清空“this iteration”数组,或者只分配一个新数组并将旧数组GC化。
# 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]); } } } } }
# 1 楼答案
以下是一些其他方法:
给每个动物一个额外的整数字段,该字段包含它移动到的最后一次迭代(否),而不是布尔值
有2个
ecosystem
数组,一个表示“此迭代”,另一个表示“最后一次迭代”。在新迭代开始时翻转它们并清空“this iteration”数组,或者只分配一个新数组并将旧数组GC化。# 2 楼答案
如果希望每个动物在每次迭代中只移动一次,则需要标记哪些动物已经移动
现在,整个生态系统类只有一个布尔变量,这还不足以标记每个移动的对象
您可以使用集合来存储已移动的动物
将其添加到生态系统类中:
然后在每个周期的开始,创建一个新的集合,从头开始:
然后在移动方法中: