首页 > 解决方案 > 有没有办法通过一个数组随机化而不重复,然后再次干净地循环?

问题描述

我正在尝试为具有字符串数组的应用程序制作一个随机发生器,我需要该数组通过每个字符串而不重复它......但是,每次我尝试时,它都会显示 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;
}

在我尝试使用按钮的单击事件显示返回的文本后弹出异常...

标签: c#.net

解决方案


我试图在 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 中运行,其语法会导致构建失败:

  • 当它返回一个 int 时,随机化返回 void。
  • 并非所有代码路径都在 ReturnText 中返回。
  • 缺少分号。

当我一遍又一遍地调用 ReturnText() 时,使用固定的代码,我没有得到 StackOverflowException。


推荐阅读