-1

ねえ、この宿題があり、方法の 1 つに問題があります。実際の回答/コードではなく、ヒントが欲しいです。

したがって、馬の配列をいじる HorseBarn というクラスがあります(馬がタイプです)。私の問題は、連結方法に問題があることです。

統合前の配列: a、b、c、d は馬

|a|null|b|null|c|d|

統合後の配列は次のようになります。

|a|b|c|d|ヌル|ヌル|

したがって、私のロジックは、ネストされた for ループを作成することです。最初のループはヌル値を検索し、最初のループがヌル値を見つけると、2 番目のループは馬を探して、それと交換します。その後、2 番目のループが終了し、最初のループに戻ります。ここに私が今持っているものがありますが、動作しません(終了するだけです)。私のロジックが間違っているのでしょうか、それとも私の構文が問題を引き起こしているのでしょうか?

public void consolidate()
{
    int j = 0;
    for(int i = 0; i < spaces.length;i++)
    {
        if( spaces[i] == null)
        {
            for(j = i; j < spaces.length && spaces[j] == null; j++)
            {

            }
            spaces[i] = spaces[j];
            spaces[j] = null;
        }

    }
4

2 に答える 2

1

まず、null 以外の最後の要素が見つかり、まだ要素が残っている場合、これはインデックス範囲外の例外を与えるはずです。

元:horses = | a | null | null | null |

for i = 1、 horses[1] -> horses[3] は空であるため、j は最初に 1 に設定され、次に j = 4 で終了します (終了条件のためj < horses.length())

次に、 horses[1] を horses[4] と交換しようとすると、配列インデックスが範囲外になります。

于 2014-06-06T20:09:13.240 に答える
0

内側の for ループでは、次の null 以外の値の位置を見つけて、そこで中断します。次に、ヌルと交換します。時間効率の良いコード。

于 2014-06-06T20:15:54.620 に答える