0

テキストボックスの割り当てでこのエラーが発生しましたが、理由がわかりません。何をすべきかについて誰かアドバイスをもらえますか?

    private void button2_Click(object sender, EventArgs e)
    {
        int n = Convert.ToInt32(textBox16.Text);
        int t = Convert.ToInt32(textBox17.Text);
        matrix.CalculeazaQR(n, t);

        string temp;

        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                temp = matrix.q[i, j].ToString("0.00");

                if (j % (n - 1) == 0)
                    temp += "\n";

                temp += ",";

            }

        }
        textBox3.Text = temp;

    }
4

4 に答える 4

5

for ループ内で代入tempしているため、コンパイラはループ内に入るかどうかを判断できません。temp次のように on topを初期化できます。

string temp = string.Empty;

ループ内のステートメントは、条件が true の場合にのみ実行され、コンパイラはコンパイル時に条件が true かどうかを判断できないため、temp が未割り当てのままであると見なされるため、エラーが発生します。

于 2013-03-26T10:30:30.407 に答える
2

このように置きます:

string temp="";

実際に使用する前に、文字列(または任意の変数)を空または何かに割り当てる必要があります。

于 2013-03-26T10:30:37.000 に答える
1

「どうすればいいのか、誰かアドバイスをくれませんか?」
さて、テキストを初期化します:

string temp = string.Empty;

コンパイラーは、( で使用される) temptextBox3.Text = temp;がループ後に値を持つかどうかを知る方法がありません (たとえば、n < 1 の場合)。

于 2013-03-26T10:30:36.953 に答える
1

1 つには、最初からループが壊れています。の値を完全に置き換えているため、最後の反復のみが重要になります (つまり、 と の両方がijある場合)。n - 1temp

しかし、コンパイラはそれnが正であることを認識していません。つまりループに入る可能性があることを認識していません。if一般に、コンパイラは、ステートメント、forステートメント、ステートメント、whileまたはループの本体に入ることを決して想定しません。foreachしたがって、これらの本体内で行われた割り当ては、ローカル変数が最後に確実に割り当てられているかどうかに影響しません。ステートメント...そして、ローカル変数から読み取る前に、ローカル変数を確実に割り当てる必要があります(メソッドの最後で行っているように)。

StringBuilderループ内で追加するa が実際に必要であると思われます。

StringBuilder builder = new StringBuilder();
for (...)
{
    for (...)
    {
        builder.AppendFormat("{0:0.00},", matrix.q[i, j]);            
    }
    builder.Append("\n");
}
textBox3.Test = builder.ToString();
于 2013-03-26T10:32:02.593 に答える