0

我正在使用二维数组,我想查看最后一行中最小元素的“左上角”“顶部”和“右上角”的元素。我有一个有效的代码,但是它显示了行中每个元素的所有方向,而不仅仅是最小的一个。任何人都可以帮忙吗?这是我的代码:

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];
            }
        }
    }

}

4

1 回答 1

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

然后在那之后,在内循环之外, set upLeftupupRight使用找到的最低元素的索引:

//if element is on left
if (indexOfLowest == 0)

等等

于 2012-11-09T16:02:43.073 回答