洗牌字符串数组每个只使用一次
Shuffling string array only use each one once
我有一个字符串数组,它将被放入一个按钮的文本中,它正在正确地打乱数组,但是当涉及到将文本放入按钮内部时,它会将它们全部替换为相同的值并且无法知道该值是否已被使用,我猜这是由于循环处于错误的位置或类似的性质。
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();
}
}
}
}
是的,您调用了 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;
}
我有一个字符串数组,它将被放入一个按钮的文本中,它正在正确地打乱数组,但是当涉及到将文本放入按钮内部时,它会将它们全部替换为相同的值并且无法知道该值是否已被使用,我猜这是由于循环处于错误的位置或类似的性质。
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();
}
}
}
}
是的,您调用了 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;
}