【问题标题】:Check numbers divisible by 2 and print them in Kotlin检查可被 2 整除的数字并在 Kotlin 中打印
【发布时间】:2021-07-19 14:28:27
【问题描述】:

作为 Kotlin 课程的一部分,我正在处理一项任务,但我一直被困在这上面。我觉得这很简单,但我看不到。以下是对此任务的说明:

给你一个整数列表。遍历给定的 List 并在一行中打印可被 2 整除的元素。

示例输入:

8 11 13 2

样本输出:

8 2

这是我的代码(我打印了数字列表以查看提供给我的数字,因为我没有选择它们,它们是由课程自动提供的,而我看不到它们):

fun solution(numbers: List<Int>) {
    var divisible = intArrayOf()
    for (i in 0..numbers.lastIndex) {
        if (numbers[i] % 2 == 0){
            divisible = intArrayOf(numbers[i])
        }
    }
    println("$numbers")
    println("${divisible.joinToString("")}")

这是我的输出:

[8, 11, 13, 2]
2

我想我已经完成了检查数字是否可以被 2 整除的部分,但我不完全理解为什么它只打印 2,如果它可以被 2 整除,为什么不先打印 8。起初我使用一个列表而不是一个可分割变量的数组,所以我认为可能是它,因为如果我没记错的话,列表是不可变的,但看起来不是这样。如果有人能向我解释我做错了什么,我将不胜感激!

【问题讨论】:

    标签: arrays list for-loop kotlin integer


    【解决方案1】:

    您在每个可被 2 整除的项目上重写结果持有者 (divisible = intArrayOf()),这就是为什么只有最后一个匹配项存储在 divisible 数组中。

    代替

    divisible = intArrayOf(numbers[i])
    

    你应该写

    divisible.add(numbers[i]) // no need to re-initialize
    

    更新:我错过了该数组没有add 操作。如果合适,您可以使用列表而不是数组,以使 add 操作可用:

    var divisible = mutableListOf<Int>()
    

    附:使用 Kotlin 有一种更短的方法:

    fun solution(numbers: List<Int>) {
        val divisible = numbers.filter { it % 2 == 0 }
        println("$numbers")
        println("${divisible.joinToString(" ")}")
    }
    

    【讨论】:

    • 谢谢!但是,它告诉我添加的“未解决的参考”。我不知道为什么,我正在谷歌搜索,看看我是否能找到一些东西。你有什么想法吗?
    • 谢谢!!那工作完美无缺。我完全忘记了 filter 关键字,看来我得重新研究理论了! :')
    【解决方案2】:

    您可以将过滤器与谓词一起使用

    例子:

    val list = listOf(8,2,11,15)
    

    使用 kotlin 解决方案非常简单

    val result = list.filter { it % 2 == 0 }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      • 2022-10-01
      • 2020-08-04
      相关资源
      最近更新 更多