2017-08-01 241 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();