我正在进行一项小任务,我需要在10行10列的数据网格视图中随机显示数据(0到99 - 确保显示所有数字)。我无法弄清楚需要为这种情况编写的逻辑。目前我正在做如下所示,两个用于循环,一个用于行和其他列并迭代它......
int[] arr = new int[] { 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 58, 69, 60, 61, 62, 63, 64 };
char c = Convert.ToChar(arr.GetValue(new Random().Next(0, 21)));
for (int row = 0; row < 10; row++)
{
for (int col = 0; col < 10; col++)
{
if ((row + col) == 9)
{
this.dataGridView1.Rows[row].Cells[col].Value = string.Format("{0} {1}", c, ((row + 1) * 9));
}
else
{
this.dataGridView1.Rows[row].Cells[col].Value = string.Format("{0} {1}", Convert.ToChar(arr.GetValue(new Random().Next(0, 21))), row * 10 + (col));
System.Threading.Thread.Sleep(15);
}
}
}
Out put:
预期:
将数字从0到99随机分配的代码。
先谢谢。
答案 0 :(得分:2)
通过小型作业你的意思是学校作业吗?如果是这样,我不想为你写一切,而是指出你正确的方向:
第一步我将初始化一个大小为100的数组,并将数字0-99放在数组上。然后,我会找到一个用于改组数组的方法(Linq的OrderBy与Random类一起使用对你来说可能对你有用)。然后,我将遍历洗牌数组,并将这些项放在网格中。我认为你有一般的网格循环思想,嵌入式for循环......但我不确定线程睡眠的重点是什么。
答案 1 :(得分:0)
如果您没有完成编码,请检查一下......
protected void Button1_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
for (int i = 0; i < 10; i++)
dt.Columns.Add("col" + i.ToString(), typeof(int));
Random r = new Random();
List<int> l = new List<int>(100);
int temp=0;
for (int i = 9; i >= 0; i--)
{
DataRow dr = dt.NewRow();
for (int j = 0; j < 10; j++)
{
temp = r.Next(99);
if (!l.Contains(temp) || (j == 0 && i == 0))
{
dr["col" + j.ToString()] = temp;
l.Add(temp);
}
else
j -= 1;
}
dt.Rows.Add(dr);
}
GridView1.DataSource = dt;
GridView1.DataBind();
}
答案 2 :(得分:0)
这是我终于能够做到的。它工作!!!
public static class ThreadSafeRandom
{
[ThreadStatic]
private static Random Local;
public static Random ThisThreadsRandom
{
get { return Local ?? (Local = new Random(unchecked(Environment.TickCount * 31 + Thread.CurrentThread.ManagedThreadId))); }
}
}
static class MyExtensions
{
public static void Shuffle<T>(this IList<T> list)
{
int n = list.Count;
while (n > 1)
{
n--;
int k = ThreadSafeRandom.ThisThreadsRandom.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
}
上面的代码对数字进行了改组。
var numbers = new List<int>(Enumerable.Range(0, 100));
numbers.Shuffle();
List<int> final = numbers.GetRange(0, 100);
int[,] f = new int[10, 10];
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
f[i, j] = final[(i * 10) + j];
}
}
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (f[i, j] % 9 == 0)
{
this.dataGridView1.Rows[i].Cells[j].Value = string.Format("{0} {1}", charSymbol, f[i, j]);
}
else
{
this.dataGridView1.Rows[i].Cells[j].Value = string.Format("{0} {1}", GetRandomChar(), f[i, j]);
}
}
}