在矩阵中查找小数字

时间:2017-08-01 10:32:04

标签: c# arrays

我有一个像这样的矩阵

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();
    }
}

将错误抛出

  

{&#34;索引超出了数组的范围。&#34;}

预期输出为3

为什么会出现此错误?请给我解决方案。

3 个答案:

答案 0 :(得分:5)

请注意,您可以使用@mobile screen CSS .situations { table.situ { margin-left: 0%; } tr { display: block; color: #161616 !important; line-height: 1 !important; border: none; } #frame { height: 100px; width: 100%; } td { /* Behave like a "row" */ display: block; background-color: #ffffff; border: none; border-bottom: 0.5px solid #161616; position: relative; padding-left: 2%; text-align: center; height: 60px; width: $fullWidth; font-size: 14px !important; color: #161616 !important; padding-top: 8%; padding-bottom: 8%; line-height: 1 !important; } td:before { /* Now like a table header */ position: absolute; /* Top/left values mimic padding */ top: 6px; left: 6px; width: 45%; padding-right: 10px; white-space: nowrap; color: #161616 !important; line-height: 1 !important; border: none; } }迭代多维数组的所有元素,而不必担心索引。

因此,编写<section class="situations responsiveWidth center cinch2"> <div class="table"><table class="situ" id="frame" border="0" cellspacing="0" cellpadding="0"> <tr> <div id="situ4"><td class="product1" height="33.333%" rowspan="2"><a class="label black" href="product1.html">Text</a></td></div> <div id="situ6"><td class="product2" height="16.666%"><a class="label black" href="product2.html">Text</a></td></div> <div id="situ3"><td class="product3" height="50%" rowspan="3"><a class="label black" href="product3.html">Text</a></td></div> </tr> <tr> <div id="situ5"><td class="product4" height="16.666%"><a class="label black" href="product4.html">Text</a></td></div> </tr> <tr> <div id="situ2"><td class="product5" height="33.333%" colspan="2" rowspan="2"><a class="label black big" href="product5.html">Text</a></td></div> </tr> <tr> <div id="situ7"><td class="product6" height="16.666%"><a class="label black" href="product6.html">Text</a></td></div> </tr> <tr> <div id="situ8"><td class="product7" height="16.666%"><a class="label black startout" href="product7.html" id="situ8">Text</a></td></div> <div id="situ1"><td class="product8" height="33.333%" colspan="2" rowspan="2"><a class="label white big" href="product8.html">Text</a></td></div> </tr> <tr> <div id="situ9"><td class="product9" height="16.66666%"><a class="label black" href="product9.html" id="situ9">Text</a></td></div> </tr> </table></div> <br> </section>方法更为简单(请注意,我也使用foreach查找两个值中较低的值,而不是编写自己的min()这样做):

Math.Min()

另请注意我如何将if初始化为最大可能的int,以避免必须访问数组的第一个值来初始化它。

如果您想使用Linq做同样的事情,您可以这样做:

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

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

    return small;
}

需要small的原因是因为多维数组仅实现非通用int min = array.Cast<int>().Min(); 而不是通用Cast<int>See this question for more details

然而,如果你正在学习C#,那么使用Linq是一个高级主题,在这种情况下,暂时不要担心这个问题!

答案 1 :(得分: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}
    };

查找MIN值:

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

查找MAX值

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();

答案 2 :(得分: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;
        }