好吧所以我正在制作一个数独求解器以获得乐趣(是的,我知道它已经被多次制作过)所以让人们在解决之前输入值我使用了数字下降(81其中一个是准确的) 我想将所有这些分配给一个数组:
int[,] Sudoku = new int[9, 9];
然后单击“求解”它应该做的第一件事是将所有值放在数组中:
private void button1_Click(object sender, EventArgs e)
{
for (int x = 0; x < 81; x++)
{
for (int y = 0; y < 9; y++)
{
if (x-1 == 0)
{
Sudoku[x - 1, y - 1] = Convert.ToInt32(numericUpDown[y].Value);
}
else
{
Sudoku[x - 1, y - 1] = Convert.ToInt32(numericUpDown[x][y].Value);
}
}
}
}
显然你不能这样做:“numbericupdown [y]”但是那可以让你看到我想要做的事情....
sooooo想法?
谢谢, Craiggles
答案 0 :(得分:1)
如果您将numericUpDown
控件放入9x9网格中,就像您对结果一样,那么复制值将非常简单。
private void button1_Click(object sender, EventArgs e)
{
for (int x = 0; x < 9; x++)
{
for (int y = 0; y < 9; y++)
{
Sudoku[x, y] = Convert.ToInt32(numericUpDown[x, y].Value);
}
}
}
如果控件实际上都被删除到表单上,那么不要这样做,从表单中删除它们。使用代码创建它们,以编程方式放置它们,并将它们放入二维数组中。因为这是一个学习计划,所以这是以编程方式进行GUI的好方法,而不仅仅是通过拖放操作。
答案 1 :(得分:0)
我会动态地构建/放置它们,同时将它们放入数组或列表中,但如果它们已经布局到表单上,您只需将它们添加到通用列表中即可迭代它们。 / p>
List<NumericUpDown> nums = new List<NumericUpDown>();
nums.add(numericUpDwown1);
然后你可以计算nums [1] * nums [9] ......或者其他什么
答案 2 :(得分:0)
我想我明白你在做什么......两个建议:1)将所有控件放入NumericaUpDown对象数组中。然后你可以做numericUpDown [y] .Value。否则,2)将控件命名为以数字(或某些类似约定)结尾,然后使用反射找到正确的控件并获取其值。
答案 3 :(得分:0)
实际上没有理由不能创建控件并将它们存储在各种集合类中 - 而不仅仅是数组。
我会考虑将这些集合放入某种结构集合中,以反映数独网格的结构。
您可以动态创建控件并将其放置在表单上,也可以将它们保存在集合中。