продолжить n раз в цикле Котлина - PullRequest
0 голосов
/ 12 февраля 2019

Можно ли продолжить n раз в цикле Котлина?

пример:

for(i in 0..10){
    if(condition){
        //continue n times
    }
}

Поскольку i по какой-то причине является значением val, я не могу повторно инициализировать его в цикле.


Предложение из комментария квместо этого используйте цикл while, лучше ли будет использовать вместо него цикл while?

var i: Int = 0
while(i <= amountOfIterations){
    //logic
    if(condition){
        i += amountOfContinues
    }
    i++
}

Мой краткий вопрос довольно запутанный.Я пытаюсь создать приложение для двоичного калькулятора Android в kotlin, цель состоит в том, чтобы изучить kotlin и двоичные вычисленияЭта функция доставляет мне неприятности

fun subtract(minuendString: String, subtrahendString: String): IntArray {

    var minuend = binaryStringToArray(minuendString)
    var subtrahend = binaryStringToArray(subtrahendString)

    if (subtrahend[subtrahend.size - 1] == 1 && minuend[minuend.size - 1] == 0 ||
        subtrahend.size > minuend.size
    ) {
        return IntArray(0)
    }

    var sum = IntArray(subtrahend.size)

    var beginSearchIndex: Int = 0
    var endSearchIndex: Int = 0
    var searchSpan: Int = 0

    for (i in 0..subtrahend.size - 1) {
        if (minuend[i] == subtrahend[i]) {
            sum[i] = 0
        } else if (subtrahend[i] == 0 && minuend[i] == 1) {
            sum[i] = 1
        } else {
            beginSearchIndex = i
            for (j in i..minuend.size - 1) {
                if (minuend[j] == 1) {
                    minuend[j] = 0
                    endSearchIndex = j - 1
                    searchSpan = endSearchIndex - beginSearchIndex + 1
                    break
                }
            }
            var tempSubtrahend = IntArray(searchSpan)
            var tempMinuend = IntArray(searchSpan)
            for (k in i..endSearchIndex) {
                tempMinuend[k] = minuend[k]
                if (subtrahend.getOrNull(k) == null ||
                    subtrahend.getOrNull(k) == 0
                ) {
                    tempSubtrahend[k] = 0
                } else {
                    tempSubtrahend[k] = 1
                }
            }
            sum[i] = 1
            for(v in 1..tempSubtrahend.size-1){
                if(tempSubtrahend[v] == 1){
                    sum[v] = 0
                } else {
                    sum[v] = 1
                }
            }
            //continue searchSpan - 1 amount of times
        }
    }
    for(i in subtrahend.size..minuend.size-1){
        sum[i] = minuend[i]
    }
    return sum
}

Я беру две строки из текстовых представлений, представляющих двоичные значения.Я конвертирую их в IntArrays и стремлюсь создать сумму IntArray, которая будет суммой вычитания.Метод выполняет фактическое вычитание, когда вычитая двоичные файлы, вам иногда приходится заимствовать некоторые индексы в мини-конечную сумму, и в этом есть некоторая логика, требующая от меня сделать вложенный цикл, завершающий часть логики, парой итераций в основной цикл.

Мой вопрос сосредоточен вокруг логики основного цикла.Я был не уверен, можно ли было пропустить итерации, для которых вложенный цикл завершил логику.

Функция не завершена и была добавлена ​​исключительно по запросу.Функция не является базовой линией вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...