2013-09-01 39 views
0

歡迎,我在開關中的小功能問題。 我的問題是 這裏的「未分配的局部變量‘矩陣’的使用」是代碼:開關中的變量,開關循環,情況2中的錯誤

static void Main(string[] args) 
    { 

     char wyj = 'n'; 
     do 
     { 
      Console.WriteLine("1. add numbers into matrix \n2. show matrix \n3. end"); 
      int a; 
      Console.Write("\nYour choice: "); 
      a = int.Parse(Console.ReadLine()); 

      switch (a) 
      { 
       case 1: 
        Console.WriteLine("You choose: 1"); 

        int element; 
        Console.Write("\nsize of matrix: "); 
        int matrixsize; 
        matrixsize = Int32.Parse(Console.ReadLine()); 
        int[,] matrix = new int[matrixsize, matrixsize]; 

        for (int i = 0; i <= matrixsize - 1; i++) 
        { 
         for (int j = 0; j <= matrixsize - 1; j++) 
         { 
          Console.Write("element{0},{1} =", i + 1, j + 1); 
          element = int.Parse(Console.ReadLine()); 
          matrix[i, j] = element; 
         } 
        } 
        break; 

       case 2: 
        Console.WriteLine("You choose 2"); 
        foreach (int x in matrix) 
         Console.Write(x); 
         break; 

       case 3: 
        Console.WriteLine("End the program? y- yes, n- no"); 
        wyj = char.Parse(Console.ReadLine()); 
        break; 

      } 
     } 
     while (wyj != 'y'); 
     Console.WriteLine("Koniec programu!"); 

     Console.ReadKey(); 
    } 

我需要做什麼?

在Doc Brown答案後,如果沒有任何事情發生,矩陣是空的。 我認爲循環是問題?

+0

代碼審查可能是一個更好的目標,但@DocBrown是正確的。 – itsbruce

+1

@itsbruce不,代碼審查不適用於無法使用的代碼。如果你不知道他們的規則,請不要將其他人發送到其他網站。 – svick

回答

0

您已經假定編譯器無法驗證 - 您將始終生成正在形成查看它的矩陣。編譯器知道switch語句中不一定是這種情況,所以它可以防止你使用一個可能從未被設置的變量(或者在這種情況下,甚至聲明)。如果你想保留這段代碼,在case外部聲明該變量並將其初始化爲一個新的矩陣。然後檢查情況二是否安全顯示。

2

您不應該假設用戶先輸入1,然後輸入2,但是可能會認爲這可能是相反的。

  • 聲明int[,] matrix必須做 switch語句之前,您應該設置變量爲null有int[,] matrix=null;
  • 初始化matrix = new int[matrixsize, matrixsize]可以保持它在哪裏,但
  • case 2塊,您必須檢查矩陣是否已初始化if(matrix!=null) {/*...*/}
+0

對不起Doc Brown,我在註冊域名後沒有檢查。 –

+0

Doc Brown回答後,如果沒有任何反應,矩陣沒有顯示。也許循環是問題? –

+0

文件您可以檢查您電腦上的代碼嗎?謝謝! –

0

matrix變量對sw癢。 case 2使用從case 1變量,因爲case不引入一個範圍,但它是從來沒有那裏初始​​化,因爲當執行case 2時,初始化程序不執行。

移動變出switch的,如果你提供的初始化會沉默的錯誤,但它仍然會在每次迭代中變量,所以當你填補它在case 1,它會做的時候出來的空case 2在下一次迭代中。您需要將變量一直移出循環,以使其值保持不變。

你還是不應該假定用戶提供正確的順序輸入,所以在case 2你必須檢查該基質已經填寫。