0

私は 2D 配列を使用しており、最後の行の最小要素の「左上」「上」および「右上」に要素を表示したいと考えています。動作するコードがありますが、最小のものだけでなく、行内のすべての要素のすべての方向を表示します。誰でも助けることができますか?これは私のコードです:

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

いくつかの観察。

現時点ではfor、配列全体を反復処理している 2 つのネストされたループがあるようです。あなたの説明から、これは必要ないように思えarray[array.length - 1]ます。最低値を検索するだけです。

最後の行の最小値のインデックスを見つける別のステップ (おそらく独自のメソッド) を書くことに集中してください。

左上、右上、右上を見つけるためのロジックはほとんど正しいです。array[array.length - 2]最後の行の最小値のインデックスに基づいて要素を調べるだけです。


アップデート:

質問で、コードは「行内のすべての要素のすべての方向を表示する」と述べました。結果を表示するコードは含まれていませんが、以下のコメントから、問題は次のように聞こえます。

upLeftを設定し、最小値を検索するループupupRightあるコード。つまり、次のものがあります。

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

その後内側のループの外側で setupLeftを実行し、見つかった最下位の要素のインデックスを使用しますupupRight

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

于 2012-11-09T16:02:43.073 に答える