0

これを解決する方法がわかりません。パラメータ(座席)として座席番号を受け入れる必要があります。次に、その座席番号を2次元配列の行と列のインデックスに変換します。

自分自身をチェックするために、私は10行(0-9)と2シートPerRow(0-1)があると仮定し、数学をチェックするためにその中から1-20からシートを選びました。ただし、行と列の数はいくつでもかまいません。これは私が自分自身をチェックするために使用しているものです。

static void isAvailable(int seat, boolean seat[][]) {

    int row = 0;
    int column = 0;

    if (seat > 0 && seat <= (getRows() * getSeatsPerRow())){
        row = (seat ) % getRows();
        column = (seat - 1) % getSeatsPerRow;
        seat[row][column] = false;
    }
}

座席がこのように配置されていると仮定します。

            seatsPerRow
       0   1   2   3   4   5   6 

    0 (1) (2) (3) (4) (5) (6) (7)

 r  1 (8) (9) (10)(11)(12)(13)(14)

 o  2 (15)(16)(17)(18)(19)(20)(21)

 w  3  ...

 s  4  ...

    .

    .

    .

座席11を見つけたいとしましょう。座席[1][3]になります。座席番号を2次元配列の位置に変換する方法がわかりません。

4

3 に答える 3

1

座席配置が次のようになっていると仮定します。

 1  2
 3  4
 5  6
 7  8
 9 10
11 12
13 14
15 16
17 18
19 20



int col = (seat % 2 == 0)? 1:0;
int row = (int)Math.ceil(seat / 2.0f); 
于 2013-02-13T05:23:48.240 に答える
1

シートに1から始まる番号が付けられていると仮定すると、次のコマンドを使用するだけで列インデックスを取得できます。

int column = (seatNum - 1) % seat[0].length;

次に、簡単な式で行を見つけることができます。

int row = (int) ((seatNum - 1) / seat[0].length);

次に、次のようにして実際の要素を取得します。

seats[row][column]

これらの式は両方とも、配列のすべての次元seat(0 x 0を除く)で機能するはずです。

最初の行はモジュロを使用して残りを検索しますseatNum / seat[0].length。つまり、基本的に座席数を1行あたりの座席数で割ったものです。これによりcolumn、正しい範囲に再構築されます。

次に、2行目で座席数を行の長さで割ると、行自体が見つかります。次に、それを。でintにキャストし(int)ます。これにより、演算の結果である可能性のある小数がすべて削除され、切り捨てられます。この場合、実際には純粋な整数演算を実行しているため、キャストは不要です。

于 2013-02-13T05:27:05.300 に答える
1

モジュラス演算子は、どのシートを使用するかを決定できるため、ここでは非常に重要です。

まず、私たちの仮定を取り入れて、より抽象的なものに変換しましょう。

  • Nの座席があり、N=20です。Nを列とします。
  • K行があります。ここでK=2です。Kを列とします。
  • これを考えると、列ごとにN/Kシートがあります。

これで、いくつかのモジュラス数学を使用して、残りの問題を解決できます。シートの配列を宣言しましょう。

boolean[][] seats = new boolean[N][K]; //presumed

13席を獲得したい場合は、次の2つのことを理解する必要があります。

  • 座席は何列ですか?
  • 座席は何列ですか?

上記の場合、行の計算は次のようになります。

int row = (seatWanted % N)-1; // (13 % 10)-1 = 2.

これで、列も同様に簡単に見つけることができます。ただし、モジュラスの代わりに整数除算を使用します。

int column = seatWanted / K; // 13 / 10 = 1.

残りは読者にとっての演習ですが、受講済みとしてマークを付けたいと思いseats[2][1]ます。

于 2013-02-13T05:30:14.700 に答える