Kotlin实现字符串反转程序输出内存地址而非预期结果如何修复
问题原因
- 字符串不可变导致反转操作未生效:Kotlin中String是不可变类型,
word.reversed()会返回新的反转后字符串,不会修改原数组中存储的元素,当前代码没有保存反转后的结果,操作完全无效。 - 循环逻辑冗余错误:外层while循环完全多余,且判断条件
nul <= count存在数组越界风险,只是当前没有修改数组内容才没有触发崩溃。 - 数组toString()方法不符合预期:直接调用数组的
toString()默认输出的是数组的类名加内存地址,就是你看到的[Ljava.lang.string;@2d112c3这类内容,不会将数组内的元素拼接为正常字符串。
修复方案
可以直接用Kotlin高阶函数简化逻辑,修改后的点击事件代码如下:
submitButton.setOnClickListener { // 先将输入的Editable类型转为String val inputStr = userString.text.toString() // 按空格拆分后对每个单词反转,再用空格拼接为最终结果 val outputStr = inputStr.split(" ") .joinToString(" ") { word -> word.reversed() } changeText.text = outputStr }
如果要保留你原本的数组遍历写法,也可以按如下方式修改:
submitButton.setOnClickListener { val getString = userString.text.toString() val typedArray: Array<String> = getString.split(" ").toTypedArray() // 遍历数组下标,替换每个位置的内容为反转后的字符串 for (i in typedArray.indices) { typedArray[i] = typedArray[i].reversed() } // 用joinToString拼接数组内容,不要直接调用toString val reverseString = typedArray.joinToString(" ") changeText.text = reverseString }
内容的提问来源于stack exchange,提问作者Quarismo
相关产品推荐
相关产品推荐

