Выбор случайных значений, а затем отбрасывание тех, которые вы уже использовали, - это плохая идея. Это увеличивает время выполнения, так как пул доступных номеров становится меньше, так как вы все больше и больше выбрасываете.
То, что вы хотите - это список случайных чисел, который я реализовал бы с помощью следующего кода (псевдокод, так как это домашняя работа):
dim n[10] // gives n[0] through n[9]
for each i in 0..9:
n[i] = i // initialize them to their indexes
nsize = 10 // starting pool size
do 10 times:
i = rnd(nsize) // give a number between 0 and nsize-1
print n[i]
nsize = nsize - 1 // these two lines effectively remove the used number
n[i] = n[nsize]
Просто выбрав случайное число из пула, заменив его на верхнее число из этого пула и уменьшив размер пула, вы получите случайное перемешивание, не беспокоясь о большом количестве перестановок впереди. Это важно, если число велико, поскольку оно не приводит к ненужной задержке запуска.
Например, проверьте следующую проверку:
<--------- n[x] ---------->
for x = 0 1 2 3 4 5 6 7 8 9 nsize rnd(nsize) output
--------------------------- ----- ---------- ------
0 1 2 3 4 5 6 7 8 9 10 4 4
0 1 2 3 9 5 6 7 8 9 7 7
0 1 2 3 9 5 6 8 8 2 2
0 1 8 3 9 5 6 7 6 6
0 1 8 3 9 5 6 0 0
5 1 8 3 9 5 2 8
5 1 9 3 4 1 1
5 3 9 3 0 5
9 3 2 1 3
9 1 0 9
Вы можете видеть, как пул уменьшается с ходом, и, поскольку вы всегда заменяете использованный на неиспользованный, у вас никогда не будет повторения.
И Теперь Ваша домашняя работа состоит из превращения этого в VB: -)
И, поскольку это домашнее задание уже почти наверняка просрочено (около года назад), я опубликую решение VBA, показывающее, как это сделать, для полноты.
Option Explicit
Option Base 0
Sub Macro1()
Randomize
Dim list(10) As Integer
Dim i As Integer
Dim size As Integer
Dim pos As Integer
Dim result As String
For i = 0 To 9
list(i) = i
Next
size = 10
result = ":"
For i = 1 To 10
pos = Int(Rnd() * size)
result = result & list(pos) & ":"
size = size - 1
list(pos) = list(size)
Next
MsgBox result
End Sub
Это сгенерировано на трех отдельных прогонах:
:5:7:4:2:9:1:0:8:3:6:
:3:9:6:0:7:8:5:4:2:1:
:7:6:3:5:1:8:9:0:4:2: