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

Kotlin可变参数函数返回结果问题及代码报错排查求助

你的Kotlin代码问题分析与修复方案

嘿,我来帮你梳理下这段代码的问题~

首先,你的核心需求是接收任意数量的单词,找出所有单词共同出现的字符,但当前代码存在两个关键问题:

1. 对vararg参数的处理完全错误

vararg s: String在函数内部是一个Array<String>类型的数组,你调用s.split(" ")其实是把整个数组转成了字符串(比如输入"hello","world"时,数组会被转成"[hello, world]"),再按空格分割成["[hello,", "world]"]——这完全不是你想要的“遍历每个输入单词”的逻辑,纯属歪打正着在示例里得到了正确结果而已。

2. 逻辑不符合“共同出现”的定义

你当前是把所有单词的字符拆出来后,统计出现次数大于1的字符,但这会把只在部分单词里出现的字符也算进去。比如如果输入三个单词"hello","world","test",原代码会返回"lo",但实际上这三个单词没有共同字符,结果应该是空字符串。


修复后的代码

我给你写了符合需求的版本,逻辑更清晰也更准确:

fun commonChars(vararg words: String): String {
    // 处理无输入的边界情况
    if (words.isEmpty()) return ""
    
    // 以第一个单词的字符集合为初始共同字符集
    var commonChars = words[0].toSet()
    
    // 遍历剩下的每个单词,不断取交集(交集就是所有单词都有的字符)
    for (word in words.drop(1)) {
        commonChars = commonChars.intersect(word.toSet())
        // 如果交集为空,提前结束循环,不用继续遍历了
        if (commonChars.isEmpty()) break
    }
    
    // 把共同字符拼接成字符串返回
    return commonChars.joinToString("")
}

fun main() {
    println(commonChars("hello", "world")) // 输出: lo
    println(commonChars("hello", "world", "test")) // 输出: 空字符串
    println(commonChars("aab", "abb", "abc")) // 输出: ab
}

修复逻辑说明

  • 正确处理vararg参数:直接遍历数组里的每个输入单词,而不是把数组当单个字符串处理
  • 用集合交集来实现“共同出现”的需求:intersect方法会直接返回两个集合都有的元素,多次取交集后,最终结果就是所有单词都共有的字符
  • 增加了边界处理:无输入时返回空,交集为空时提前退出,提升代码效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:07:28