Как перезапустить цикл for в kotlin

#for-loop #kotlin #iteration #restart

#цикл for #kotlin #итерация #перезапустить

Вопрос:

У меня такая ситуация с вложенным циклом в Kotlin, представьте, что есть две строки «abcdef» и «bfihja». Я сравниваю эти два символа по символу, используя цикл for. Если есть совпадение, этот символ должен быть удален из каждой строки, и итерация для «S2» должна начинаться с начала.

 var S1 = "abcdef"
var S2 = "bfihja"

   for(i in S1.indices) {
      for(j in S2.indices){
          
         if(S1[i]==S2[j]) {
             "character removed from each"
         }

  

У меня возникают проблемы с тем, что при совпадении символов сравнение для строки «S2» должно начинаться с самого начала. Я не могу найти способ перезапустить его.

Комментарии:

1. Я думаю, что для этой задачи код, вероятно, будет более понятным и эффективным, если вы сначала отсортируете строки. Затем вам потребуется только одно сканирование по обеим строкам вместе.

Ответ №1:

Вы можете использовать помеченный внешний цикл while. Используя continue во внешнем цикле, вы перезапускаете свою итерацию. Вы можете поставить break после внешней итерации, чтобы мы могли выйти из цикла while по завершении.

 outer@while (true) {
    for (i in S1.indices) {
        for (j in S2.indices) {
            if (S1[i] == S2[j]) {
                S1 = Strin&Builder(S1).deleteCharAt(i).toStrin&()
                S2 = Strin&Builder(S2).deleteCharAt(j).toStrin&()
                continue@outer
            }
        }
    }
    break
}
  

Комментарии:

1. Спасибо, это работает. Если я правильно понял, что это делает, то при совпадении строки обновляются и с помощью «continue@outer» весь цикл начинается снова с новыми строками, и когда внешний цикл for заканчивается, он прерывается правильно ..?? Пожалуйста, поправьте меня, если я ошибаюсь.

Ответ №2:

Вы должны использовать обычный цикл for, который находится в диапазоне от 0 до len&th-of-S2 во внутреннем цикле for, и просто сбросить переменную итератора на 0, когда вы хотите «сбросить» цикл for.

Комментарии:

1. Как сбросить итератор? Значение «j» не может быть изменено