设置大小后,java arraylist无休止循环

时间:2018-12-06 10:31:33

标签: java lotus

我有这段代码,只能被调用一次

ArrayList<String> SendToEmails;
            SendToEmails = new ArrayList<String>();

            if(!environmentProduction){
                SendToEmails.add(EmailAccountForTest1);
                SendToEmails.add(EmailAccountForTest2);
            }else{
                SendToEmails.add(emailAccount);
            }

    SendToEmails.add("bla@bla.com");

for (int x = 0; x < SendToEmails.size(); x++) {
//send mail 
}

上面的代码是一个简短的代码段。.根据日志的SendToEmails大小为3。但是我的代码以无限循环结尾。并一遍又一遍地发送相同的邮件。

这怎么可能?

2 个答案:

答案 0 :(得分:2)

我认为,您可以在循环中修改x。您可以尝试下一个:

int sendToEmailsSize = sendToEmails.size();
for(int x = 0; x < sendToEmailsSize; x++) {
    //send emails and don`t change x
}

电子邮件列表的大小仅计算一次,而不是在循环的每次迭代中计算。而且,如果您更改列表,则循环的迭代次数将保持不变。

还可以使用forEach循环

for(String email: sendToEmails) {
    //sendEmail(email)
}

但是如果您不能在此循环中修改列表。如果您使用的是多线程,那么如果在另一个线程中更改列表,则在循环尚未结束的情况下可以获取ConcurrentModificationException。

并使用带有小写字母的变量名

答案 1 :(得分:0)

就我所知,循环没有任何问题。该信息不足以给出明确的答案。但是我们可以做一些事情来理解问题背后的原因,从而解决问题。

  • 尝试在for循环之前打印数组列表的大小
  • 确保您不会以不满足for循环条件的方式修改循环内变量'x'的值。
  • 如果您不关心直接获取索引,请尝试将其用于每个循环。