Как случайным образом перемашать всё в ListBox

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Как случайным образом перемашать всё в ListBox

Сообщение Nikolka » 24.02.2005 (Чт) 15:47

Вот алгоритм потребовался, который случайным образом перемешивает все его элементы (ну Item`ы). Просто

Rnd*(ListBox.ListCount-1) - а что делать с повторами. Не исключать же и заново все делать. Может кто подскажет алгоритм.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 24.02.2005 (Чт) 15:59

выполняй и каждый раз уменьшай окно значений на вставленное кол-во записей

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Re: Как случайным образом перемашать всё в ListBox

Сообщение vvs_adm » 24.02.2005 (Чт) 17:40

Nikolka писал(а):Вот алгоритм потребовался, который случайным образом перемешивает все ... элементы

Когда то я писал сервер-клиент, где сервер расдает карты (преф). Тоже хотел по рандому устанавливать карты, уменьшая и т.д. Но потом мне пришел в голову один алгоритм, на котором я и остановился ( не претендую на оригинальность, но в поисковиках не смотрел) : можно рандомом выбрать две карты(итема) и поменять их местами. И так несколько раз. Простенько и со вкусом :)

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 24.02.2005 (Чт) 18:00

Private Sub Form_Load()
Dim I As Integer
Dim J As Integer

For I = 0 To 200
List1.AddItem I
Next I

Dim A, B As String
For I = 0 To List1.ListCount - 1

Randomize Timer
J = Rnd * List1.ListCount - 1

While J = -1
J = Rnd * List1.ListCount - 1
Wend

A = List1.List(I)
B = List1.List(J)

List1.List(I) = B
List1.List(J) = A
Next I
End Sub


Вот вариант, на форме только объект List1...Проюзай... :roll:
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Сообщение Nikolka » 24.02.2005 (Чт) 18:34

Пасиба!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 35

    TopList