scala “For循环”将字符转换为整数以括号对终止

bxjv4tth  于 2023-02-12  发布在  Scala
关注(0)|答案(2)|浏览(120)

我正在用Scala 3编写一个Caesar密码,我正在编写一个表达式/函数,它迭代字符串的每个字符。在每次迭代时,每个字符都被转换成ascii值,移位,然后再转换回字符。函数打印,但输出以“()”结束...

import scala.io.StdIn.readLine  
  
var message: String = "";
var shift: Int = 1;

def encrypt(messageToDecrypt: String, shiftAmt: Int): Unit =  
  var msgLen = messageToDecrypt.length
  var dcrytArray = messageToDecrypt.toCharArray
  var i : Int = 0
  var shiftedCharArray = for i <- dcrytArray do print(((i.toInt + shiftAmt - 97) % 26 + 97).toChar)
  

@main def CeasarCipher(args: String*): Unit = 
  println("enter a phrase to encrypt: ")
  var message = readLine()
  var encryptedmessage = encrypt(message, shift)
  println(encryptedmessage)

为什么输出以“()"终止?如何解决?

wfypjpf4

wfypjpf41#

我明白了,你必须在for循环中使用“yield”而不是“do

import scala.io.StdIn.readLine  
  
  var message: String = "";
  var shift: Int = 1;

  def encrypt(messageToDecrypt: String, shiftAmt: Int): String =  
  var msgLen = messageToDecrypt.length
  var dcrytArray = messageToDecrypt.toCharArray
  var i : Int = 1
  var shiftedCharArray = for i <- dcrytArray yield ((i.toInt + shiftAmt - 97) % 26 + 97).toChar
   shiftedCharArray.mkString("")
  

@main def CeasarCipher(args: String*): Unit = 
  println("enter a phrase to encrypt: ")
  var message = readLine()
  var encryptedmessage = encrypt(message, shift)
  println(encryptedmessage)
oiopk7p5

oiopk7p52#

请不要使用变量、数组、可变结构和过程循环,它们伤害了我的眼睛:(如果你打算花时间学习scala,不妨学习以正确的方式使用它。

def shift(amt: Int)(x: Char) = ((x + amt - 97)%26+97).toChar
println(encryptedMessage.map(shift(shiftAmt)))

相关问题