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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:05:15