在下面的代码中,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;
}
答案 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];