Scala - 找不到类型不匹配单位:必需数组[Int]

时间:2014-02-04 15:48:03

标签: scala types mismatch

为什么该方法在NetBeans中出现编译错误

(有问题的错误 - 类型不匹配找到单位:必需的数组[Int])

  def createArray(n:Int):Array[Int] =
  {
      var x = new Array[Int](n)
      for(i <- 0 to x.length-1)
        x(i) = scala.util.Random.nextInt(n)
  }

我知道如果有一个if子句 - 而且没有else子句 - 那么我们为什么会出现类型不匹配。

但是,我无法解决上述错误 - 除非我添加此行

返回x

错误没有发生,因为编译器认为如果n <= 0,会发生什么 我尝试用n = 10编写函数作为硬编码

想法?

3 个答案:

答案 0 :(得分:9)

您的for理解将转换为:

0.to(x.length - 1).foreach(i => x(i) = scala.util.Random.nextInt(i))

由于foreach返回(),因此for理解的结果为(),因此整个函数的结果为(),因为它是最后一个表达。

您需要返回数组x:

for(i <- 0 to x.length-1)
        x(i) = scala.util.Random.nextInt(n)
x

答案 1 :(得分:2)

还有一个,

def createArray(n: Int): Array[Int] = Array.fill(n) { scala.util.Random.nextInt(n) }

然后,例如

val x: Array[Int] = createArray(10)

答案 2 :(得分:0)

你可以用我自己的意见做一些更清洁的东西:

def createArray(n:Int):Array[Int] =
  (for(i: Int <- 0 to n-1) yield scala.util.Random.nextInt(n)).toArray

这将成为“一线功能”