Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с циклом 
:(
    Опции темы
sergio11
  Дата 13.3.2011, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 17.12.2010

Репутация: нет
Всего: нет



не могу понять почему не правильно рабатает цикл. 
вот есть код который перемешивает содержимое списка.
Код

public  void ShuffleList<T>(List<T> list)
        {
            Random rand = new Random();
            for (int i = 0; i < list.Count; i++)
            {
                T tmp = list[i];
                list.RemoveAt(i);
                list.Insert(rand.Next(0, list.Count), tmp);
            }
        }

после я у меня создаются 2 списка А и А1 по 3 элемента. причем изначально они полностью одинаковы. мне нужно перемешивать содержимое А до тех пор пока элементы в А и в А1 будут на разных позициях. Тоесть было 123, а должно получиться 312 или 231, ну в общем смысл понятен. Для всего этого я написал условие и поместил в цикл, но он не всегда срабатываел или вобще не работает.
Код

 do
            {
                ShuffleList(A);
            }
            while ((A1[0] == A[0]) && (A1[1] == A[1]) && (A1[2] == A[2]));

Если кто сможет понять почему не работает, то помогите, напишите, а то уже 2 месяц курсяк не могу закончить.

попробовал вот это
Код

 while ((A1[0] == A[0]) && (A1[1] == A[1]) && (A1[2] == A[2]))
            {
                ShuffleList(A);
            }

результат тотже не всегда срабатывает. а если несколько раз на кнопку понажимаю, то практически перестаёт работать.
PM MAIL   Вверх
kuzyara
Дата 13.3.2011, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 215
Регистрация: 13.11.2006

Репутация: нет
Всего: 1



ну во первых и во вторых гугл
в-третьих уверен ли ты что "T tmp = list[i]" и "(A1[0] == A[0])" работают как ты ожидаешь?

Это сообщение отредактировал(а) kuzyara - 13.3.2011, 18:17
--------------------
подпись
PM MAIL   Вверх
diadiavova
Дата 13.3.2011, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(sergio11 @  13.3.2011,  15:09 Найти цитируемый пост)
 Тоесть было 123, а должно получиться 312 или 231

А если получится 132 ? Не думал о том, что при рандомном перемешивании некоторые элементы могут остаться на своих местах? Тем более, что общее количество элементов в твоем примере невелико.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
sergio11
Дата 13.3.2011, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 17.12.2010

Репутация: нет
Всего: нет



Цитата(diadiavova @  13.3.2011,  21:17 Найти цитируемый пост)
Не думал о том, что при рандомном перемешивании некоторые элементы могут остаться на своих местах?

так в этом и смысл цикла. что бы он переставлял пока все не станет как надо

PM MAIL   Вверх
diadiavova
Дата 13.3.2011, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(sergio11 @  13.3.2011,  21:24 Найти цитируемый пост)
так в этом и смысл цикла. что бы он переставлял пока все не станет как надо

То есть ты в цикле вызываешь рандомную перестановку для того, чтобы ни один элемент не оказался на своем месте? Я просто не догнал сразу. Но по-моему ты избрал не лучший способ. Опять таки для большого количества элементов это будет дорогое удовольствие, а для малого, можно определить несколько перестановок и выбирать одну из них. В частности, если ты возьмешь последний элемент и поместишь его в начало, то однозначно достигнешь желаемого. smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
sergio11
Дата 13.3.2011, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 17.12.2010

Репутация: нет
Всего: нет



Цитата(diadiavova @  13.3.2011,  21:33 Найти цитируемый пост)
В частности, если ты возьмешь последний элемент и поместишь его в начало, то однозначно достигнешь желаемого.  

ну впринцепи тогда можно просто вручную поменять местами элементы и не создавать себе геморой. завтра так и сделаю.  smile  
PM MAIL   Вверх
Экскалупатор
Дата 13.3.2011, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



sergio11, я думаю тут именно не "поменять", а "переместить", т.е. последний поставить на первое место, а остальные сдвинуть.
если есть12345
то перемещаем 5 в начало, остальное сдвигаем, и получается 100% отличия от первоначального варианта
51234
PM MAIL ICQ   Вверх
sergio11
Дата 15.3.2011, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 17.12.2010

Репутация: нет
Всего: нет



Экскалупатор, ну вот так я в ручную сделал, а в цикле ещё пока времени нет придумывать, если кому не лень помогите smile 
PM MAIL   Вверх
sergio11
Дата 15.3.2011, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 17.12.2010

Репутация: нет
Всего: нет



Вот мой курсяк. не могу понять почему не правильно расставляет некоторые элементы? http://fayloobmennik.net/466821
PM MAIL   Вверх
-Mikle-
Дата 16.3.2011, 10:12 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 17
Всего: 59



присоединяюсь ко всем ответам. Курсак твой не качал, но чтоб у тебя голова не загорелась, то:
Цитата(sergio11 @  13.3.2011,  18:09 Найти цитируемый пост)
результат тотже не всегда срабатывает. а если несколько раз на кнопку понажимаю, то практически перестаёт работать. 

потому что в этом условии перемешиваться будет до тех пор, пока ВСЕ элементы стоят на том же месте (по сути только в самый первый, максимум второй раз)
Код

 while ((A1[0] == A[0]) && (A1[1] == A[1]) && (A1[2] == A[2]))


Соедини через ИЛИ и тогда будет перемешиваться до тех пор, пока хоть один элемент остался на том же месте.
Код

 while ((A1[0] == A[0]) || (A1[1] == A[1]) || (A1[2] == A[2]))


Хотя вот ТАК перемешивать никогда не нужно однозначно.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0881 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.