我是java的初学者,我正在尝试循环地址数组(address []),但我不知道数组的大小,也无法检查数组的终点。 这是我的代码:
int j=0;
System.out.println(j);
while(msg.getRecipients(Message.RecipientType.CC)[j]!=null)
{cc =cc.concat(msg.getRecipients(Message.RecipientType.CC)[j].toString());
cc =cc.concat(",");
j++;
System.out.println(j);}
}
基本上msg.getRecipients(Message.RecipientType.CC)是类型地址的数组,当irun时我得到错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at test2.main(test2.java:135)
答案 0 :(得分:0)
如果您查看此tutorial,您会看到有一个名为length
的变量,它包含数组的大小。并且for循环更适合您想要实现的目标
for(int i = 0; i < array.length; i++) {
//do stuff with array[i]
}
答案 1 :(得分:0)
您是否尝试过使用msg.getRecipients(Message.RecipientType.CC).length,它给出了数组的长度
答案 2 :(得分:0)
来自JLS,有
public final
字段length
-
所以,这应该是 -
int j=0;
while(j < msg.getRecipients(Message.RecipientType.CC).length)
{
System.out.println(j);
cc = cc.concat(msg.getRecipients(Message.RecipientType.CC)[j].toString());
cc = cc.concat(",");
j++;
}
答案 3 :(得分:0)
试试这个:
int j=0;
System.out.println(j);
while(j < msg.getRecipients(Message.RecipientType.CC).length){
cc =cc.concat(msg.getRecipients(Message.RecipientType.CC)[j].toString());
cc =cc.concat(",");
j++;
System.out.println(j);
}
答案 4 :(得分:0)
这里要了解的最重要的事情是你总是知道Java中数组的大小,你可以使用数组的 length 属性来访问它,例如: myArray.length
。除此之外,还有一些方面可以改进您的方法:
while
循环获取数组时,这可能会正常工作,但这是不必要的工作。只需抓取一次数组,然后遍历其内容。cc
变量是String
,那么请注意字符串是不可变的,这意味着每次您在其上调用concat
时,您都会创建一个新的String
宾语。这不是使用循环动态构建String的非常有效的方法。好的做法是使用StringBuilder
(这是可变的)来构建最终文本,然后在完成后将其转换为String
。您的代码可能如下所示:
StringBuilder recipients = new StringBuilder();
Address[] ccs = msg.getRecipients(Message.RecipientType.CC);
for (int i = 0; i < ccs.length; i++)
{
if (i > 0) recipients.append(",");
recipients.append(ccs[i]);
}
String result = recipients.toString();