Java中用for循环设置Agent位置遇问题:setLocation仅接受Point参数
解决方案
核心问题是你用的整数只是节点的标识,而setLocation()需要的是实际的坐标点对象(Point)。你需要先把每个整数节点映射到对应的Point坐标,再传入方法。这里给你两种可行的实现方式:
方式一:用Point数组直接对应节点索引
如果你的节点是连续的整数(0到9),直接创建一个Point数组,数组索引对应你的节点标识,数组元素是该节点的坐标:
// 先定义每个节点对应的坐标,根据你的实际场景修改x、y值 Point[] nodePoints = { new Point(0, 0), // 节点0的坐标 new Point(15, 0), // 节点1的坐标 new Point(30, 0), // 节点2的坐标 new Point(0, 15), // 节点3的坐标 new Point(15, 15), // 节点4的坐标 new Point(30, 15), // 节点5的坐标 new Point(0, 30), // 节点6的坐标 new Point(15, 30), // 节点7的坐标 new Point(30, 30), // 节点8的坐标 new Point(45, 15) // 节点9的坐标 }; // 遍历分配节点 for (int i = 0; i < nodePoints.length; i++) { if (agent.participant == i + 1) { agent.setLocation(nodePoints[i]); break; // 找到匹配的Agent后直接退出循环,提升效率 } }
方式二:用HashMap映射节点与坐标
如果你的节点标识不是连续整数,或者需要灵活修改映射关系,用HashMap更合适:
// 构建节点到Point的映射 Map<Integer, Point> nodeMap = new HashMap<>(); nodeMap.put(0, new Point(0, 0)); nodeMap.put(1, new Point(15, 0)); nodeMap.put(2, new Point(30, 0)); // 依次添加剩下的节点... // 原来的node数组保留,用来遍历匹配 int[] node = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; for (int i = 0; i < node.length; i++) { if (agent.participant == i + 1) { Point targetPoint = nodeMap.get(node[i]); if (targetPoint != null) { // 避免空指针 agent.setLocation(targetPoint); } break; } }
注意事项
- 你需要根据自己的业务场景,修改每个节点对应的
Point(x,y)坐标值,上面的示例只是参考。 - 如果你之前尝试创建Point列表没成功,大概率是没把节点标识和Point对象正确对应,或者在循环中没有正确引用列表里的元素。
内容的提问来源于stack exchange,提问作者Aqeel Tariq
相关产品推荐
相关产品推荐

