prg-lang-2 / week12 / Exer11.java
Exer11.java
Raw
import java.util.Scanner;

public class Exer11 {
    public static void main(String[] args) {
        // [0.0, 1.0)範囲のdouble型の乱数を得る
        double r = Math.random();
        // 標準出力への文字列の出力方法としてprintlnメソッドもある.
        // printlnは引数の文字列を出力した後,改行をする.
        System.out.println("r = " + r);
        // サイコロを作る
        int deme = dice(r, 6);
        System.out.println("deme = " + deme);

        // じゃんけんをする.0:ぐー, 1:ぱー,2:ちょき
        System.out.println("じゃんけんをします.数字を入力してね.0:ぐー, 1:ぱー,2:ちょき");
        Scanner scanner = new Scanner(System.in);
        int hitoNoTe = scanner.nextInt();
        scanner.close();
        int kikaiNoTe = janken(r);
        System.out.println("じゃんけんぽん:" + kikaiNoTe);
        if (hitoNoTe == kikaiNoTe) {
            System.out.println("あいこ!");
        } else if (hitoNoTe == (kikaiNoTe + 1) % 3) {
            System.out.println("あなたの勝ち!");
        } else if ((hitoNoTe + 1) % 3 == kikaiNoTe) {
            System.out.println("あなたの負け!");
        }
    }

    /**
     * サイコロを振る(出目の確率は均等)
     *
     * @param r 乱数[0.0, 1.0)
     * @param men 何面サイコロか
     * @return サイコロの目
     */
    private static int dice(double r, int men) {
        int deme = 0;
        // 6面サイコロ
        for (int i = 0; i < men; i++) {
            // int+int=intだが,int+double=doubleなので敢えて,i + 1.0としている
            if (r < (i + 1.0) / men) {
                deme = i + 1;
                break;
            }
        }
        return deme; // 0を返す場合は異常
    }

    /**
     * ぐーちょきぱーのじゃんけんの手を決める
     *
     * @param r 乱数[0.0, 1.0)
     * @return 0:ぐー, 1:ぱー,2:ちょき
     */
    private static int janken(double r) {
        int te = -1;
        // 6面サイコロ
        for (int i = 0; i < 3; i++) {
            if (r < (i + 1.0) / 3) {
                te = i;
                break;
            }
        }
        return te; // -1の場合は異常
    }
}