今回は英単語暗記プログラムを作ってみたいと思います!
単語は1月~12月の英単語でいきましょう。
私みたく英語に不安のある方のために最初に載せておきますね。
| 月 | 英語 |
|---|---|
| 1月 | January |
| 2月 | February |
| 3月 | March |
| 4月 | April |
| 5月 | May |
| 6月 | June |
| 7月 | July |
| 8月 | August |
| 9月 | September |
| 10月 | October |
| 11月 | November |
| 12月 | December |
先頭はすべて大文字です。
プログラムを実行すると次のような表示になります。
- 問題表示
- 入力
- 判定して結果を表示
- 正解するまで繰り返し、正解したらもう一度実行するか確認
- もう一度の場合は出題。そうでない場合はプログラム終了となります。
今回は繰り返し処理を使いますが、どこが繰り返される処理なのかよく考えて下さい。
ではサンプルです。
■Practice_06.java
import java.util.Random;
import java.util.Scanner;
public class Practice_06 {
public static void main(String[] args) {
Random r = new Random();
Scanner sc = new Scanner(System.in);
String[] ansAry = {"January", "February", "March", "April", "May","June",
"July", "August", "September", "October", "November","December"};
while(true) {
int month = r.nextInt(12); // 0~11の乱数
String answer = ansAry[month]; // 答えとなる文字列
while(true) {
System.out.print((month + 1) + "月 : "); // 出題
String yourAns = sc.next(); // 解答を入力
if(yourAns.equals(answer)) { // 判定
System.out.println("正解です!");
break;
} else {
System.out.println("不正解です。");
}
}
System.out.println("もう一度実行しますか? 1.はい 2.いいえ");
if(!sc.next().equals("1")) {
break;
}
}
System.out.println("終了します");
}
}
■解説
ポイントは何点かあります。
・8,9行目
合ってるかどうか判定するためには、あらかじめ正答を用意しておく必要があるのですが今回は配列で用意しています。
・10~29行目
while文が使われています。
ここは「もう一度実行する」場合の繰り返し処理となります。
・14~24行目
ここでもwhile文が使われています。
こちらは不正解の場合の繰り返し処理です。
・15行目
問題として出す月は乱数で決めますが、生成される乱数は0~11です。
こうすると配列のインデックスとうまく合います。
しかし、月が0月~11月になってしまうので、出力する際には+1してあげます。
あとは最初に書いた、「どこが繰り返される処理なのか」ということですね。
このプログラムではwhile文が入れ子構造になっています。
たとえば間違えて乱数の生成を内側のwhile文の中に書いてしまうと、不正解の問題を繰り返すことができなくなってしまいます。
最後にdo-whileを使った別解も載せておきます。
■別解
import java.util.Random;
import java.util.Scanner;
public class Practice_06 {
public static void main(String[] args) {
Random r = new Random();
Scanner sc = new Scanner(System.in);
String[] ansAry = { "January", "February", "March", "April", "May","June",
"July", "August", "September", "October", "November","December" };
do {
int month = r.nextInt(12); // 0~11の乱数
String answer = ansAry[month]; // 答えとなる文字列
String yourAns;
do {
System.out.print((month + 1) + "月 : ");
yourAns = sc.next(); // 解答を入力
if(!yourAns.equals(answer)) {
System.out.println("不正解です。");
}
} while(!yourAns.equals(answer));
System.out.println("正解です!");
System.out.println("もう一度実行しますか? 1.はい 2.いいえ");
} while(sc.next().equals("1"));
System.out.println("終了します");
}
}
