「Java」 if文で簡単なクイズ・プログラムを作ってみた。

パズル

めちゃログです。最近は基礎を中心にやってきましたが、たまには基礎と違うジャンルの記事をという事でJavaで簡単なプログラムではありますが作ってみようかと思います。if文とパッケージなるものを使いクイズのプログラムを作ってみした。

SPONSORED LINK

▼この記事の目次

  1. if文でクイズ・プログラムを作ってみる
  2. クイズ・プログラムの仕組み
  3. この記事のまとめ

if文でクイズ・プログラムを作ってみる

Quiz

クイズのプログラム「Quiz.java」を作ってみたのでそれを解説していきます。まずはどのような動作をするのか見てみましょう。コンパイル済みの中間コード「Quiz.class」をコマンドプロンプトで実行します。

どのようなプログラムかというと3択問題を出題し、ユーザーに入力してもらい入力した内容によって正解 or 不正解という値を返すというプログラムです。クイズを実装したプログラムという事になります。

quiz

まず1と入力してみましょう

▼このように3択問題のうち1~3をユーザーが入力してその結果を出力するという仕組みです。
quiz2

では2と入力したら

正解だったようです。このようにif文は入力の内容によって異なる出力結果を表示させるという事が出来ます。

quiz3

では1~3以外の0を入力したらどうなるのでしょう

このように表示されました。これはコードのシステム的に「1~3の番号を入力して下さい。」と自動的に出力されるわけではなく、if文を使いこのように表示されるように記述してあります。

quiz4

次の章ではこのプログラムの動作の仕組みを解説していきたいと思います。

クイズ・プログラムの仕組み

それではこのクイズ・プログラムを分解してどのようなソースコードの仕組みになっているのかを見ていきましょう。
▼今回の全ソースコードはこのような感じになります。

class Quiz  //Quiz.java
{
public static void main(String[] args){
System.out.println("\n■猫カフェ発祥はどこの国?");
System.out.println("\n1: 米国 2: 台湾 3: 日本");
System.out.print("\n\n正解を入力>");
java.util.Scanner sc = new java.util.Scanner(System.in);
int d = sc.nextInt();

if(d==1){
System.out.println("\n\n不正解!");
System.out.println("正解は2の台湾です。");
}
else if(d==2){
System.out.println("\n\n正解! 1998年台北でオープンした「猫花園」が猫カフェ発祥の地");
}
else if(d==3){
System.out.println("\n\n不正解!");
System.out.println("正解は2の台湾です。");
}
else {
System.out.println("\n\n1~3の番号を入力して下さい。");
}

}
}

ソースコードを上から順に見ていきましょう。

「System.out.println()」と「System.out.print()」

こちらは文字列を表示させる記述ですね。()の中で「”」ダブルクォーテーション (ダブルクォート) を使い文字列を囲み文字列を出力させます。

では「println」の「ln」の部分が「line」つまり行の略で改行するという動作が加わります。

  • 「System.out.println()」… 出力+改行する
  • 「System.out.print()」… 出力、改行なし

「¥n」

「¥n」は改行するという動作になります。ブラウザ、読み込み環境によっては「バックスラッシュ」が表示されてしまうので全角にしですが「半角円マーク」です。
コードの種類としては「\ + 特定の文字・記号」で出力表現するというエスケープシーケンスに分類されます。「\n」以外にも「\f」や「\”」などと色々あります。

「java.util.Scanner」

こちらはJava.utilというパッケージの中からScannerクラスを呼び出しているという事になります。utilとはutilityを略した単語で「実用的な、便利な」という意味の機能として提供されています。

パッケージとはクラスを集めてひとまとめにしたものです。クラスはJavaにとって大事な要素です。

クラス?って感じですがここでおさらいしてみましょう。あまり説明は得意ではないですがだいたいこんなものですよという事を解説します。

Javaのようなオブジェクト志向でプログラムを作る時は必ずオブジェクトを定義するためのクラスを作ります。いわばオブジェクトの設計図がクラスです。

クラスの中にはメンバ変数、メソッドを含める事ができます。今回のような小さなプログラムなら一つのクラスで充分ですが、本格的なプログラムを作った場合は複数のクラスで連携し合って一つのソフトウェアとして構成するのです。

そのクラスをひとまとめにしたものがパッケージになります。今回使用したパッケージではjava.utilがパッケージ名でScannerがクラスになります。

パッケージ内のクラスがある場所を名前空間と言います。名前空間はクラスの名前を保管しておくために使われていてます。

