目次へ

解答例 - 実習課題2 - 7.数値処理/数値の表現

(実習課題2)

コンピュータとのジャンケンを実現する、コンソールプログラムを作成しなさい。

解答例

package com.techscore.utility.chapter7.exercise2;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Random;

/**
 * PaperStoneScissorsExample.java
 * TECHSCORE Javaユーティリティ7章 実習課題2
 *
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */
public class PaperStoneScissorsExample {

    public static void main(String[] args) {
        printUsage();

        Random random = new Random();

        Janken.Hand computer = null;
        Janken.Hand player = null;

        int win = 0;
        int lost = 0;

        BufferedReader reader =
            new BufferedReader(new InputStreamReader(System.in));
        try {
            String line = null;
            while ((line = reader.readLine()) != null && !".".equals(line)) {
                //コンピュータの手を乱数で決定する。
                computer = getHand(random.nextInt(3));
                if (!line.matches("[0-2]")) {
                    printError();
                    continue;
                } else {
                    player = getHand(Integer.parseInt(line));
                }
                System.out.println("---------------------------");
                System.out.println("じゃんけんぽん");
                System.out.println(" あなたの手      :" + player.name + " ");
                System.out.println(" コンピュータの手:" + computer.name);
                switch (Janken.poi(computer, player)) {
                    case Janken.DRAW :
                        System.out.println("結果:あいこ");
                        break;
                    case Janken.LOST :
                        System.out.println("結果:コンピュータの勝ち");
                        lost++;
                        break;
                    case Janken.WIN :
                        System.out.println("結果:あなたの勝ち");
                        win++;
                        break;
                }
                System.out.println("---------------------------");
                System.out.println("あなたの " + win + " 勝 " + lost + " 敗です。");
            }
            System.out.println("またね。");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static Janken.Hand getHand(int num) {
        switch (num) {
            case 0 :
                return Janken.STONE;
            case 1 :
                return Janken.PAPER;
            case 2 :
                return Janken.SCISSORS;
            default :
                printError();
                return null;
        }
    }

    private static void printUsage() {
        System.out.println("0:グー、1:パー、2:チョキ、.:終了");
    }

    private static void printError() {
        System.out.println("入力値が不正です。");
        printUsage();
    }

}

/**
 * じゃんけんを定義するクラス
 */
class Janken {

    static Hand STONE = new Hand("グー", 0);
    static Hand PAPER = new Hand("パー", 1);
    static Hand SCISSORS = new Hand("チョキ", 2);
    static final int WIN = 1;
    static final int LOST = -1;
    static final int DRAW = 0;

    static int poi(Hand player, Hand com) {
        switch (player.number - com.number) {
            case 0 :
                return Janken.DRAW;
            case -1 :
                return Janken.LOST;
            case 2 :
                return Janken.LOST;
            default :
                return Janken.WIN;
        }
    }

    static class Hand {
        String name = null;
        int number = -1;
        private Hand(String name, int number) {
            this.name = name;
            this.number = number;
        }
    }

}

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp