Не могу понять, почему мой цикл пока застревает - PullRequest
0 голосов
/ 26 апреля 2019

В настоящее время работает над написанием кода для Windows Forms версии карточной игры war.Мне нужен был способ перемешать список, чтобы рандомизировать колоду.Я уже определил списки для deck и shuffledDeck как список строк.

Когда я запускал createDeck (), он выводил его в текстовое поле в моей форме Windows, чтобы убедиться, что оно создает список правильно,У меня также был тест, чтобы убедиться, что deck.Count () был равен 52

private void shuffle()
        {
            createDeck();
            shuffledDeck = deck;
            Random r = new Random();
            int randomIndex = 0;
            while (deck.Count > 0)
            {
                randomIndex = r.Next(0, deck.Count);
                shuffledDeck.Add(deck[randomIndex]);
                deck.RemoveAt(randomIndex);
            }

Это мое тестирование, что колода на самом деле перетасовывается

            for (int a = 0; a <= 51; a++)
            {
                textBox1.Text += " " + shuffledDeck[a];
            }

Я ожидал бы, чтоЯ бы видел перетасованную колоду каждый раз, однако всякий раз, когда я ее запускаю, Visual Studio зависает, и мне приходится принудительно выходить из программы.

1 Ответ

2 голосов
/ 26 апреля 2019

Строка shuffledDeck = deck; делает shuffledDeck и deck ссылкой на один и тот же объект.Таким образом, внутри цикла while вы удаляете и добавляете «карточки» в одну и ту же колоду, и условие колода всегда будет истинным.

Попробуйте использовать этот объект-клонер: Глубокое клонирование объектов

И заменить shuffledDeck = deck; на shuffledDeck = deck.Clone();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...