在2d数组上快速帮助解决ArrayIndexOutOfBoundsException问题

时间:2011-01-11 02:31:07

标签: java arrays multidimensional-array

在下面的代码中,for循环给出了“java.lang.ArrayIndexOutOfBoundsException:2”错误,我无法理解为什么,如果我将“emailArray [i] [2] = messageContent [i]”更改为“emailArray” [i] [1] = messageContent [i]“它有效,我的二维数组布局错了吗?

public String[][] fetchEmails() throws Exception {

        String[][] emailArray;

        Properties props = new Properties();

        Session session = Session.getDefaultInstance(props, null);

        Store store = session.getStore("imaps");

        store.connect("pop.gmail.com", "******@googlemail.com", "********");
        System.out.println(store);


        Folder folder = store.getFolder("Inbox");

        folder.open(Folder.READ_ONLY);

        int howmuch = folder.getMessageCount();
        Message message[] = folder.getMessages();

        String[] messageContent = new String[message.length];

        messageContent = convertContent(message);

        emailArray = new String[message.length][2];        

        for (int i = 0; i<message.length; i++){
            emailArray[i][0] = message[i].getFrom()[0].toString();
            emailArray[i][1] = message[i].getSubject().toString();
            emailArray[i][2] = messageContent[i];
        }

    folder.close(false);
    store.close();

    return emailArray;
}

1 个答案:

答案 0 :(得分:3)

在此定义尺寸为message.length by 2的二维数组:

emailArray = new String[message.length][2];

在这里,您尝试访问 i -th行的第3列:

emailArray[i][2] = messageContent[i];

但是没有第3列,你已经将它定义为有2列。

在Java中,数组是零索引的,这意味着您使用0访问数组的第一个元素,将第二个元素访问为1,依此类推。基本上,如果你想要3个元素,那么你需要将emailArray定义为:

emailArray = new String[message.length][3];