Второй массив не будет увеличиваться после повторения цикла - PullRequest
0 голосов
/ 16 марта 2019

Я новичок в Kotlin и пытаюсь сравнить элементы двух массивов, видя, какой массив имеет больший элемент. Массивы создаются с помощью пользовательского ввода. Ошибка, которую я имею, состоит в том, что когда я повторяю второй цикл for (внутренний цикл), который содержит содержимое второго массива, он не будет увеличиваться до следующего элемента второго массива в отличие от первого цикла for. Таким образом, если a = {1,2} и b = {2,1}, a будет увеличиваться как на 1, так и на 2, но b будет оставаться на 2 на обеих итерациях цикла. Вот моя функция, которая вызывает у меня проблему:

    fun practiceCompareArray(a: Array<Int>, b: Array<Int>): Array<Int> {
        var j: Array<Int>
        var aPoints = 0
        var bPoints = 0

        for (x:Int in a) {
--------->  for (y: Int in b) {
                if (x > y) {
                    aPoints++
                } else if (x < y) {
                    bPoints++
               break
            }
        }

        j = arrayOf(aPoints, bPoints)

        return j
    }

Цикл for со стрелкой создает мне проблему. Я думаю, что это из-за оператора break в конце внутреннего цикла. Мне даже нужен внутренний цикл для сравнения каждого массива? Любая помощь или документация будут полезны.

1 Ответ

1 голос
/ 16 марта 2019

Если вы знаете, что оба массива имеют одинаковую длину, и вы хотите сравнить их поэлементно, вы можете сделать что-то вроде:

fun practiceCompareArray(a: Array<Int>, b: Array<Int>): Array<Int> {
    var aPoints = 0
    var bPoints = 0

    for ((x,y) in a.zip(b)) {
        if (x>y) {
            aPoints ++
        } else {
            bPoints ++
        }
    }
    return arrayOf(aPoints, bPoints)
}

или в более функциональном стиле

fun practiceCompareArray(a: Array<Int>, b: Array<Int>): Array<Int> {
    val (aPoints, bPoints) = a.zip(b)
      .fold(Pair(0,0), {(aScore, bScore), (x,y) -> 
         if (x > y) Pair(aScore + 1, bScore) else Pair(aScore, bScore + 1)})

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