Scala中的这段代码有什么问题?(需要很长时间)

amk*_*o23 1 eclipse types scala long-integer

我是使用Scala的新手,大多数时候我不知道如何处理错误消息.有人可以帮我这个代码吗?我需要更改什么才能使此代码生效?顺便说一下,我正在Scala中写Euklid最大的公约数.

  def userInput() {
    var x: String = Console.readLine("Please enter the first number you want to calculate. ")
    var y: String = Console.readLine("Please enter the second number you want to calculate. ")
    println(userInput())
  }

  def ggt(firstNumber: Long, secondNumber: Long): Long = {
    var x = firstNumber
    var y = secondNumber

    if (y == 0) {
      return x
    }

  }
Run Code Online (Sandbox Code Playgroud)

我得到的错误是"类型不匹配;找到:单位必需:长"在这一行:if(y == 0){

我应该改变什么?在此先感谢您的帮助!

cmb*_*ter 13

你的ggt功能需要返回一个Long并不总是这样做.首先,您可以删除return关键字,因为scala函数将始终返回最后一行中的任何内容.然后,在y != 0使此函数定义有效时需要返回值.现在,它正在返回Unit,就像void是因为那里没有其他阻止.改成这样的东西你应该全部设置:

def ggt(firstNumber: Long, secondNumber: Long): Long = {
  var x = firstNumber
  var y = secondNumber

  if (y == 0) x
  else y
}
Run Code Online (Sandbox Code Playgroud)

  • amko23,这似乎是正确的答案,你应该接受它;) (3认同)

4le*_*x1v 5

首先,如果你想从命令行读取数字,那么你的userInput是不正确的,它应该是这样的:

def readNumbers(): (Long, Long) = {
  println("Print the first number")
  val first = Console.readLong()
  println("Println the seconds number")
  val second = Console.readLong()
  (first, second)
}
Run Code Online (Sandbox Code Playgroud)

然后读取数字:

val (a, b) = readNumbers()
Run Code Online (Sandbox Code Playgroud)

GCD方法:

def gcd(a: Long, b: Long): Long = if (b == 0) a else gcd(b, a % b)
Run Code Online (Sandbox Code Playgroud)

并在数字上调用它:

gcd(a, b)
Run Code Online (Sandbox Code Playgroud)

Scala一方面是一个函数,因此每个表达式都会产生一些值,而在Scala中,如果是表达式,则不是语句.