随机字符串数组仅使用每一次

时间:2015-01-23 04:26:20

标签: c# arrays loops shuffle

我有一个字符串数组,它将被放入一个按钮的文本中,它正确地重新排列数组但是当它将文本放在按钮内部时,它将用相同的值替换它们并且具有相同的值没有办法知道这个价值是否已被使用或者没有,我猜这是由于循环处于错误的位置或者是那种性质的东西。

protected void Page_Load(object sender, EventArgs e)
{

    string[] arr = new string[]
    {
        "0","1","2","3","4","5","6","7","8","9"
    };
    //shuffle code

    string[] shuffle = RandomStringArrayTool.RandomizeStrings(arr);
    foreach (string s in shuffle)
    {   
        foreach (var item in panel1.Controls)
        {
            if (item is Button)
            {  
                ((Button)item).Text = s.ToString();
            }
        }
    }


}

1 个答案:

答案 0 :(得分:3)

是的,你打电话给foreach两次!它为foreach的所有字符串执行第二个shuffle,以所有以shuffle[9]

值命名的按钮结束

将其更改为:

int i=0;
foreach (var item in panel1.Controls)
{
    if (item is Button)
    {  
        ((Button)item).Text = shuffle[i];
        i++;
    }
}

修改

你可以摆脱RandomStringArrayTool的事情,并实现自己的,这是一个简单的开始:

string str = "0123456789";
bool[] used = new bool[10];
Random r = new Random();

foreach (var item in shuffle_gbx.Controls)
{
    // keep looking for unused index
    int i = r.Next(0,10);
    while (used[i])
    {
       i = r.Next(0, 10);
    }

    ((Button)item).Text = str[i].ToString();
    used[i] = true;
 }