1.はじめに
こんにちは、坂内太一です。今回は僕が新入社員研修で実際に出された課題の類似問題を自分自身のアウトプットも兼ねて解説していきます。
最後まで読んでもらえたら嬉しいです。
2.問題内容
Aさん、Bさんが5回ジャンケンを行い、勝ちが2点、あいこが1点、負けが0点で最終的に誰が一番得点が多いかを判定するというものです。
非常にポピュラーな問題ですが他のプログラムと違い3すくみを判定するのに僕自身少し悩んだこともあり、解説付きのコードを書いたのでシェアしようと思います。
3.解説入りのコード
Main.java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//2人のプレイヤーの定義
int player1 = 0;
int player2 = 0;
//キーボードから入力を受けるためのscanner
Scanner scanner = new Scanner(System.in);
//ジャンケンを5回繰り返すためのfor文
for(int i = 0; i <= 4; i++) {
//各プレイヤーにキーボードから出す手を入力してもらう
System.out.println("プレイヤー1:あなたの出す手を入力してください グー:a チョキ:b パー:c");
String hand1 = scanner.nextLine();
System.out.println("プレイヤー2:あなたの出す手を入力してください グー:a チョキ:b パー:c");
String hand2 = scanner.nextLine();
//勝てば2点、あいこは1点、負ければ得点は無し
//今回はif文を使って全てのパターン(7パターン)を処理する
//処理が終わるたびにそれぞれのプレイヤーに得点が入る
if(hand1.equals("a") && hand2.equals("b")) {
System.out.println("プレイヤー1の勝ちです");
player1 += 2;
}else if(hand1.equals("a") && hand2.equals("c")) {
System.out.println("プレイヤー2の勝ちです");
player2 += 2;
}else if(hand1.equals("b") && hand2.equals("a")) {
System.out.println("プレイヤー2の勝ちです");
player2 += 2;
}else if(hand1.equals("b") && hand2.equals("c")) {
System.out.println("プレイヤー1の勝ちです");
player1 += 2;
}else if(hand1.equals("c") && hand2.equals("a")) {
System.out.println("プレイヤー1の勝ちです");
player1 += 2;
}else if(hand1.equals("c") && hand2.equals("b")) {
System.out.println("プレイヤー2の勝ちです");
player2 += 2;
}else if(hand1.equals(hand2)) {
System.out.println("あいこです");
player1++;
player2++;
}
}
scanner.close();
//各プレイヤーの得点を比較して最終的な結果を判定する
if(player1 > player2) {
System.out.println("この勝負プレイヤー1の勝ちです");
}else if(player1 < player2) {
System.out.println("この勝負プレイヤー2の勝ちです");
}else {
System.out.println("この勝負引き分けです");
}
}
}
4.まとめ
僕は全てのパターンを記述しましたが同期は僕より少ない行でより簡単に記述していたので僕自身もこれから経験を積んでいく中でレベルアップしてより少ない行で綺麗に記述できるように努めていこうと思います。