Scala 3凯撒密码输出末尾带()问题排查与解决
凯撒密码程序输出末尾出现“()”的原因及解决方法
原因分析
你的程序末尾出现“()”是两个问题叠加的结果:
encrypt方法的返回类型是Unit(Scala中表示无返回值的类型,等价于Java的void),当你将该方法的返回值赋值给encryptedmessage并执行println(encryptedmessage)时,本质是打印Unit类型的默认字符串表示——也就是()。- 更核心的是,你在
encrypt方法内部已经通过print直接输出了加密后的字符,执行encrypt(message, shift)时已经把加密内容打印出来了,后续的println(encryptedmessage)又额外输出了()。
解决方法
调整encrypt方法的逻辑,让它返回加密后的字符串而非直接打印,同时修正main函数的调用流程:
修改后的完整代码
import scala.io.StdIn.readLine var shift: Int = 1; def encrypt(messageToEncrypt: String, shiftAmt: Int): String = messageToEncrypt.map { c => ((c.toInt + shiftAmt - 97) % 26 + 97).toChar } @main def CeasarCipher(args: String*): Unit = println("enter a phrase to encrypt: ") val message = readLine() val encryptedMessage = encrypt(message, shift) println(encryptedMessage)
关键修改说明
- 返回类型调整:将
encrypt的返回类型从Unit改为String,让方法专注于生成加密结果,而非负责输出。 - 简化遍历逻辑:Scala的
String本身支持直接遍历,无需转为CharArray,用map方法可以更简洁地完成字符转换。 - 分离输出逻辑:把打印操作移到main函数中,让职责更清晰,避免重复输出。
- 冗余变量清理:移除了不必要的
msgLen、dcrytArray等变量,符合Scala的表达式式编程风格。
内容的提问来源于stack exchange,提问作者Lizzo
相关产品推荐
相关产品推荐

