我正在尝试将一个带有char数组的hashmap作为值并将一个字符串作为键。我正在尝试打印出键和值,但不断获取数组超出范围的异常。我不确定问题是什么。 (另外我可能会尝试不正确地打印出地图;我有点像其他帖子一样)。有人可以帮我解决这个问题。谢谢你的帮助。这是我的代码:
public class MapExample {
public static void main(String[] args) {
Map<String,char[]> mp=new HashMap<String, char[]>();
char[] words = new char[2];
words[0] = 'a';
words[1] = 'b';
words[2] = 'c';
mp.put("1", words);
mp.put("2", words);
mp.put("3", words);
Set s=mp.entrySet();
Iterator it=s.iterator();
while(it.hasNext())
{
Map.Entry m =(Map.Entry)it.next();
int key=(Integer)m.getKey();
String value=(String)m.getValue();
System.out.println("Key :"+key+" Value :"+value);
}
}
}
答案 0 :(得分:7)
数组基于零。增加words
的数组大小,以便您可以在索引2
char[] words = new char[3];
答案 1 :(得分:6)
char[] words = new char[2];
words[0] = 'a';
words[1] = 'b';
words[2] = 'c'; <-- HERE
您创建了一个双元素数组,但在其中放入了三个项目。
Java中的数组具有固定的大小,一旦初始化就无法修改。
然后:
String value=(String)m.getValue();
这不起作用:char[]
不是String
!
你必须:
String value = new String((char[]) m.getValue());
但你应该是地图的.entrySet()
,真的。
答案 2 :(得分:3)
new char[2]
并不意味着“制作一个索引最多为2的新数组”。这意味着“创建一个可以容纳2个值的新数组”,并且当数组索引从0开始时,索引从0变为1.
答案 3 :(得分:1)
字[2]是罪魁祸首!数组字是或大小2.所以你只能拥有 单词[0]和单词[1]
答案 4 :(得分:1)
创建新数组时使用的整数参数不是该数组中应该可用的最高索引,而是数组的实际大小。因此,正如其他人所说,你会想要
char[] words = new char[3];
创建一个能够容纳三个元素的数组。