编辑:我可能应该提到我对 Java 编程非常陌生。大约两周前,我刚开始学习这种语言。
我试图寻找这个问题的答案,但到目前为止我还没有找到答案,所以这就是我在这里问它的原因。
我为 Dungeons and Dragons Initiative Tracker 编写了 Java 代码,并且我使用 TreeMap 来实现对条目进行排序的能力。我对java还是很陌生,所以我不知道那里的一切。
我的问题是,当我有两个相同的键时,树会合并这些值,使得其中一个值不再存在。我知道这可能是可取的行为,但就我而言,我不能发生这种情况。我希望有一个优雅的解决方案来解决这个问题。到目前为止,我所拥有的是:
TreeMap<Integer,Character> initiativeList = new TreeMap<Integer,Character>(Collections.reverseOrder());
Character [] cHolder = new Character[3];
out.println("Thank you for using the Initiative Tracker Project.");
cHolder[0] = new Character("Fred",2);
cHolder[1] = new Character("Sam",3,23);
cHolder[2] = new Character("John",2,23);
for(int i = 0; i < cHolder.length; ++i)
{
initiativeList.put(cHolder[i].getInitValue(), cHolder[i]);
}
out.println("Initiative List: " + initiativeList);
Character 是我定义的一个类,用于跟踪玩家的角色名称和主动值。
目前的输出是这样的:
Initiative List: {23=John, 3=Fred}
我考虑过使用带有某种 subCollection 的 TreeMap,但我也会遇到类似的问题。我真正需要做的只是找到一种禁用合并的方法。谢谢你们能给我的任何帮助。
编辑:在龙与地下城,一个角色掷一个 20 面的骰子,然后将他们的主动模式添加到结果中以获得他们的总主动权。有时两个玩家可以获得相同的值。我考虑过像这样格式化密钥:
Key = InitiativeValue.InitiativeMod
因此,对于 Sam 来说,他的密钥是23.3,而 John 的密钥是23.2。我知道我需要将键类型更改为 float 而不是 int。
然而,即使有这两个玩家也可以拥有相同的主动模式并掷出相同的主动值。实际上,这种情况发生的次数比你想象的要多。例如,
假设彼得和斯科特都加入了游戏。他们都有 2 的先攻修正值,并且他们都在 20 面的骰子上掷出 10。这将使他们的倡议值都为 12。
当我将它们放入现有地图时,它们都需要显示,即使它们具有相同的值。
Initiative List: {23=John, 12=Peter, 12=Scott, 3=Fred}
我希望这有助于澄清我需要什么。