Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每次循环执行C时更改方法调用#_C#_Loops_Methods_For Loop - Fatal编程技术网

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

C# 每次循环执行C时更改方法调用#,c#,loops,methods,for-loop,C#,Loops,Methods,For Loop,好的,我想打电话给你 for (int i = 0; i < b; b--) { color += ChooseColor() + " "; } for(int i=0;i在这种情况下创建Random类static的实例) 这边 static Random random = new Random(); // Global Declaration private static string ChooseColor() { var colors = new List<

好的,我想打电话给你

for (int i = 0; i < b; b--)
{
    color += ChooseColor() + " ";
}
for(int i=0;i
重要的是它会被多次调用。我的ChooseColors()是

private静态字符串ChooseColor()
{
随机=新随机();
var colors=新列表{“蓝色”、“红色”、“绿色”、“靛蓝”、“黑色”、“白色”、“紫罗兰色”、“绿松石色”、“粉色”、“薰衣草色”、“煤渣色”、“深褐色”、“橙色”};
int index=random.Next(colors.Count);
字符串colorName=颜色[索引];
颜色。移除(索引);
返回颜色名称;
}

问题是,我希望它每次都调用ChooseColor的一个新实例。例如,它将打印黑白而不是黑白。现在它一次又一次地打印完全相同的内容,而不是转储电流并再次调用(这是我认为loops所做的>在这种情况下创建Random类static的实例)

这边

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;
}
static Random Random=new Random();//全局声明
私有静态字符串ChooseColor()
{
var colors=新列表{“蓝色”、“红色”、“绿色”、“靛蓝”、“黑色”、“白色”、“紫罗兰色”、“绿松石色”、“粉色”、“薰衣草色”、“煤渣色”、“深褐色”、“橙色”};
int index=random.Next(colors.Count);
字符串colorName=颜色[索引];
颜色。移除(索引);
返回颜色名称;
}
要了解更多信息,请阅读此


在这种情况下,创建随机类static的实例

这边

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;
}
static Random Random=new Random();//全局声明
私有静态字符串ChooseColor()
{
var colors=新列表{“蓝色”、“红色”、“绿色”、“靛蓝”、“黑色”、“白色”、“紫罗兰色”、“绿松石色”、“粉色”、“薰衣草色”、“煤渣色”、“深褐色”、“橙色”};
int index=random.Next(colors.Count);
字符串colorName=颜色[索引];
颜色。移除(索引);
返回颜色名称;
}
要了解更多信息,请阅读此


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

此外,随机化器在每次方法调用时都会再次初始化-在方法外部也只初始化随机化器一次

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;
}
private static Random=new Random();
私有静态列表颜色=新列表{…};
私有静态字符串ChooseColor()
{
如果(colors.Count>0)
{
int index=random.Next(colors.Count);
字符串colorName=颜色[索引];
颜色。移除(索引);
返回颜色名称;
}
返回字符串。空;
}

请注意,现在调用此方法时,如果颜色列表中没有颜色,则返回空字符串。我认为除了修复随机数发生器问题外,您还应该重新考虑设计(特别是为什么需要从列表中删除颜色).

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

此外,随机化器在每次方法调用时都会再次初始化-在方法外部也只初始化随机化器一次

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;
}
private static Random=new Random();
私有静态列表颜色=新列表{…};
私有静态字符串ChooseColor()
{
如果(colors.Count>0)
{
int index=random.Next(colors.Count);
字符串colorName=颜色[索引];
颜色。移除(索引);
返回颜色名称;
}
返回字符串。空;
}

请注意,现在调用此方法时,如果颜色列表中没有颜色,则返回空字符串。我认为除了修复随机数发生器问题外,您还应该重新考虑设计(特别是为什么需要从列表中删除颜色).

您正在创建的
随机
实例在时间上过于接近。由于它们是从时钟开始播种的,它们将以相同的数字开始。在函数外部创建一个实例,并将其发送到您调用它的位置

此外,您每次都要创建一个新列表,因此从列表中删除项目没有任何效果。在函数外部创建列表:

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;
}
Random Random=new Random();
列表颜色=新列表{“蓝色”、“红色”、“绿色”、“靛蓝”、“黑色”、“白色”、“紫罗兰色”、“绿松石色”、“粉色”、“薰衣草色”、“煤渣色”、“深紫色”、“橙色”};
对于(int i=0;i
您正在创建的
随机
实例在时间上过于接近。由于它们是从时钟开始播种的,它们将以相同的数字开始。在函数外部创建一个实例,并将其发送到您调用它的位置

此外,您每次都要创建一个新列表,因此从列表中删除项目没有任何效果。在函数外部创建列表:

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;
}
Random Random=new Random();
列表颜色=新列表{“蓝色”、“红色”、“绿色”、“靛蓝”、“黑色”、“白色”、“紫罗兰色”、“绿松石色”、“粉色”、“薰衣草色”、“煤渣色”、“深紫色”、“橙色”};
对于(int i=0;i
这不是问题所在,
new Random()
每次isIt都是一个问题,因为他试图通过从数组中删除返回的颜色来限制可能返回的颜色数-如果每次调用时都再次填充列表,则这不起作用。规范没有指定颜色不再出现,因此无需将其从数组中删除。否则,他的代码只会起作用k代表
b
规格没有规定颜色不会再次出现
-你能给我们看看规格吗