Причина, по которой вы получаете дубликаты, состоит в том, что вы определили rand()
как def
. Это означает, что каждый вызов создает новый и отличный Stream[Int]
. Вы берете только 1-й элемент из каждого нового Stream
, но вероятность повторения довольно высока.
Вы могли бы исправить это, сделав вместо этого rand
a val
, но вы определили его рекурсивно и поэтому попытка получить доступ к чему-либо после головы вызовет бесконечную рекурсию.
Правильный способ получить случайную последовательность различных значений:
val sq :Seq[Int] = util.Random.shuffle(1 to 1000)
Затем, чтобы получить доступ к значениям, вы можете:
(0 to 100).foreach(i => {
val newNumber = sq(i).toString()
... //etc.