1

我是使用 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
    }

  }

我得到的错误是“类型不匹配;发现:需要的单位:长”在这一行:if(y == 0){

我应该改变什么?提前感谢你们的帮助!

4

2 回答 2

13

您的ggt函数需要返回 aLong并且它并不总是这样做。首先,您可以删除return关键字,因为 scala 函数将始终返回最后一行的内容。然后,您需要一个返回值何时y != 0使此函数定义有效。现在,它正在返回Unit,这就像void因为那里没有 else 块。更改为这样的内容,您应该已准备就绪:

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

  if (y == 0) x
  else y
}
于 2013-04-25T18:49:26.570 回答
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)
}

然后读数字:

val (a, b) = readNumbers()

GCD方法:

def gcd(a: Long, b: Long): Long = if (b == 0) a else gcd(b, a % b)

并在数字上调用它:

gcd(a, b)

一方面,Scala 是函数式的,因此每个表达式都会产生一些值,而在 Scala 中 if 是表达式,而不是语句。

于 2013-04-25T18:55:18.823 回答