2017-08-01 143 views
1

小數目我有這樣查找矩陣

13 7 22 

101 50 3 

我想打印來自同一數量最少的矩陣。 下面是我的代碼:{ 「指數是數組的範圍外」}

using System; 
class Class1 
{ int min(int[,] arr) 
    { 
     int small = arr[0, 0]; 
     for (int i = 0; i < 3; i++) 
     { 
      for (int j = 0; j < 3; j++) 
      { 
       if (small > arr[i, j]) 
       { 
        small = arr[i, j]; 
       } 
      } 
     } 
     return small; 
    } 
    public static void Main() 
    { 
     int[,] x; 
     x = new int[,] { { 13, 7, 22 }, { 101, 50, 3 } }; 

     Class1 obj = new Class1();   
     Console.WriteLine("Smallest Element : {0}", obj.min(x)); 
     Console.ReadLine(); 
    } 
} 

引發Error作爲

預期輸出是3

爲什麼會出現此錯誤?請給我解決方案。

+1

你的數組有2行和3列。外循環是遍歷行,內循環是列。因此,從邏輯上說,你的外部循環條件應該是我<2.Happy Coding ..如果你發現評論和回答有幫助,請投票。 – Pavan

+0

謝謝@Pavan ..是的 –

+0

我覺得缺乏調試工作..如果你嘗試過,你會自己知道。 –

回答

2

你的陣列是2X3讓你有第一次循環指定條件是i<2

喜歡這個

int min(int[,] arr) 
     { 
      int small = arr[0, 0]; 
      for (int i = 0; i < 2; i++) 
      { 
       for (int j = 0; j < 3; j++) 
       { 
        if (small > arr[i, j]) 
        { 
         small = arr[i, j]; 
        } 
       } 
      } 
      return small; 
     } 
+1

謝謝..爲我工作。 –

+2

如果下一個數組是4%5,該怎麼辦?更好地使用'GetLength'方法。 –

+1

IT在代碼中硬編碼。在用戶輸入的情況下,它會打破 – Pavan

5

注意,您可以使用foreach超過迭代多維數組的所有元素,而無需擔心指數。

所以這是簡單的寫你min()方法,像這樣(請注意,我還使用Math.Min()找到兩個值中較低,而不是寫我自己if做到這一點):

static int min(int[,] arr) 
{ 
    int small = int.MaxValue; 

    foreach (int n in arr) 
     small = Math.Min(n, small); 

    return small; 
} 

而且注意我是如何初始化small爲最大可能的int,以避免必須訪問數組的第一個值才能初始化它。

如果你想使用LINQ到你可以做這同樣的事情:

int min = array.Cast<int>().Min(); 

Cast<int>需要返回的原因是因爲多維數組僅實現非通用IEnumerable,而不是通用IEnumerable<T>See this question for more details

但是,如果您正在學習C#,那麼使用Linq高級主題,在這種情況下,現在不用擔心!

+0

感謝@matthew這個Linq方法看起來很好,很容易的一行代碼。 –

+0

是的......好的解決方案......'int min = array.Cast ().Min();' –

3

嘗試下面的代碼,它將解決X x X矩陣

List<List<int>> matrix = new List<System.Collections.Generic.List<int>>() 
    { 
     new List<int>() {5,10,6}, new List<int>() {6,11,7}, new List<int>() {7,12,8}, new List<int>() {8,13,9} 
    }; 

要找到最小值:

matrix.SelectMany(m => m.Select(n => n)).OrderBy(m => m).FirstOrDefault().Dump(); 

要找到最大值

matrix.SelectMany(m => m.Select(n => n)).OrderByDescending(m => m).FirstOrDefault().Dump(); 

如果您使用的多維array

int[,] matrix = { { 1, 2, 3 }, { 3, 4, 5 } }; 

IEnumerable<int> query = matrix.OfType<int>(); 

query.SelectMany(m => m.Select(n => n)).OrderBy(m => m).FirstOrDefault().Dump();