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

Scala中如何将FOR循环输出作为自身输入?数组迭代生成问题

解决ArrayBuffer动态追加元素的循环问题

需求说明:

  • 向ArrayBuffer中追加元素,新元素为当前ArrayBuffer最后两个元素的乘积
  • 追加的元素值不得超过10000
  • 输入ArrayBuffer(2, 3)时,预期输出为ArrayBuffer(2, 3, 6, 18, 108, 1944),但当前代码实际输出仅为ArrayBuffer(2, 3, 6, 18)

问题分析

当前代码的核心问题:

  1. for循环的迭代范围1 to args.length基于初始ArrayBuffer长度计算,循环开始后迭代次数就固定了,无法随元素追加后的动态长度继续执行
  2. 循环条件args(k) < 10000判断的是当前元素,而非即将生成的乘积,逻辑不符合需求

当前代码:

def main(args: ArrayBuffer[Int]): Unit = {
    for(k <- 1 to args.length if(args(k) < 10000)){
      args += args(k)*args(k-1)
    }
    println(args)
  }

修正方案

改用while循环动态判断是否继续追加,每次计算当前最后两个元素的乘积,符合条件则追加,否则停止循环:

import scala.collection.mutable.ArrayBuffer

def main(args: ArrayBuffer[Int]): Unit = {
  // 假设输入至少包含两个元素(符合需求场景)
  var keepAdding = true
  while (keepAdding) {
    val last = args.last
    val secondLast = args(args.length - 2)
    val product = last * secondLast
    
    if (product <= 10000) {
      args += product
    } else {
      keepAdding = false
    }
  }
  println(args)
}

代码说明

  • 使用while循环替代for循环,实现动态循环控制,只要下一个乘积符合条件就继续执行
  • 每次循环都获取ArrayBuffer最新的最后两个元素,确保计算的是当前末尾元素的乘积
  • 直接判断乘积是否≤10000,符合条件才追加元素,避免生成超过限制的值

运行修正后的代码,输入ArrayBuffer(2, 3)即可得到预期输出:ArrayBuffer(2, 3, 6, 18, 108, 1944)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:35:25