エンジニア成長日記 swaponQ

コンピュータサイエンス専攻の一般人のブログです。

新・明解 Java 入門 演習 13-3 解答

Hello, Terminal!swaponQです!

今回は演習 13-3 に取り組んでいこうと思います。

  • 演習 13-3

ジャンケンの《プレーヤ》を表す抽象クラスを定義せよ。そのクラスから以下のクラスを派生すること。
・人間プレーヤクラス(出す手をキーボードから読み込む)
・コンピュータプレーヤクラス(出す手を乱数で生成する)

・Player.java

public abstract class Player{
	public abstract String toString();
	public void print(){
		System.out.println(toString());
	}
}

・HumanPlayer.java

import java.util.Scanner;

public class HumanPlayer extends Player {
	Scanner stdIn = new Scanner(System.in);
	private int num;
	public HumanPlayer() {
		System.out.print("グー…1/チョキ…2/パー…3 :");
		int hn = stdIn.nextInt();
		this.num = hn;
	}
	public int getNum() {
		return num;
	}
	public String toString() {
		if(num == 1){
			return "あなた:グー";
		}
		if(num == 2){
			return "あなた:チョキ";
		}
		if(num == 3){
			return "あなた:パー";
		}
		else{
			return "エラー: 指定された値を入力してください";
		}
	}
}

・ComputerPlayer.java

import java.util.Random;

public class ComputerPlayer extends Player{
	Random rand  = new Random();

	private int num;
	public ComputerPlayer() {
		int cn  = rand.nextInt(3);
		this.num = cn;
	}
	public int getNum() {
		return num;
	}
	public String toString() {
		if(num == 0) {
			return "コンピュータ:グー";
		}
		if(num == 1) {
			return "コンピュータ:チョキ";
		}
		else {
			return "コンピュータ:パー";
		}
	}
}

・Janken.java

class Janken {
	public static void main(String[] args){

		System.out.println("じゃんけんスタート");

		HumanPlayer hp = new HumanPlayer();
		hp.print();
		ComputerPlayer cp = new ComputerPlayer();
		cp.print();
		int hn = hp.getNum();
		int cn = cp.getNum();
		if ((hn == 1 && cn == 1) || (hn == 2 && cn == 2) || (hn == 3 && cn == 0))
			System.out.println("あなたの勝ちです!");
		else if ((hn == 1 && cn == 2) || (hn == 2 && cn == 0) || (hn == 3 && cn == 1))
			System.out.println("あなたの負けです…");
		else
			System.out.println("あいこです。");
	}
}


・実行結果

じゃんけんスタート
グー…1/チョキ…2/パー…3 :2
あなた:チョキ
コンピュータ:グー
あなたの負けです…


演習 13-4 がありますが、Javadocの話なので省略します。

以上で「第13章:抽象クラス」は終了です。お疲れ様でした!
次回からは「第14章:インタフェース」です。
参考書のメインの部分は次回で終わりですね!あと一歩頑張りましょう!

Goodbye, Terminal… swaponQでした!