java arraylist бесконечный цикл при заданном размере - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть этот код, который вызывается только один раз

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 голосов
/ 06 декабря 2018

Насколько я понимаю, в цикле нет ничего плохого.Информации недостаточно, чтобы дать четкий ответ.Но есть некоторые вещи, которые мы могли бы сделать, чтобы понять причину проблемы и, следовательно, решить ее.

  • Попробуйте напечатать размер списка массивов перед циклом for
  • Makeубедитесь, что вы не изменяете значение переменной 'x' внутри цикла таким образом, чтобы оно никогда не удовлетворяло условию цикла for.
  • Попробуйте использовать для каждого цикла, если вас не беспокоитполучение индекса напрямую.
0 голосов
/ 06 декабря 2018

Я думаю, вы модифицируете 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, если цикл еще не закончился.

И использовать имена переменных со строчной буквой

...