すみませんが、前回と同じような質問になっています。
じゃんけんゲームを作っています。
3人でじゃんけんをして勝った人から1位から3位までを出して、それを2回戦行うというものを作り、 結果がこのように出たとします。
プレイヤー1の各順位の回数は1位0回, 2位0回, 3位2回
プレイヤー2の各順位の回数は1位1回, 2位1回, 3位0回
プレイヤー3の各順位の回数は1位1回, 2位1回, 3位0回
これを1位が多い人順に総合順位を決めたいです。
1位が同じ回数なら2位の回数で多い方を上位にします。
1位2位3位の回数がすべて同じなら同位にします。
同位が存在する場合、例えば1位が2人いるなら3人目は3位とします。
結果としては
1位プレイヤー2
1位プレイヤー3
3位プレイヤー1
このようにしたいです。
前回教えていただいた点数に変換してから順位付けをする方法でもやってみようと思うのですが、今回はComparatorでやっています。
コード public class PlayerOfComp implements Comparator<Player>{ public int compare(Player p1, Player p2) { int compare_rank = 0; for(int i = 0; i < player; i++){ compare_rank = p2.getRankarrange()[i] - p1.getRankarrange()[i]; } return compare_rank; } }
playerはプレイヤー人数3人
getRankarrangeはPlayerクラスにある各順位に何回なったか記録してある配列
private int rankarrange[] = new int[player];
public int[] getRankarrange(){
return rankarrange;
}
これでやってみたのですが、これだと3位の回数だけを比較して並べることになっているみたいで、
プレイヤー1
プレイヤー2
プレイヤー3
の順番で出力されてしまいます。
Comparatorを使ってすべての条件を満たすにはどう変更すればいいのか教えていただきたいです。
よろしくお願いいたします。
イメージとしては
・1位の回数を比較して同じ回数のプレイヤーがいれば、そのプレイヤーだけ取り出して2位の回数を比較。
2位も同じならこれを再度繰り返す。
・1位の回数を比較して回数がすべて違うならそのまま並べる
と考えています。
もしこの動作がComparatorではできないのであれば、ほかの方法を教えていただくとありがたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/20 02:25
2015/08/20 02:54
2015/08/20 03:54
2015/08/20 03:56
2015/08/21 02:17