为什么该方法在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子句 - 而没有其他子句 - 那么为什么我们会获得类型不匹配。
但是,我无法解决上述错误 - 除非我添加此行
返回x
错误没有发生,因为编译器认为如果N&lt; = 0会发生什么我尝试用n = 10编写该功能为硬编码
想法?
您的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
又一个,
def createArray(n: Int): Array[Int] = Array.fill(n) { scala.util.Random.nextInt(n) }
然后,例如
val x: Array[Int] = createArray(10)
您可以使用屈服来做一些更清洁的事情:
def createArray(n:Int):Array[Int] =
(for(i: Int <- 0 to n-1) yield scala.util.Random.nextInt(n)).toArray
这将使"一个衬里功能"