我正在使用2D数组,我想查看"左上角" "顶部"和#34;右上角"最后一行中最小元素的。我有一个有效的代码,但是它显示了行中每个元素的所有方向,而不仅仅是最小的元素。有人可以帮忙吗?这是我的代码:
for (int y = array.length-1; y == array.length-1; y--)
{
for (int x = 0; x < array[y].length; x++)
{
int lowest = array[y][0];
for (x = 0; x < array[y].length; x++)
{
if (array[y][x] <= lowest)
lowest = array[y][x];
//if element is on left
if (x == 0)
{
up = array[y-1][x];
upRight = array[y-1][x+1];
upLeft = 0;
}
//if element is on right
else if (x == array[0].length - 1)
{
upLeft = array[y-1][x-1];
up = array[y-1][x];
upRight = 0;
}
//if element is anywhere else
else
{
upLeft = array[y-1][x-1];
up = array[y-1][x];
upRight = array[y-1][x+1];
}
}
}
}
答案 0 :(得分:1)
一些观察结果。
现在看来你有2个嵌套for
循环,你在整个数组上进行迭代。根据您的描述,听起来似乎没有必要,您只需搜索array[array.length - 1]
以获得最低价值。
专注于编写一个单独的步骤(可能是它自己的方法),它将在最后一行找到最低值的索引。
你几乎有找到左上角,右上角和右上角的逻辑。您只需要根据最后一行中最低值的索引查看array[array.length - 2]
中的元素。
<强>更新强>
您在问题中提到您的代码“显示行中每个元素的所有方向”。您没有包含任何显示结果的代码,但是从下面的评论中可以看出您的问题如下:
设置upLeft
,up
和upRight
的代码在内搜索最低值的循环。即你有:
for (x = 0; x < array[y].length; x++)
{
if (array[y][x] <= lowest)
lowest = array[y][x];
//if element is on left
if (x == 0)
所以这意味着它会对行中的每个元素发生。
你可能想做的是让你的循环找到最低元素,并记住它的索引:
for (x = 0; x < array[y].length; x++)
{
if (array[y][x] <= lowest) {
lowest = array[y][x];
indexOfLowest = x;
}
}
然后 后,在内部循环之外,使用找到的最低元素的索引设置upLeft
,up
和upRight
:
//if element is on left
if (indexOfLowest == 0)
等