Javaの勉強をしておりましたが、アウトプットと備忘のために記事に起こしておきます。
なお、今回クラスの継承は一切しておらず、Mainクラスのみのとても簡易的なコードになります。
仕様・要件
【入出力】
- 入力値が0のとき、人間の手としてグーが選択される
- 入力値が1のとき、人間の手としてチョキが選択される
- 入力値が2のとき、人間の手としてパーが選択される
- 入力値が0,1,2以外のとき、再入力を求められる (3以上の半角数字を入力する)
- 入力値が0,1,2以外のとき、再入力を求められる (半角特殊記号を入力する)
- 入力値が0,1,2以外のとき、再入力を求められる (全角文字を入力する)
- 入力値が0,1,2以外のとき、再入力を求められる (絵文字を入力する)
- 入力値が0のとき、人間の手としてグーが選択される
- 入力値が1のとき、人間の手としてチョキが選択される
- 入力値が2のとき、人間の手としてパーが選択される
- 各対戦の勝敗が画面に表示される(指定要件外だがユーザが自然に期待する仕様)
- 10回勝負後に「あなたは,○勝○敗○引分でした」とメッセージが表示される
【じゃんけん機能】
- 人間 グー vs COM グー → あいこ
- 人間 グー vs COM チョキ → 勝ち
- 人間 グー vs COM パー → 負け
- 人間 チョキ vs COM グー → 負け
- 人間 チョキ vs COM チョキ → あいこ
- 人間 チョキ vs COM パー → 勝ち
- 人間 パー vs COM グー → 勝ち
- 人間 パー vs COM チョキ → 負け
- 人間 パー vs COM パー → あいこ
- キー入力が全て正しく行われた場合、対戦が10回で終了する
- キー入力が正しくない場合(0,1,2以外)を含んだとしても、対戦が10回で終了する
【その他】
- 数値の入力を受け付けるのに BufferReaderクラスまたはScannerクラスが使われている
ソースコード
Main.java
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 標準入力
// Scannerクラス
Scanner scanner = new Scanner(System.in);
// じゃんけんの回数を格納する変数
int janken_num = 0;
// 勝数を格納する変数
int win_num = 0;
// 敗数を格納する変数
int lose_num = 0;
// 引き分けを格納する変数
int draw_num = 0;
// 10回戦が終わるまでじゃんけんを繰り返す
System.out.println("0〜2の整数で入力してください。0:グー、1:チョキ、2:パーです。");
while(true) {
try {
janken_num++;
System.out.println("■じゃんけん" + (janken_num) + "回戦目");
// nextLineメソッド
int input = Integer.parseInt(scanner.nextLine());
System.out.println("【人間】" + input);
// input = 0:グーを表す
// input = 1:チョキを表す
// input = 2:パーを表す
// コンピュータ用に乱数を生成し変数computer_numに格納
Random rand = new Random();
int computer_num = rand.nextInt(3) + 0;
// computer_num = 0:グーを表す
// computer_num = 1:チョキを表す
// computer_num = 2:パーを表す
System.out.println("【コンピュータ】" + computer_num);
if ((input == 0) && (computer_num == 1) || ((input == 1) && (computer_num == 2) || ((input == 2) && (computer_num == 0)))) {
win_num += 1;
}
else if ((input == 0) && (computer_num == 2) || ((input == 1) && (computer_num == 0) || ((input == 2) && (computer_num == 1)))){
lose_num += 1;
}
else if ((input == 0) && (computer_num == 0) || ((input == 1) && (computer_num == 1) || ((input == 2) && (computer_num == 2)))){
draw_num += 1;
}
if( janken_num == 10) {
break;
}
} catch (NumberFormatException e) {
System.out.println("0〜2の整数で入力してください。じゃんけんを終了します。");
break;
}
}
System.out.println(janken_num + "あなたは," + win_num + "勝" + lose_num + "敗" + draw_num + "引き分けでした");
scanner.close();
}
}
リファクタリング後
Main.java
import java.util.Random;
import java.util.Scanner;
import java.util.InputMismatchException;
public class Main {
public static void main(String[] args) {
// 標準入力
// Scannerクラス
Scanner scanner = new Scanner(System.in);
// じゃんけんの回数を格納する変数
int janken_num = 0;
// 勝数を格納する変数
int win_num = 0;
// 敗数を格納する変数
int lose_num = 0;
// 引き分けを格納する変数
int draw_num = 0;
// 10回戦が終わるまでじゃんけんを繰り返す
System.out.println("0〜2の範囲の整数を入力してください。0:グー、1:チョキ、2:パーです。");
while(true) {
try {
janken_num++;
System.out.println("----------------------------------");
System.out.println("<じゃんけん" + (janken_num) + "回戦目>");
// nextLongメソッド
long input = scanner.nextLong();
// 0,1,2以外の数値を入力した場合は再入力
if ((input > 2) || (input < 0)) {
// throwで例外(NullPointerException)を投げる
throw new InputMismatchException();
}
// 0,1,2をそれぞれ「グー」,「チョキ」,「パー」に変換
if (input == 0) {
System.out.println("【人間】グー");
}
else if (input == 1) {
System.out.println("【人間】チョキ");
}
else if (input == 2) {
System.out.println("【人間】パー");
};
// コンピュータ用に乱数を生成し変数computer_numに格納
Random rand = new Random();
int computer_num = rand.nextInt(3) + 0;
if (computer_num == 0) {
System.out.println("【コンピュータ】グー");
}
else if (computer_num == 1) {
System.out.println("【コンピュータ】チョキ");
}
else if (computer_num == 2) {
System.out.println("【コンピュータ】パー");
}
if ((input == 0) && (computer_num == 1) || ((input == 1) && (computer_num == 2) || ((input == 2) && (computer_num == 0)))) {
win_num += 1;
}
else if ((input == 0) && (computer_num == 2) || ((input == 1) && (computer_num == 0) || ((input == 2) && (computer_num == 1)))){
lose_num += 1;
}
else {
draw_num += 1;
}
if( janken_num == 10) {
break;
}
} catch (NumberFormatException e) {
System.out.println("数字以外が入力されています。0〜2の範囲の整数を入力してください。");
janken_num--;
continue;
} catch (InputMismatchException e) {
System.out.println("0〜2の範囲の整数を入力してください。");
janken_num--;
continue;
}
}
System.out.println("----------------------------------");
System.out.println("あなたは," + win_num + "勝" + lose_num + "敗" + draw_num + "引き分けでした");
scanner.close();
}
}