我有一个像这样的矩阵
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
为什么会出现此错误?请给我解决方案。
答案 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;
}