我有一个HashMap。这个散列图只包含关键字'''' s'' w'。我想做的是从这个hashmap中随机选择一个键,但前提是它的对应值是真的。
我已经为我编写了一个函数来完成这个功能,它确实是我需要的。现在我想尽可能地压缩我的代码,同时仍然保持相同的功能。
首先我要告诉你的是我如何为上下文创建我的hashmap:
HashMap<String, Boolean> potentialMoves2 = new HashMap<String, Boolean>();
potentialMoves2.put("n", true);
potentialMoves2.put("e", true);
potentialMoves2.put("s", true);
potentialMoves2.put("w", true);
接下来是相关代码:
private void randomlyMoveCharacter(double x, double y, Character character){
List<String> myArrayList = new ArrayList<String>();
for(Map.Entry<String,Boolean> mySet : character.potentialMoves2.entrySet()){
if(mySet.getValue().equals(true)){
myArrayList.add(mySet.getKey());
}
}
String direction = myArrayList.get(new Random().nextInt(myArrayList.size()));
if(direction.equals("n")){
character.mapY++;
character.hasMoved = true;
}
if(direction.equals("e")){
character.mapX++;
character.hasMoved = true;
}
if(direction.equals("s")){
character.mapY--;
character.hasMoved = true;
}
if(direction.equals("w")){
character.mapX--;
character.hasMoved = true;
}
}
我非常确信此功能的很大一部分可以用一行代码中的速记写入。我知道至少所有if语句都可以重写为更短。理想的是,而不是具有强烈定义的ArrayList对象,而不是具有永远不会被初始化的临时Array []。我的意思是对调用&#34; toArray()&#34;的代码执行计算。功能
附注 我知道有一个更好的方法可以做我想做的事情。也许使用哈希地图是一个糟糕的主意。也许一般使用字符串是愚蠢的。我完全清楚有一种更有效的方法可以做到这一点。话虽如此,我愿意接受建议;但是,我仍然想知道如何使用更少的行编写我的代码。
答案 0 :(得分:0)
错误的数据结构。您只需要Set
当前合法的举动。我还会将路线设为Enum
而不是String
,这会使Set
成为EnumSet
,并使用切换语句而不是if
链