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
相关产品推荐
相关产品推荐

