【问题标题】:Second array will not increment after repeating for loop重复 for 循环后,第二个数组不会增加
【发布时间】:2019-03-16 03:20:23
【问题描述】:

我是 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 语句。我什至需要内部循环来比较每个数组吗?任何帮助或文档都会有所帮助。

【问题讨论】:

  • 您想逐个元素比较数组吗? IE。两者的第一个元素,然后是两者的第二个,等等?在这种情况下,请查看zip
  • 没错。两者的第一个元素,然后是两者的第二个元素,等等。我会看看 zip 并在之后回复你!

标签: arrays for-loop if-statement kotlin


【解决方案1】:

如果您知道两个数组的长度相同,并且您想逐元素比较它们,您可以执行以下操作:

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)
}

【讨论】:

    猜你喜欢
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 2019-09-14
    • 2023-03-11
    相关资源
    最近更新 更多