-2

私は現在、アリーナ/劇場の座席システムを表す 2 次元配列に取り組んでいます。20% の座席を埋める必要があります。これは 5 x 5 の配列です。配列を埋めるために、5 つのランダムな座席/列の組み合わせを生成する必要があります。(私は乱数発生器を使用しています)すべての助けをいただければ幸いです。

これまでの私のコードは次のとおりです。

public class Project5b 
{
  static int NUMBER_OF_ROWS = 5;
  static int NUMBER_OF_SEATS = 5;
  static boolean DEBUG = true;
  public int RandomInt(int i1, int i2) {
    int result = (int) (Math.random() * (i1 - i2 + i1)); // check formula
    return result;
  }
  public static void main(String[] args) {
    int seat = 1;
    int row = 2;
    boolean[][] a_theater;
    a_theater = new boolean[NUMBER_OF_ROWS][NUMBER_OF_SEATS];
    for (row = 1; row <= NUMBER_OF_ROWS; row++) {
      for (seat = 1; seat <= NUMBER_OF_SEATS; seat++) {
        a_theater[row - 1][seat - 1] = false;
      }
    }
    if (DEBUG) {
      for (row = 1; row <= NUMBER_OF_ROWS; row++) {
        for (seat = 1; seat <= NUMBER_OF_SEATS; seat++) {
          System.out.println("row" + " " + row + " " + "seat" + " " + seat + " "
              + a_theater[row - 1][seat - 1]);
        }
      }
    }
  }
}

ありがとう!

4

3 に答える 3

1

次のスニペットをお勧めします。必要に応じて調整できます

最初はすべての値が 0 に設定されていることを確認してくださいArrays.fill()

Random rand = new Random(); //instead of Math.random()
int count = 0;
while (count < 5) {
    int randI = rand.nextInt(5); //generate random index
    int randJ = rand.nextInt(5); //generate random index
    boolean randVal = rand.nextBoolean(); //generate random value
    if (!array[randI][randJ]) { // check whether assigned earlier
        array[randI][randJ] = randVal;
        count++;
    }
}
于 2013-01-14T14:33:56.637 に答える
1

これをループに置き換えます。

for (row = 1; row <= NUMBER_OF_ROWS; row++) {
  for (seat = 1; seat <= NUMBER_OF_SEATS; seat++) {
    a_theater[row - 1][seat - 1] = false;
  }
}

このコードブロックによって:

  int filledNumber = 0;
  Random r = new Random();
  int maxFilled = (int)(NUMBER_OF_ROWS*NUMBER_OF_SEATS * 0.2);
  for(row = 1; row <=NUMBER_OF_ROWS;  row++){
      for(seat = 1; seat <=NUMBER_OF_SEATS; seat++){
        boolean filled = filledNumber <= maxFilled && r.nextBoolean();
        a_theater[row -1][seat -1] = filled;
        if (filled) filledNumber++;             
      }
  }

更新:

double1) からへのキャスティングを修正int

2) どのコード ブロックを推奨されたものに置き換える必要があるかを示します

于 2013-01-14T14:32:26.403 に答える
0

行と列の座席のランダム値を生成する必要があるため、ランダム値のペアを 5 回生成します。

ループ構成を使用し、forJava のRandomクラスを調べて数値を生成します。また、5 つの異なる座席をランダムに設定し、誤って同じ座席を 2 回 true に設定しないようにするためのチェックも含める必要があります。

于 2013-01-14T14:33:42.437 に答える