2014-02-04 10 views
1

Почему метод дает ошибку компиляции в среде NetBeansScala - Тип Несовпадение Найдено Единица измерения: требуется Array [Int]

(ошибка в вопросе - Тип Рассогласование Найдено Единица измерения: требуется Array [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, а другое не было, тогда почему мы получаем несоответствие типа.

Однако, я не в состоянии решить эту вышеуказанную ошибку - если я не добавить эту строку

возвращение х

ошибка не происходит, потому что компилятор думает, что произойдет, если п < = 0 Я пытался писать функция с n = 10 как жестко закодированная

Мысли?

+0

Последнее утверждение 'for' в вашей функции возвращает' Unit', но тип возвращаемого значения является 'Array [Int]'. Отсюда и ошибка. Поэтому просто поставьте 'x' в качестве последнего оператора в функции. Проверьте ответ @ Lee ниже. – tuxdna

ответ

8

Ваше for понимание будет преобразовано в нечто вроде:

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

Так как foreach возвращается (), результат вашего for понимания является (), поэтому результат всей функции (), так как это последнее выражение ,

Вы должны вернуть массив х вместо:

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

Вы могли бы сделать что-то более чистое по моему собственному мнению, используя выход:

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

Это сделает «одну облицованной функцию»

1

Еще один,

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

Тогда, например

val x: Array[Int] = createArray(10) 
Смежные вопросы