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

}

コントロールが実際にすべてフォームにドロップされている場合は、それを行わず、フォームから削除してください。コードを使用してそれらを作成し、プログラムで配置して、2 次元配列に配置します。とにかくこれは学習プログラムであるため、ドラッグアンドドロップだけでなく、プログラムで GUI を実行することをお勧めします。

于 2011-08-04T02:46:54.940 に答える
0

私はあなたが何をしているのか理解していると思います... 2 つの提案: 1) すべてのコントロールを NumericaUpDown オブジェクトの配列に入れます。次に、numericUpDown[y].Value を実行できます。それ以外の場合は、2) 数字で終わるコントロールに名前を付け (または同様の規則)、リフレクションを使用して正しいものを見つけ、その値を取得します。

于 2011-08-04T02:46:37.697 に答える
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 に答える