// CalculationPractice -- 計算問題 import java.io.*; // 入出力関係のクラス public class CalculationPractice { static int noProblems = 10; // 出題数 (number of problems) デフォルト static int maxValue = 99; // 答えの最大値 デフォルト static int maxNo2 = 10; // 答えの最大値 デフォルト int correctAnswers = 0; // 正解の数を記憶 int wrongAnswers = 0; // 間違いの数を記憶 public static void main (String args[]) { try { // 引数の処理 ☆☆switch文を使っている switch (args.length) { // 引数の個数は配列の大きさでわかる case 3: // 引数が3つある時,ここからbreakまでを実行 maxNo2 = Integer.parseInt(args[2]); // 第2項の最大値 case 2: // 引数が2つか3つある時ここに到達 maxValue = Integer.parseInt(args[1]); // 答えの最大値 case 1: // 引数が1-3個の時ここに到達 noProblems = Integer.parseInt(args[0]); // 問題数 break; // 引数が1-3個の時はここでswitchを抜け,tryも抜ける case 0: // 引数がない場合 break; // 何もしないで抜ける default: // 引数が4つ以上ある時 throw new Exception();//引数の指定が変。例外を投げる } } catch (Exception e) { // 入力や整数への変換で例外が発生 System.err.println("使用法: java CalculationPractice 問題数 答え最大値 第2項最大値"); System.exit(1); // 使用法を表示して終了 } // 全体を制御するオブジェクトを作る CalculationPractice controller = new CalculationPractice(); controller.run(); // メソッドrun()実行 } void run() { System.out.print("---------- けいさんれんしゅう " + noProblems + "だい ----------\n"); // プログラム生成(program generator)オブジェクトの生成 ProblemGenerator pg = new ProblemGenerator(noProblems, maxValue, maxNo2); AnswerReader ar = new AnswerReader(); // 答えを読み込むオブジェクト for (int i=0; i<noProblems; i++) { String problem = pg.generate(); // 問題を生成 boolean result; // 正解か間違いか。true--正解 boolean scored = false; // 採点したかまだか do { // 正解になるまで繰り返し String problemString = (i+1) + ". " + problem + " = "; if (i<9) problemString = " " + problemString; // 桁をそろえる System.out.print(problemString); // 問題を表示 int answer = ar.read(problemString); // 解答を読み込む result = pg.checkAnswer(answer); // 答え合わせ if (! scored) { // まだ採点してなかったら if (result) correctAnswers++; // 正解 else wrongAnswers++; // 間違い scored = true; // もう採点しおわったことを覚える } if (! result) System.out.print("X\n"); // 不正解のとき } while (! result); // resultがtrue(正解)になると抜ける } printRecord(correctAnswers, wrongAnswers); // 成績を表示 } // 成績を表示するメソッド static void printRecord(int correct, int wrong) { PrintStream out = System.out; out.println("---------- せいせき ----------"); out.println(" せいかい " + correct + "もん" + " まちがい " + wrong + "もん"); } }