0

我有一个包含 6 个框的列表(boxlist),每个框的计数为 1 个对象(num_objects)。每个框都存在于地理环境中(位于特定的纬度和经度坐标处):

    //iterate through each of the boxes in the list (6)
    for (int i = 0; i < boxlist.size(); i++){
        //get the first box... then second box... etc (call it target box)
        Box targetbox = boxlist.get(i);
        Context context = ContextUtils.getContext(targetbox);
        Geography<Object> geography = (Geography)context.getProjection("Geography");
        Geometry geom = geography.getGeometry(targetbox);
        //get the coordinates of the target box
        Coordinate coord = geom.getCoordinates()[0];

        //for each of the 6 boxes, get the number of objects in the target box
        double num = targetbox.getNum_objects();
        // print the number of objects in each box (1)
        System.out.println(num);

        //create random utility
        Random random = new Random();
        // create the same number of BoxObjects as the num_objects in the box and place them in the geography at the same location as the box they are in (take them out of the box)
        for (int j = 0; j < num; j++) {
            boolean randomBoolean = random.nextBoolean();
            boolean anotherBoolean = false;
            BoxObject obj = new BoxObject(context, geography, randomBoolean, anotherBoolean);
            context.add(obj);
            // move to the object to the same coordinates of its box
            geography.move(obj, new GeometryFactory().createPoint(coord));
        }   

  } 

我的循环正确地计算出有 6 个盒子,盒子中有 1 个对象,应该创建 6 个对象,但它会创建 12 个对象。我怎样才能解决这个问题?

注意:在实际模拟中,盒子可能有多个对象。

4

2 回答 2

1

我的问题是这段代码嵌套在一个代理类中。我有两个代理,它运行该方法两次,每个代理一次(产生双倍对象)。当我将此代码移动到主模型类时(因为从技术上讲,它与代理没有任何关系),它运行良好。

于 2015-02-26T21:43:24.360 回答
0

你有一个目标框,里面有一个对象。框目标框 = boxlist.get(i);

您还可以获得其中包含对象的目标框的上下文。上下文上下文 = ContextUtils.getContext(targetbox);

然后,您将另一个对象添加到同一上下文中。无论 BoxObject 做什么,当您将上下文传递给它时,它都应该从上下文中删除以前的对象,以便您在结果中只有新创建的对象。

于 2015-02-26T19:45:42.607 回答