1

我正在尝试将一个哈希图与一个 char 数组作为值和一个字符串作为键放在一起。我正在尝试打印出键和值,但不断得到数组越界异常。我不确定问题是什么。(另外我可能试图错误地打印出地图;我有点只是离开其他帖子)。有人可以帮我解决这个问题。谢谢你的帮助。这是我的代码:

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);
        }
    }
}
4

5 回答 5

7

数组是从零开始的。增加数组大小,words以便您可以在索引处分配一个元素2

char[] words = new char[3];
于 2013-06-14T15:14:23.167 回答
6
   char[] words = new char[2];
   words[0] = 'a';
   words[1] = 'b';
   words[2] = 'c'; <-- HERE

您创建了一个包含两个元素的数组,但在其中放入了三个项目。

Java中的数组具有固定的大小,一旦初始化就无法修改。

进而:

String value=(String)m.getValue();

这行不通: achar[]不是 a String

你必须:

String value = new String((char[]) m.getValue());

但你应该你的地图.entrySet(),真的。

于 2013-06-14T15:14:51.967 回答
3

new char[2]并不意味着“创建一个索引最多为 2 的新数组”。它的意思是“创建一个可以容纳 2 个值的新数组”,并且随着数组索引从 0 开始,索引从 0 变为 1。

于 2013-06-14T15:16:15.097 回答
1

words[2] 是这里的罪魁祸首!数组 words 的大小为 2。所以你只能有 Words[0] 和 words[1]

于 2013-06-14T15:15:35.117 回答
1

当我们创建一个新数组时使用的整数参数不是该数组中应该可用的最高索引,而是数组的实际大小。因此,正如其他人所说,你会想要

char[] words = new char[3];

创建一个能够容纳三个元素的数组。

于 2013-06-14T15:16:29.127 回答