2013-03-26 38 views
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; 

    } 

回答

5

您在for循環和編譯器分配temp內不能確定是否會得到循環與否裏面。您可以像上面初始化temp:內環路

string temp = string.Empty; 

語句,如果條件爲真,並在編譯時,編譯器無法判斷病情是否會真還是假只會執行,它會考慮臨時保留未分配,因此錯誤。

+0

謝謝你,它的工作。 – 2013-03-26 11:31:49

+0

@ guNNer2bad,歡迎您訪問http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Habib 2013-03-26 11:34:11

1

「誰能給我一個建議做什麼?」
那麼,初始化文本:

string temp = string.Empty; 

編譯器無法知道是否(N < 1時例如)溫度(其上使用textBox3.Text = temp;)具有循環之後的值的方式。

2

放像這樣:

string temp=""; 

你必須指定字符串(或變量)爲空或東西之前,你使用它。

+0

*「您必須在聲明時將字符串賦給空** 「* 其實,你沒有。只有當稍後使用變量時,您需要在使用變量之前爲其賦值*。 '字符串溫度; temp =「foo」; Console.WriteLine(溫度);'。宣言中沒有任何分配,仍然有效。這是因爲編譯器可以確定100%的確定性,在使用* temp *之前,它將被賦值。也適用:'字符串溫度;如果(a == b)temp =「foo」else temp =「bar」; Console.WriteLine(foo);'因爲在if語句的任何一種情況下foo都會被分配一個值。 – RobIII 2013-03-26 10:38:07

+0

@RobIII我同意,我相應地編輯了我的答案。 – Freelancer 2013-03-26 10:42:15

1

一件事,你的循環被打破,開始與 - 只有最後一個迭代將物質(即當兩個ijn - 1)如你完全替代的temp值。

但編譯器不知道n是肯定的 - 它不知道你會有史以來進入循環。在一般情況下,編譯器不會認爲你輸入if聲明的主體,for聲明,一個while語句或foreach環 - 所以這些機構內的任何作業不影響是否局部變量明確賦值或者不在聲明的結尾......並且必須明確指定一個局部變量,然後才能從中讀取(如在方法結尾處所做的那樣)。

我懷疑你真的想你追加到循環內的StringBuilder

StringBuilder builder = new StringBuilder(); 
for (...) 
{ 
    for (...) 
    { 
     builder.AppendFormat("{0:0.00},", matrix.q[i, j]);    
    } 
    builder.Append("\n"); 
} 
textBox3.Test = builder.ToString(); 
相關問題