質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

2903閲覧

java  じゃんけんゲーム 順位付け

kisaragizinzin7

総合スコア90

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2015/08/21 02:15

Player player_main[] = new Player[player];
for(int i = 0; i < player; i++){
player_main[i] = new Player("プレイヤー"+(i+1));
}
プレイヤーのインスタンスをプレイヤー人数分作って配列にしています。
playerはプレイヤー数の4

4人でじゃんけんをして結果が以下のようになったとします。

プレイヤー1・・1位0回、2位0回、3位0回、4位2回
プレイヤー2・・1位1回、2位0回、3位1回、4位0回
プレイヤー3・・1位0回、2位2回、3位0回、4位0回
プレイヤー4・・1位1回、2位0回、3位1回、4位0回

これをComparatorを使って順位順に並び替えてplayer_main[]配列が
プレイヤー2、プレイヤー4、プレイヤー3、プレイヤー1
の順番にするところまでできています。

これを
1位 プレイヤー2 プレイヤー4
3位 プレイヤー3
4位 プレイヤー1
という結果を得るにはどうすればいいのでしょうか?

compareメソッドの結果が0なら同じ順位になるのでそれを使ったらいいみたいなのですが・・
for(int i = 0; i < player - 1; i++){
if(compare(player_main[i], player_main[i + 1]) == 0){
}
else if(ref.compare(player_main[i], player_main[i + 1]) != 0){
}

player_main[0]と player_main[1]を比較して
0ならばplayer_main[0]と player_main[1]は同じ1位
0以外ならplayer_main[0]は1位、player_main[1]は2位
といのはわかるのですが1位が3人で4位が1人というような違う結果になった場合にも対応できるようなif文とelse if文の中身にしたいです。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

同立の時,例えば配列の0,1,2が同立なら,その順位は配列の最初にいる0番の順位,すなわち1位になります.
同立の中で配列の最上位のインデックスを基準にすれば同立の順位がわかります.

まどろっこしいのでコード書きます

java

1Player[] players; 2Comparator<Player> ref = new PlayerComparator(); 3 4//じゃんけんをし,並び替えて最終順位順に並び替えをしたとする 5 6 //今何位を見ているか?(0始まり) 7int rank = 0; 8//出力する文字列 9StringBuilder builder = new StringBuilder("1位 "); 10builder.append(players[0].getName()); 11for(int i = 1; i < players.length; i++){ 12 //今見ている順位と比較対象が同立の場合 13 if(ref.compare(players[rank], players[i]) == 0){ 14 builder.append(" ").append(players[i].getName()); 15 //そうでない場合,「今見ている順位」を更新する 16 } else { 17 rank = i; 18 builder.append("\n").append(i + 1).append("位 ").append(players[i].getName()); 19 } 20} 21System.out.println(builder);

投稿2015/08/21 03:17

編集2015/08/21 04:58
swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kisaragizinzin7

2015/08/21 04:55 編集

回答ありがとうございます^^ int rank = 0;のような Playerクラスに順位を持たせたらいいということでしょうか? 同立がない場合は if(ref.compare(player_main1[0], player_main1[1]) != 0){ System.out.println("1位は" + player_main1[0].getName()); } for(int i = 0; i < Judge.player - 1; i++){ if(ref.compare(player_main1[i], player_main1[i + 1]) == 0){ } else if(ref.compare(player_main1[i], player_main1[i + 1]) != 0){ System.out.println((i + 2) + "位は" + player_main1[i + 1].getName()); } } これでできました。
kisaragizinzin7

2015/08/21 07:22

こういうやり方があるんですね。 私が考えていたやり方では全然できませんでした。 コードまで載せていただいてありがとうございます! すごくわかりやすい説明付きで理解できました! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問