1

編集可能な行数と 3 列のセット数の 2D 配列をインスタンス化しました。

Random .nextInt(2) メソッドを使用して、0 と 1 でランダムに埋められます。

配列がいっぱいになった後、配列を検索して、最初に出現した 0を返すことができるようにしたいと考えています。

これどうやってするの?

たとえば、次のような配列があるとします。

  • 1 1 0
  • 0 1 0
  • 1 1 1

最初の発生は (0,3) になります。配列を水平方向に検索したいのですが、3 列目 (最後) に達すると次の行に移動します。

注: 最初に、次のコード セクションを完全に 0 で埋められた 2D 配列でテストしました。配列に手動で 1 を挿入し、最初に出現する 0 を検索しようとすると、機能しました。ただし、配列がランダムに埋められている場合、コードは機能しません。

 public String findNextAvailable()
{ 
    for (int i=0; i<seatlist.length; i++) 
    { 
        for (int j=0; j<seatlist[i].length; j++)
        {

            int k=0;
            if (seatlist[0][0]==0) 
            { 
                nextavailable= seatchart[0][0];
                break;
            }
            else
            if(seatlist[k][j]==0)
            {
                nextavailable= seatchart[k][j];
                break;
            }
            else 
            {   k++;
                if(seatlist[k][j]==0) 
                {
                    nextavailable= seatchart[k][j];
                    break;
                }    
            }

        }
    }
    return nextavailable;
}

前もって感謝します!

4

4 に答える 4

1

最初に遭遇した 0 の位置を返す必要があるのに、なぜ if ステートメントを抜け出す必要があるのですか? 外側のループはまだ実行されます!

単純に整数配列を作成します。

int[] pos=new array[2];

戻り値の型を変更します:

public int[] findNextAvailable(){

それぞれの if ステートメントで、次のように内容を変更します。

pos[0]=i;
pos[1]=j;
return pos;

最終結果は次のようになります。

    public int[] findNextAvailable()
{ 
    int[] pos=new array[2];
    for (int i=0; i<seatlist.length; i++) 
    { 
        for (int j=0; j<seatlist[i].length; j++)
        {

            if (seatlist[i][j]==0) 
            { 
                pos[0]=i;
                pos[1]=j;
                return pos;
            }


        }
    }

   //none found so return minus one.
    pos[0]=-1;
    pos[1]=-1;

    return pos;
}
于 2013-05-23T00:56:47.040 に答える
1

内側のループを中断すると、外側のループを再度実行し、最終結果であると思われるものを外側のループの次の実行に置き換えます。ブレークを使用するのではなく、すぐに戻ります。

于 2013-05-23T00:41:30.737 に答える