我想在数组的结尾而不是开头开始搜索数组中的int
。我该怎么做?
请记住,这是一个2D数组。
编辑有人问我如何从头开始搜索:
在我的代码文件中,我从8x8打印一个矩阵,显示随机数(1-10)。用户在矩阵中提供一个要搜索的数字,然后代码返回找到该数字的位置:
Position position = new Position();
Position LookForNumber(int[,] matrix, int findNumber)
{
for (int r = 0; r < matrix.GetLength(0); r++)
{
for (int c = 0; c < matrix.GetLength(1); c++)
{
if (matrix[r, c] == findNumber)
{
Console.WriteLine("Your number {0} first appears on position {1},{2}", findNumber, r, c);
position.row = r;
position.column = c;
return position;
}
}
}
return position;
}
现在,我想查找用户放弃的号码的最后一个位置。
答案 0 :(得分:3)
要搜索2D数组,您需要2个循环,但是您可以按显示顺序进行循环:
Position LookForNumber(int[,] matrix, int findNumber)
{
Position position = new Position();
for (int r = matrix.GetLength(0) - 1; r >= 0 ; r--)
{
for (int c = matrix.GetLength(1) - 1; c >= 0 ; c--)
{
if (matrix[r, c] == findNumber)
{
Console.WriteLine("Your number {0} first appears on position
{1},{2}", findNumber, r, c);
position.row = r;
position.column = c;
return position;
}
}
}
return null;
}
答案 1 :(得分:2)
数组是2D事实与您的问题无关。
看看最常规的基本循环是如何工作的?
for (int i = 0; i < array.length ; i++)
{
...
}
如果您必须将代码翻译成英语,那么您实际上就是在这样做
对于所有元素,从 0
开始分配 i
,直到我们到达 array.length
和 adding 1 to i between each iteration
,请执行以下操作 (...)
因此,您真正要做的就是更改循环的参数。
例如,您可以说起点(即i
)可以不是0。如果要从数组的末尾开始,用什么代替零呢?
然后,如果您从头开始,是否真的可以在每次迭代之间将值添加到i
?并非如此,您会越界,那么您应该怎么做而不是i++
?
到那时,如果要从头到尾进行迭代,则需要一个停止点。答案就出在问题上:我的出发点是数组的开始。因此,循环的中间参数(这是停止点)应该代表数组的开始。你怎么写下来?
请注意,例如,现在您可以在了解逻辑之后再遍历第二个元素。
事实上,您处于2D循环中仅意味着您在主循环中需要一个内部循环,其工作方式与外部循环相同。只需将索引想象为具有坐标的画布,而不是仅包含点的线即可。
如果您听不懂我的意思,我只是写下答案,但我认为解释很清楚,您可以理解:)