繁体   English   中英

每次循环执行C#时更改方法调用

[英]Changing method call every time loop executes C#

好吧,我想打电话

for (int i = 0; i < b; b--)
{
    color += ChooseColor() + " ";
}

重要的是它被多次调用。 我的ChooseColors()是

private static string ChooseColor()
{
    Random random = new Random();
    var colors = new List<string> { "Blue", "Red", "Green", "Indigo", "Black", "White", "Violet", "Turquoise", "Pink", "Lavender", "Cinder", "Fuschia", "Orange" };
    int index = random.Next(colors.Count);
    string colorName = colors[index];
    colors.RemoveAt(index);
    return colorName;
}

问题是,我希望它每次都调用ChooseColor的新实例。 例如,它将打印黑色白色而不是黑色黑色。 现在,它一遍又一遍地打印出完全相同的东西,而不是转储电流并再次调用(这是我认为循环>。<所做的事情)有什么建议吗?

该数组在方法中声明,因此在再次调用该方法时会重新声明并重新填充该数组。 您必须在方法外部静态声明颜色列表。

此外,随机化器会在每次方法调用时再次初始化-也在方法外仅对随机化器进行一次初始化。

private static Random random = new Random();
private static List<string> colors = new List<string> { ... };

private static string ChooseColor()
{
    if (colors.Count > 0)
    {
        int index = random.Next(colors.Count);
        string colorName = colors[index];
        colors.RemoveAt(index);
        return colorName;
    }

    return String.Empty;
}

请注意,此方法现在在调用时返回一个空字符串,而颜色列表中没有剩余的颜色。 我认为除了解决随机化器问题外,您还应该重新考虑设计(尤其是为什么必须从列表中删除颜色)。

在这种情况下,请创建Random类静态实例。

这条路

static Random random = new Random(); // Global Declaration

private static string ChooseColor()
{
    var colors = new List<string> { "Blue", "Red", "Green", "Indigo", "Black", "White", "Violet", "Turquoise", "Pink", "Lavender", "Cinder", "Fuschia", "Orange" };
    int index = random.Next(colors.Count);
    string colorName = colors[index];
    colors.RemoveAt(index);
    return colorName;
}

有关更多信息,请阅读此

生成的随机数始终相等

您正在创建Random实例的时间太近。 当它们从时钟开始播种时,它们都将从相同的数字开始。 在函数外创建一个实例,然后将其发送给您调用它的乳清。

另外,您每次都在创建一个新列表,因此从列表中删除项目无效。 在函数外创建列表:

Random random = new Random();
List<string> colors = new List<string> { "Blue", "Red", "Green", "Indigo", "Black", "White", "Violet", "Turquoise", "Pink", "Lavender", "Cinder", "Fuschia", "Orange" };
for (int i = 0; i < b; b--) {
  color += ChooseColor(colors, random) + " ";
}

private static string ChooseColor(List<string> colors, Random random) {
  int index = random.Next(colors.Count);
  string colorName = colors[index];
  colors.RemoveAt(index);
  return colorName;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM