Есть ли способ рандомизировать через массив без повторения, а затем снова чисто l oop? - PullRequest
0 голосов
/ 09 апреля 2020

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

private string[] numbers = {
    "1",
    "2",
    "3",
    "4",
    "5",
    "6",
    "7",
    "8",
    "9",
    "10"
};

private string[] previousNumbers = { "", "", "", "", "", "", "", "", "", "" };

private void Randomize(int min, int max)
{
    Random rnd = new Random();
    return rnd.Next(min, max);
}

private string ReturnText()
{
    int num = Randomize(0, 9);
    string number = numbers[num];
    previousNumbers.SetValue(number, num);
    if (number == previousNumbers[num])
    {
        string number_ = numbers[Randomize(0, 9)]
        return number_;
    } else if (number != previousNumbers[num])
        return number;
}

Исключение появляется после того, как я пытаюсь отобразить возвращенный текст, используя событие нажатия кнопки ...

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Это установит предыдущие номера в случайную строку [] значений в числах:

        private int Randomize(int max)
        {
            Random rnd = new Random();
            return rnd.Next(0, max);
        }

        private void ReturnText()
        {
            var lstStrings = numbers.ToList<string>();
            int i = 0;
            while (lstStrings.Count() > 0)
            {
                int num = Randomize(lstStrings.Count());
                string number = lstStrings[num];
                previousNumbers[i] = number;                
                lstStrings.Remove(lstStrings[num]);
                i++;
            }           
        }
0 голосов
/ 09 апреля 2020

Я пытался запустить этот код в LINQpad, однако в этом коде есть и другие ошибки. Я очистил код ниже:

private string[] numbers = {
    "1",
    "2",
    "3",
    "4",
    "5",
    "6",
    "7",
    "8",
    "9",
    "10"
};

private string[] previousNumbers = { "", "", "", "", "", "", "", "", "", "" };

private int Randomize(int min, int max)
{
    Random rnd = new Random();
    return rnd.Next(min, max);
}

private string ReturnText()
{
    int num = Randomize(0, 9);
    string number = numbers[num];
    previousNumbers.SetValue(number, num);
    if (number == previousNumbers[num])
    {
        string numberToReturn = numbers[Randomize(0, 9)];
        return numberToReturn;
    }
    else if (number != previousNumbers[num])
    {
        return number;
    }
    else
    {
        return string.Empty;
    }
}

Типы ошибок в коде, похоже, что этот код не был запущен в Visual Studio, и его синтаксис может вызвать сбой сборки:

  • Случайное возвращение void, когда оно возвращает int.
  • Не все пути кода возвращаются в ReturnText.
  • Отсутствуют точки с запятой.

С исправлением код, когда я вызываю ReturnText () снова и снова, я не получаю StackOverflowException.

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