这个问题比标题所说的要复杂一些。
我要做的是为游戏存储 {Object:Item} 的地图,其中 Object 代表橱柜,Item 代表橱柜的内容(即里面的物品)。
基本上我需要做的是按顺时针(正)旋转更新项目的值;虽然我不想在创建列表后以任何方式修改列表,但只需移动值 + 1 的位置。
我目前正在做我需要的几乎所有事情,但是,Object 的数量比 Item 的多,所以我使用 null 类型来表示空橱柜。但是,当我运行我的代码时,地图正在被修改(可能是在 for 循环中),反过来,元素被错误地覆盖,一段时间后可能会给我留下一个充满空值的列表(和空橱柜)
我目前所拥有的...
private static Map<Integer, Integer> cupboardItems = new HashMap<Integer, Integer>();
private static Map<Integer, Integer> rewardPrices = new HashMap<Integer, Integer>();
private static final int[] objects = { 10783, 10785, 10787, 10789, 10791, 10793, 10795, 10797 };
private static final int[] rewards = { 6893, 6894, 6895, 6896, 6897 };
static {
int reward = rewards[0];
for (int i = 0; i < objects.length; i++) {
if (reward > rewards[rewards.length - 1])
cupboardItems.put(objects[i], null);
else
cupboardItems.put(objects[i], reward);
reward++;
}
}
// updates the items in the cupboards in clockwise rotation.
for (int i = 0; i < cupboardItems.size(); i++) {
if (objects[i] == objects[objects.length - 2])
cupboardItems.put(objects[i], cupboardItems.get(objects[0]));
else if (objects[i] == objects[objects.length - 1])
cupboardItems.put(objects[i], cupboardItems.get(objects[1]));
else
cupboardItems.put(objects[i], cupboardItems.get(objects[i + 2]));
}
那么我该如何修改我的代码来更新,所以我得到以下结果..
======
k1:v1
k2:v2
k3:v3
k4:none
=======
k1:none
k2:v1
k3:v2
k4:v3
?