You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin如何实现数组相邻奇数两两求和生成目标新数组

问题描述

给定数组 arr = [1,2,3,4,5,6,7,8,9],需要按规则生成新数组:

  • 先提取数组内所有奇数
  • 将提取后的奇数序列中相邻两个数依次求和,计算对应关系为:1+3=4、3+5=8、5+7=12、7+9=16
  • 最终得到目标数组 newArray = [4,8,12,16]

当前编写的Kotlin代码无法输出正确结果,原代码如下:

fun main(){
    val sum = arrayOf(1,2,3,4,5,6,7,8,9)
    var first =0;
    var second=0

    for (i in sum.indices){
        if(sum[i]%2!=0){
            first += sum[i]
            if (second!=0){
                println(" $first + $second")
                first=second
            }
        }
    }
}

原代码问题点
  • 变量逻辑混乱:first、second两个临时变量的累加、赋值逻辑不符合需求,没有按顺序缓存相邻的两个奇数
  • 没有创建结果容器存储求和值,仅做了逻辑错误的打印操作
  • 遍历到奇数时没有正确维护相邻数值的缓存关系,出现了无意义的累加赋值

正确实现方案

实现思路

最清晰的实现分两步:

  1. 先过滤原数组,拿到所有奇数组成的临时序列
  2. 遍历奇数序列,从第二个元素开始,每次计算当前元素和前一个元素的和,存入结果数组即可

如果追求遍历效率,也可以在一次遍历中完成,只需要缓存上一个遇到的奇数,遇到下一个奇数时就计算和存入结果,再更新缓存值即可。

可运行代码

写法1(逻辑直观易维护):

fun main() {
    val originArray = arrayOf(1,2,3,4,5,6,7,8,9)
    // 过滤得到所有奇数
    val oddList = originArray.filter { it % 2 != 0 }
    val newArray = mutableListOf<Int>()
    // 遍历相邻元素求和
    for (i in 1 until oddList.size) {
        newArray.add(oddList[i-1] + oddList[i])
    }
    // 验证输出:[4, 8, 12, 16]
    println(newArray)
}

写法2(单次遍历,空间效率更高):

fun main() {
    val originArray = arrayOf(1,2,3,4,5,6,7,8,9)
    val newArray = mutableListOf<Int>()
    var lastOdd: Int? = null // 缓存上一个遍历到的奇数
    for (num in originArray) {
        if (num % 2 != 0) {
            // 存在上一个奇数缓存时,计算相邻和存入结果
            if (lastOdd != null) {
                newArray.add(lastOdd + num)
            }
            // 更新缓存为当前奇数
            lastOdd = num
        }
    }
    // 验证输出:[4, 8, 12, 16]
    println(newArray)
}

内容的提问来源于stack exchange,提问作者user19219454

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:21:35