スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

配列に決まった範囲の値を重複なしでランダムにきっちり配置する方法[Java]

icon240.png

僕は、ナンバーズ アタック!っていう、脳トレ系パズルアプリをAndroidアプリとして公開してるんだけど(詳細はこっち)、要は、NxNの格子状のパネルにランダムに数字が表示されて、それを1から順番にタップして、すべてタップするまでの時間を競うっていう、よくあるやつ(僕のアプリの場合はオプションが豊富)。

numbers_attack_help00.png

でそれほど難しい話ではないけど、ある人に、グリッドに番号をランダムに配置するアルゴリズムがわかんないから、教えてほしいって言われたのね。

これって、つまりは配列(リスト)に決まった範囲の値をその値の個数分、重複なしできっちり配置するアルゴリズムってことになる。このアルゴリズムにおいてのポイントは

・重複してはいけない
・決まった範囲の値をすべて使わなければならない


一見難しそうに感じるかもしれないが、この2つのポイントを満たさなければならないアルゴリズムは言い換えれば、たとえば1から25(5x5)までの値の範囲であれば、1から25までの値を順番に並べ、その並びをばらばら(ランダム)にするということだ。なので、とりあえず1から25までの値を順番に並べてみる。
List<Integer> numberList = new ArrayList<Integer>();

for(int i = 0 ; i < 5 * 5 ; i++){
numberList.add(i + 1);
}

あとは、その並びをランダムな並びにしてしまえばいい。Javaの場合、Collections.shuffle()を使えば簡単にやってくれる。
Collections.shuffle(numberList, new Random());

for (Integer integer : numberList) {
System.out.print(integer + ", ");
}

これで終わり。あとはリストの頭から順番に値を取り出し、パネルに設定していけばいいだけ。

コメントの投稿

非公開コメント

プロフィール

basarafire

Author:basarafire
IT関連会社で情報処理の基礎やプログラミング(主にC・Java)を教えています。最近はAndroidの教育や開発なども行ったりしています。

basarafireの開発したアプリに関する内容はこちらから
http://basarafire.jugem.jp/

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
お気に入り
[プレスブログ]価値あるブログに換金可能なポイントを差し上げます。 アクセストレードレビュー
提携
ゲーム
QRコード
QR
リンク
RSSリンクの表示
お気に入り商品
カウンター
おすすめAndroid書籍
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。