我目前正在编写电梯的仿真程序。因此,我需要创建一个ListMultiMap“ passengerFloorMap”来存储以下值:
现在,我需要重新整理“ passengerFloorMap”的键。这需要完成,以创建随机的到达乘客顺序。例如:首先有“ passengerFloorMap” {1 = [2,4],1 = [3,4],1 = [1,0],...}] >>
然后只是对键进行了改组,因为我想稍后再选择关联的值:
`private List<Integer> shuffleKeyList(){ keySet = new ArrayList<>(passengerFloorMap.keySet()); Collections.shuffle(keySet); return keySet; } ` Return example: [12, 130, 15, ...]
[之后,我创建了另一个函数来创建新的MultiMapList“ randomOrder”。此处应存储新的键顺序([12、130、15,...])。我也想从“ passangerFloorMap”获得这些键的关联值。因此结果应如下所示:randomOrder = {12 = [3,1],130 = [0,4],15 = [2,1],...}。为了做到这一点,我将改组后的列表存储到ArrayList中:
List<Integer> shuffledList = new ArrayList<>(); private List<Integer> shuffleKeyList(){ List<Integer> keySet = new ArrayList<>(passengerFloorMap.keySet()); Collections.shuffle(keySet); return keySet; } private void pickRandomPassanger(){ ListMultimap<Integer, Integer> randomOrder = ArrayListMultimap.create(); ArrayList<Integer> list = new ArrayList<>(); shuffledList = shuffleKeyList(); for (int i = 0; i < shuffledList.size(); i++){ liste.add(shuffledList.get(i)); } }
现在,我要用键(在洗牌后按新顺序)和关联的值填充“ randomOrder”。为此,我创建了一个for循环(在pickRandomPassenger中):3只是一个示例,将由正确的值替换]
for(int j = 0; j < liste.size(); j++){ randomOrder.put(liste.get(j), 3); }
所以现在问题来了。如果我调用randomOrder.put(liste.get(j),x),它将检索与调用randomOrder.put(liste.get(0),x)不同的值。同样,如果j = 0。这是我的输出:
keySet = [46, 39, 81, 38, 34, 87, 20, 71, 32,...] list = [46, 39, 81, 38, 34, 87, 20, 71, 32,...] randomOrder = {1=[3], 2=[3], 3=[3], 4=[3], 5=[3], 6=[3], 7=[3], 8=[3], 9=[3], ...]
但是,如果我打电话给
randomOrder.put(list.get(0), 3)
它检索:
randomOrder = {46=[3]}
我发现问题应该由内存引用引起。但是我不知道如何解决这个问题。希望你们中的某人可以提供帮助。
我目前正在编写电梯的仿真程序。因此,我需要创建一个ListMultiMap“ passengerFloorMap”来存储以下值:乘客startid的ID乘客destinationFloor的...
我想您想说的是,您希望第一个元素为46 = [3],而不是1 = [3]?