クラス名は同じクラス名を持つ事ができませんが、パッケージさえわかれていれば同じクラス名を持つ事ができます。



と、前置きが長くなりましたが本題は

▼これが何を意味するか?という事です

java.util.Scanner sc = new java.util.Scanner(System.in);

簡略化して見てみましょう。だいぶわかりやすくなりました。

クラス 変数名 = new クラス();

そうです。scとは変数なんです。なのでこのようにしても意味は同じです。

java.util.Scanner sc;
sc = new java.util.Scanner(System.in);

new クラス() でオブジェクトが作られて、変数名inputに値を入れたという事です。実体であるインスタンスもメモリ上に作られます。さらに(System.in) がユーザーから標準入力を受け付けるという事になります。

とりあえずこの行でscというScannerオブジェクトを作りscにユーザーからの入力を受け付けるという動作を代入しています。

「入力受付専用のScannerオブジェクトを作ったよ。オブジェクトの値はscに入ってます」
という事です。Scannerクラスはコードの最初に2つのどちらかをつければ

import java.util.Scanner;
import java.util.*;

このように省略することも出来ます。

Scanner sc = new Scanner(System.in);

本格的なプログラムや何度も同じ動作を呼び出す場合はこちらの方を使い分けると良いかもしれません。

【オブジェクト志向とは?】

このオブジェクト志向 (object-oriented) という言葉のニュアンスをわかりずらくしているのは、「object」という英単語かもしれないと思います。なぜかというと、オブジェクトには様々な意味があるからです。

「object」は物という意味です。ただし日本語としての物という言葉の意味とは違うと思います。日本語で言う物は広義な意味もありますが普段使われているのはどちらかといえば対象物の見た目、ようするに物質的なもので見えて存在する物としての意味を指して使われている気がします。

対して英語の「object」は対象物、目標物の表面上の見た目としてだけではなく、物質的、それを構成し合っているデータ、存在すれば五感など、と含めた広い意味としてのオブジェクトを指すのではないかと。

英語の主語(S)+動詞(V)+目的語(O)として使われる目的語のOもobjectのOです。なので物だけではなく目標や目的という意味も含まれています。また英語は単語一つずつの意味だけではなく単語を組み合わせた意味というのもよくあるみたいなので「oriented」と組み合わせた意味などを調べた方が早いかもしれません。

オブジェクトとはプログラムを実在する物(仮想の物)として考えます。実在する物ですから一つのオブジェクトには物のデータが含まれます。

「int d = sc.nextInt()」

このコードの意味はまず「=」より右側から
「オブジェクトの値が入ったscにnextIntという機能を付けました」

という意味です。nextInt() にはキーボードから整数の文字列を受け取るという意味が含まれています。ind dのdがキーボードから受け取った値を格納するためのものです。

「if文」

「if文」は条件によって異なる出力処理をするという条件分岐的な動作をします。

if(d==1){
System.out.println("\n\n不正解!");
System.out.println("正解は2の台湾です。");
}
else if(d==2){
System.out.println("\n\n正解! 1998年台北でオープンした「猫花園」が猫カフェ発祥の地");
}
else if(d==3){
System.out.println("\n\n不正解!");
System.out.println("正解は2の台湾です。");
}
else {
System.out.println("\n\n1~3の番号を入力して下さい。");
}

今回のプログラムはこのようなコードになっていますが、「==」は関係演算子というもので、例えば「A == B」だったら「A と B は等しい」という意味を持っています。

if文は上から順に処理をしていき、trueで条件に合えば出力。falseで合わなければスルーして次の処理をするという流れです。

なのでユーザーが1を入力した場合は一番上の「d==1」の内容が出力されるといく仕組みです。「d==2」の正解がtrueならその内容を返します。

では一番下のこちらはどんな意味になるのでしょう?
else {
System.out.println(“\n\n1~3の番号を入力して下さい。”);
}

1、2、3とどの整数ともtrueではなくて整数以外の文字列ではない時に出力されるという動作です。

この記事のまとめ

途中英語についてふれましたが筆者は英語をあまり知りません (笑) 海外旅行は趣味といえる位好きなんですけどね、少しは聞き取れますがこれがまた喋れないんです。でも最近英語を覚えたいと思っていて、たまに英語のYouTube動画を見たり英語の組み合わせや文法とかを気が向いた時にちょいちょい調べています。

プログラムって英語が元になっていますからね。英文のパソコン系のニュースとか見れたらちょっと情報が早そうな気もしますし。

関連記事




この記事が気に入ったら
いいね!しよう

最新情報をお届けします

Twitterでめちゃログをフォローしよう!