HashMap<String,Integer> hm1 = new HashMap<String,Integer>
HashMap<String,Integer> hm2 = new HashMap<String,Integer>
我希望循环使用字母表,并根据数字在文本中的出现次数添加“a-z”。我有这个完全工作,但我现在正在改变这一点。我希望它通过两个哈希映射,例如'a'转到hm1,'b'转到hm2,'c'转到hm1。 'd'去了hm2。所以每一个人都会改变。我一直在尝试这样做几个小时而且很挣扎。
我试图通过访问值的索引并尝试进行模数来做到这一点,如果它是例如然后只做0-25,然后将偶数索引添加到一个散列映射,将奇数索引添加到另一个散列映射。这样我就可以得到所有其他字母。但似乎无法让这个工作,非常令人沮丧!
编辑: 例如:
for ( char a = 'a'; a < z; a++){
for ( int i = 0; 0<25; i++){
h1.put(a,i);
}
}
如果我想要上面这样做,而不是全部在一个hashmap中,超过两个hashmap,所以一个做a,c,e,另一个做b,d,f等等...但是这些值不是那么明显0-25但可能很大。
答案 0 :(得分:1)
双循环并不能完成您的想法。 对于a的每个值,你执行内部循环25次,这会使你把每个字符都作为值25.而不是内部循环,你应该有一个在char循环外初始化并在其内部递增的计数器变量。
答案 1 :(得分:1)
你可以得到密钥的第一个字母,得到它的int值(记住在java中,一个字符是一个int值),并得到它的模数2.这样的东西:
private void putValue(String key, Integer value) {
int firstLetterInt = (int) key.charAt(0);
if (firstLetterInt % 2 == 0) {
hm1.put(key, value);
}
else {
hm2.put(key, value);
}
}
...
putValue("a", 66);
putValue("b", 100);
更一般的情况是拥有地图列表:
List<Map<String, Integer>> maps;
正确初始化地图,您的putValue
将如下所示:
private void putValue(String key, Integer value) {
int firstLetterInt = (int) key.charAt(0);
maps.get(firstLetterInt % maps.size()).put(key, value);
}