じゃんけんゲームを作っています。
3人でじゃんけんをして勝った人から1位から3位までを出して、それを2回戦行うというものを作ったのですが、
現在結果がこのように出ています。
プレイヤー1の各順位の回数は1位0回, 2位1回, 3位1回
プレイヤー2の各順位の回数は1位1回, 2位0回, 3位1回
プレイヤー3の各順位の回数は1位1回, 2位1回, 3位0回
これを1位が多い人順に総合順位を決めたいです。
結果としては
1位プレイヤー3
2位プレイヤー2
3位プレイヤー1
としたいのですが、どうすればいいのでしょうか?
よろしくお願いします!
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
ベストアンサー
Playerを配列にして,Comparatorインタフェースを使って並べ替えをするのがわかりやすいかと思います.
Comparatorを使うと,Playerごとの並び順のルールを定義することができます.それを利用して並び替えを簡単に実装できます.
比較する条件は「それぞれのPlayerが何位に何回なったか」なので,この情報をPlayerに持たせる必要があります.
簡単なのは人数分の長さを持つint配列を用意して,一回じゃんけんの順位が決まるごとに,対応する位置の数値を1増やす,という方法です(仮にrankCountとする).
そして,比較ルールを定義するComparator実装クラスを用意します.
java
1public class PlayerComparator implements Comparator<Player>{ 2 @Override 3 public int compare(Player p1, Player p2){ 4 //p1の方が上位(並び順で先に来る)なら負の値,p2のほうが上位なら正の値, 5 //同じなら0を返す様に組む 6 } 7}
これはコメントにもあるように,2つの項目を比較してどちらが先に来るかを判定するメソッドです.
これを用意しておけば,Playerを順位で並び替える時には
java
1Arrays.sort(players, new PlayerComparator());
これ一発でできます.あとは並び替えたあとの配列を順に取り出せば順位ごとに表示できます.
投稿2015/08/19 05:31
総合スコア20651
0
コメントの回答先を間違えたため
削除しました
投稿2015/08/19 08:33
編集2015/08/19 08:41総合スコア13
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
一位なら100点、二位は50点のように決めて点数にして比較すればシンプルに出来ると思います。
プレイヤー1は50点
プレイヤー2は100点
プレイヤー3は150点
後は大きい順に並べ替えれば、そのまま順位になります。
投稿2015/08/19 05:35
総合スコア13
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/19 08:35
2015/08/19 09:00
0
各順位に対して下記の処理を行う必要があります。
処理1:x位取得回数の最多の抽出
→抽出結果が単一ならx位の決定
→抽出結果が複数なら処理2へ
処理2:x-1位取得回数の最多なものを抽出
→抽出結果が単一ならx位の決定
→抽出結果が複数なら処理3へ
処理3:x-2位取得回数の最多なものを抽出
→x位の決定
上記の内容で質問の内容は満たすと思います。
が、同率一位等を考慮するには更に細かい判定が必要になると思います。
投稿2015/08/19 04:19
総合スコア18155
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
各プレーヤーの1位2位3位を次のように計算します。
1位×100+2位×10+3位
で
プレーヤー1>プレーヤー2>プレーヤー3なら
print(プレーヤー1>プレーヤー2>プレーヤー3)
プレーヤー1>プレーヤー3>プレーヤー2なら
print(プレーヤー1>プレーヤー3>プレーヤー2)
プレーヤー2>プレーヤー1>プレーヤー3なら
print(プレーヤー2>プレーヤー1>プレーヤー3)
プレーヤー2>プレーヤー3>プレーヤー1なら
print(プレーヤー2>プレーヤー3>プレーヤー1)
プレーヤー3>プレーヤー1>プレーヤー2なら
print(プレーヤー3>プレーヤー1>プレーヤー2)
プレーヤー3>プレーヤー2>プレーヤー1なら
print(プレーヤー3>プレーヤー2>プレーヤー1)
かな
投稿2015/08/19 04:14
総合スコア876
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/19 04:48
2015/08/19 05:15
0
参加者をオブジェクトとして捉えるのが良いかと思います。
勝敗判定:
それぞれの手を何人が出していたかは関係なく、
自分の手と、その場に出ていた手の種類だけで勝敗判定可能です。
参加者に、場に出た手の種類を通知し、
「自分は勝ったか?」を判別し、勝ち数を覚えておいてもらえば、
成績の管理を他で行う必要がなくなります。
順位付け:
参加者をオブジェクトとして捉えた場合、
最後の順位付けは、参加者をList化しておいて、
それぞれから申告された勝ち数でソートすれば可能です。
ArrayListに登録されたオブジェクトのソート ということで、
参考URLを記載しておきます。
http://www.atmarkit.co.jp/fjava/javatips/140java030.html
投稿2015/08/19 04:02
総合スコア69
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/19 08:03
2015/08/19 08:05
2015/08/19 08:27
2015/08/19 08:49 編集
2015/08/19 08:59
2015/08/19 09:12
2015/08/19 09:26