0

好的,所以我正在制作一个数独求解器(是的,我知道它已经被制作了很多次)所以让人们在求解之前输入值,我使用了 numericupdown (准确地说是其中的 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]”但那是让你看看我想要做什么......

好主意?

谢谢,克雷格尔斯

4

4 回答 4

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

}

如果控件实际上都放在表单上,​​那么不要这样做,将它们从表单中删除。使用代码创建它们,以编程方式放置它们,并将它们放入二维数组中。由于无论如何这都是一个学习程序,因此以编程方式而不是仅通过拖放操作是一种很好的做法。

于 2011-08-04T02:46:54.940 回答
0

实际上,完全没有理由不能创建控件并将它们存储在各种集合类中——不仅仅是数组。

我会考虑将它们放入某种结构化的集合中,这些集合反映了数独网格的结构。

您可以动态地创建控件并将其放置在表单上以及将它们保存在集合中。

于 2011-08-04T02:49:39.380 回答
0

我会动态地构建/放置它们,同时将它们放入数组或列表中,但如果它们已经布局到表单上,您可以将它们添加到通用列表中以迭代它们。

List<NumericUpDown> nums = new List<NumericUpDown>();
nums.add(numericUpDwown1);

那么你可以计算 nums[1]*nums[9]... 或其他

于 2011-08-04T02:46:15.027 回答
0

我想我明白你在做什么......两个建议:1)将所有控件放入 NumericaUpDown 对象数组中。然后你可以做 numericUpDown[y].Value。否则,2) 命名以数字结尾的控件(或一些类似的约定),然后使用反射找到正确的控件并获取其值。

于 2011-08-04T02:46:37.697 回答