【Javaプログラミング】おみくじを作ろう!!
おみくじプログラムを作成する課題が出されることがあります。どのように作ればよいのか、なかなか思いつかないかも知れません。今回は、おみくじプログラムを色々な書き方で説明していきます。是非、プログラムには何種類もの書き方が存在することを体験してください。
まず、この記事は以下のような人を対象としています。
・おみくじプログラムの作り方を知りたい
・さまざまなプログラムの書き方を知りたい
この記事を読むと、次のようなことが理解できるようになります。
・分岐処理(if文、switch文)の使い方を理解することができます
・色々なパターンのおみくじプログラムを体験することができます。
花子さん、今日はJavaプログラミングの練習として、課題を出しますので、チャレンジしてください。
練習問題ですか? ちょっと不安ですが、頑張ってみます。
では、おみくじプログラムを作ってみましょう
おみくじプログラムですか? えっと、まずは・・・
Java言語の基本をまず勉強したい人は次の書籍がおススメです!!
問題の内容
今回作成するおみくじプログラムは以下の通りとなります。
- プログラムを実行すると、おみくじの結果が文字で表示される
- おみくじの結果は「大吉」「中吉」「末吉」「凶」の4種類とする
- プログラムを実行するたびに、ランダムな結果が表示される
みなさんもおみくじを引いた経験があると思います。おみくじにも色々な方法がありますが、今回は「筒のような入れ物を振ると、番号が書かれた棒が出てきて、その番号の紙をもらうとそこにおみくじの結果が書かれている」という形式でプログラムを作成して下さい。
3つの構成要素を考える
プログラムを作成する場合、すぐにコードを入力したくなりますが、まずはプログラムの全体像を考えましょう。初心者の人はいきなりeclipseなどの開発ソフトを起動して、プログラムを入力し始めてしまいます。そして、途中で何を入力すれば良いか分からなくなり、悩んでしまうことが多くあります。これは、きちんと作成するプログラムの全体像を把握していないためです。
どのプログラム言語を利用しても、プログラムを作成する場合、3つの構成要素で成り立っています。詳しくは、以下の記事で確認してください。
データの入力・準備
今回のプログラムでは、利用するデータは何でしょうか? 何かユーザがデータを入力しなければならないのでしょうか? または、ファイルなど外部から自動的にデータを読みこむ必要があるのでしょうか?
このおみくじプログラムでは、プログラムを実行すると自動的におみくじの結果が表示されるので、ユーザがデータを入力することはありません。では、外部からデータを読み込むのでしょうか?
問題を読んでみると、「プログラムを実行するたびに、ランダムな結果が表示される」と書かれてあります。この「ランダムな」というキーワードが重要です。じゃんけんゲームなども、毎回コンピュータの出す手が変わりすが、このように毎回違う値を作る必要がある時に利用するのが「乱数」になります。
つまり、おみくじソフトでは、利用するデータはコンピュータが自動的に作る「乱数」となります。今回はそれ以外に必要なデータはありません。
乱数は、Javaに用意されているメソッドで作成します。この作り方については、あとで説明します。
データの処理
では、データの入力・準備が分かったので、次に考えるのは「データの処理」です。具体的なプログラムの内容ではなく、おおざっぱにどのような処理を行うのか、処理の見出しを考えます。
今回のおみくじの手順は、「筒のような入れ物を振ると、番号が書かれた棒が出てきて、その番号の紙をもらうとそこにおみくじの結果が書かれている」となっています。おみくじの番号はデータの入力・準備部分で求めているので、ここではその番号に対応するおみくじの結果を判定します。
具体的には、以下のような判定を行います。
- もし、おみくじの番号が「0」なら「大吉」とする
- もし、おみくじの番号が「1」なら「中吉」とする
- もし、おみくじの番号が「2」なら「末吉」とする
- もし、おみくじの番号が「3」なら「凶」とする
「もし、~ならば・・・」という表現なので、処理部分では「if文による分岐処理」を行います。
結果の出力
最後に結果の出力ですが、処理部分でおみくじの結果が分かっています。今回は、おみくじの結果を画面に出力します。したがって、結果の出力部分では「ディスプレイにおみくじの結果を出力する」処理を行います。
フローチャートを作成する
プログラムの3つの構成要素について、それぞれ検討したので、今度はその内容をフローチャートにしてみます。今回のフローチャートは以下のようになります。
では、このフローチャートを元に、実際にプログラムを記述していきます。
なお、フローチャートの書き方については以下の記事を参考にしてください。
乱数の使い方
Javaで乱数を利用する場合、Randomクラスを利用します。Randomクラスは乱数に関するメソッドがあらかじめ定義されているクラスで、利用する場合は、まずインスタンスをnew演算子で生成しなければなりません。
一般的な使い方は以下の通りです。なお、生成したRandomクラスのインスタンスを参照する変数を「rand」、生成された乱数を格納する変数を「no」としています。
java.util.Random rand = new java.util.Random();
int no = rand.nextInt(4);
ただし、「java.util.Random」と何度も記述するのが面倒なので、通常は「import文」を利用します。import文を利用すると、以下のように変更されます。
import java.util.Random;
Random rand = new Random();
int no = rand.nextInt(4);
実際に整数の乱数を求めるメソッドは「nextInt()」メソッドです。このメソッドは「0から始まり指定した範囲までの整数の中から1つ乱数を生成する」処理を行います。メソッドの引数には「どこまでの範囲か」の値を指定します。なお、注意することは指定した値は範囲には含まれないということです。nextInt(4)と記述した場合、「0から4まで」ではなく、「0から3まで」となります。つまり、乱数の範囲は「0から引数の値-1まで」となります。紛らわしいので気を付けてください。
パターン① if文を利用する場合
おみくじソフトのプログラムをif文を利用して記述する場合のフローチャートは以下のようになります。
このフローチャートを元に記述したプログラムは次のようになります。フローチャートの内容がそのままコードで記述されていることが確認できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package omikuji; import java.util.Random; public class OmikujiIf { public static void main(String[] args) { // 0から3までの範囲で乱数を1つ生成する Random rand = new Random(); int no = rand.nextInt(4); // 取得した乱数の値によって、結果を表示する if(no == 0) { System.out.println("大吉"); }else if(no == 1) { System.out.println("中吉"); }else if(no == 2) { System.out.println("末吉"); }else { System.out.println("凶"); } } } |
パターン② switch文を利用する場合
次にswtich文を利用して記述する場合のフローチャートは以下のようになります。
このフローチャートを元に記述したプログラムは次のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
package omikuji; import java.util.Random; public class OmikujiSwitch { public static void main(String[] args) { // 0から3までの範囲で乱数を1つ生成する Random rand = new Random(); int no = rand.nextInt(4); // 取得した乱数の値によって、結果を表示する switch(no) { case 0: System.out.println("大吉"); break; case 1: System.out.println("中吉"); break; case 2: System.out.println("末吉"); break; case 3: System.out.println("凶"); } } } |
等しい場合で処理を分岐する場合、if文よりもswitch文を利用したほうが見やすいコードになります。ただし、Javaのswitch文は「ある値以上の場合」といった場面では使用できません。
パターン③ 配列を使用する場合
おみくじソフトのプログラムは、上記のようにif文またはswitch文を利用すれば完成します。しかし、実は配列を利用するともっと簡潔にプログラムを記述することができます。
配列は同じ種類のデータを1つの名前でまとめて管理できる仕組みです。
String[] omikuji = {“大吉”,”中吉”,”末吉”,”凶”};
上記のコードを入力すると、下記のような配列が出来上がります(実際は、もう少し複雑ですが、今回は説明を簡単にするためイメージとしてとらえてください)。
「omikuji」という1つの配列名で4種類の文字列を格納することができます。それぞれのデータを特定するため、配列には「添え字(インデックス)」が内部で自動的に付けられています。この添え字は「0から始まる整数」となります。
今回、乱数として「0から3までの整数が1つ」求められますが、その乱数が配列の添え字として活用できるという訳です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package omikuji; import java.util.Random; public class OmikujiArray { public static void main(String[] args) { // おみくじの結果を配列に保存しておく String[] omikuji = {"大吉","中吉","末吉","凶"}; // 0から3までの範囲で乱数を1つ生成する Random rand = new Random(); int no = rand.nextInt(4); // 乱数の値を配列の添え字としておみくじの結果を取り出し表示する System.out.println(omikuji[no]); } } |
if文やswitch文のプログラムと比較すると、非常に簡潔に書かれていることが分かると思います。
まとめ
今回は、おみくじソフトの作成を通して、Javaのプログラム作成方法を解説しました。
・おみくじソフトは乱数を利用すると作成することができる
・プログラムは複数の書き方が存在する場合がある
・配列を利用するとプログラムが簡潔になる
おなじおみくじソフトでも、色々な書き方があるんですね。
配列を利用するとすっきりするのにビックリしました!!
是非、プログラムを作成して動いたからと安心せず、他の方法がないか考えてみてください。色々な書き方を覚えると、プログラムのスキルが劇的に向上しますよ。