これは、配列内の要素をランダムに選択する方法で使用しているものですが、なぜ機能しないのかわかりません。あらゆる方法で書いてみたような気がします。
public static Seat BookSeat(Seat[][] x){
Seat[][] book = new Seat[12][23];
if (x != null){
book = x[(Math.random()*x.length)];
}
return book;
}
あなたが物事を説明する方法は、いくつかの概念がどういうわけか交差したと私に思わせます. book は、ランダムに選択したい Seat オブジェクトの (2 次元の) 配列であると想定しています。そのためには、配列の各次元に対してランダムな選択を指定する必要があります。
// this should be declared elsewhere because if it's local to bookSeat it will be lost
// and reinitialized upon each call to bookSeat
Seat[][] book = new Seat[12][23];
// and this is how, after previous declaration, the function will be called
Seat theBookedSeat = bookSeat(book);
// Okay, now we have selected a random seat, mark it as booked, assuming Seat has a
// method called book:
theBookedSeat.book();
// and this is the modified function. Note also that function in Java by convention
// start with a lowercase letter.
public static Seat bookSeat(Seat[][] x){
if (x != null){
// using Random as shown by chm052
Random r = new Random();
// need to pick a random one in each dimension
book = x[r.nextInt(x.length)][r.nextInt(x[0].length)];
}
return book;
}
また、選択した座席がすでに予約されているかどうかを確認し、選択を繰り返すテストを統合する必要があります。
do {
// need to pick a random one in each dimension
book = x[r.nextInt(x.length)][r.nextInt(x[0].length)];
while (book.isBooked()); // assuming a getter for a boolean indicating
// whether the seat is booked or not
しかし、このような完全ランダム選択にはいくつかの欠点があります。
したがって、行と座席をランダムに選択し、そこから最初の空席が見つかるまで検索を開始するなど、よりスマートな選択ルーチンを実装することをお勧めしますが、最初のステップではこれで問題ありません。
これがあなたが達成したかったことを願っています。そうでない場合は、お気軽にコメントして、修正して適応させてください.
式によって返される数を床にし(Math.random()*x.length)
ます。
Math.floor(Math.random()*x.length);
現時点では、配列に浮動小数点数を添字付けしようとしています。
他の答えは完全に機能しますが、すべての計算を行う必要がない場合は、Random.nextInt()を使用してそれを行う別の方法を次に示します。
Random r = new Random();
book = x[r.nextInt(x.length)];
java.util.Randomを使用するため、これを行う場合は必ずインポートしてください。