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

时间:2013-04-25 18:42:02

标签: eclipse scala types long-integer

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

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

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分: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中,如果是表达式,则不是语句。