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

Kotlin生成指定大小正负不同IntArray返回全0问题求助

问题分析与修复

你的代码出现全0输出及逻辑错误,核心问题如下:

  • 缺少返回语句:函数声明要返回IntArray,但代码末尾没有return novo,无法返回生成的数组(Kotlin编译时会直接报错)。
  • 循环逻辑混乱:for循环嵌套while循环的逻辑完全冲突,i+1只是表达式,不会修改循环变量i的值;且当i为数组最后一个元素时,novo[i+1]会直接触发索引越界异常。
  • 初始值判断无效:IntArray(size)创建时所有元素默认是0,if (novo[i] != novo[i+1])条件永远不成立,赋值语句根本不会执行,数组元素始终为0。
  • 重复元素检查缺失:仅对比当前元素和下一个元素,完全没验证新生成的数是否已存在于数组中,无法保证元素互不相同。

修正后的代码

以下是符合需求的正确实现,可生成包含正负整数、元素互不重复的IntArray:

fun generateArray21(size: Int): IntArray {
    val novo = IntArray(size)
    val usedNumbers = mutableSetOf<Int>()
    var index = 0
    while (index < size) {
        // 生成范围在 [-size/2, size/2) 的随机整数,包含正负
        val num = (Math.random() * size - (size / 2)).toInt()
        // Set的add方法会返回是否成功添加(即元素未被使用过)
        if (usedNumbers.add(num)) {
            novo[index] = num
            index++
        }
    }
    return novo
}

代码说明

  • 用mutableSetOf记录已使用的数字,利用Set不允许重复元素的特性,确保生成的每个数都是唯一的。
  • 循环直到数组被填满:每次生成符合范围的随机数,仅当该数未被使用时,才放入数组并推进索引。
  • 逻辑清晰,避免了索引越界问题,且明确返回生成的数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:26:03