【问题标题】:Shuffling string array only use each one once洗牌字符串数组每个只使用一次
【发布时间】:2015-01-23 04:26:19
【问题描述】:

我有一个字符串数组,它将被放置到按钮的文本中,它正确地对数组进行洗牌,但是当将文本放置在按钮内时,它会将它们全部替换为相同的值并具有无法知道该值是否已被使用,我猜这是由于循环处于错误的位置或类似性质。

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();
            }
        }
    }


}

【问题讨论】:

标签: c# arrays loops shuffle


【解决方案1】:

是的,你打电话给foreach 两次!它对shuffle的所有字符串执行第二个foreach,所以以所有以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;
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多