クイズを準備する

目次

はじめに

前回はプロジェクトを立ち上げ、クイズ画面を作成しました。

今回は「クイズを出題するために必要な配列」を準備していきます。

それでは、MainActivity.javaを開いて始めていきましょう!


動画

クイズデータはこちらを使用しています。

 

 

テキスト

1. カウントラベル

まずは3行目を追加します。

これは、前回 activity_main.xml で作成したテキストビューを使うための準備です。


画像のように TextView の部分が赤くなり、青いメッセージが出ているかと思います。

* 青いメッセージは出ずに、自動で追加される場合もあります。

これは「android.widget.TextView」をインポートしてくださいという警告です。 

青いメッセージが出ている状態で「alt」と「return」を同時に押してください。

 

警告が消えましたか?

 

コードを見てみると、import android.widget.TextView; が追加されています。


「alt + return」を押さずに import android.widget.TextView; を直接書くこともできます。

 

このあと書いていく Button・String・ArrayList にも警告が出るかと思います。

その場合も同じように「alt + return」を押して警告を消してください。

 

 

2. TextViewとButton

4~8行目を追加します。

countLabel と同じで、activity_main.xml で作成したテキストビューとボタンを使うための準備です。


クイズの実装には

  • onCreate
  • showNextQuiz
  • checkAnswer

の3つのメソッドを使っていきます。


どのメソッド内からでも questionLabel と answerBtn を使うことができるように

よりも上の部分に書いていきます。

 

一つのメソッド内でしか使わない場合は、そのメソッド内に書くこともできます。

 

 

3. 正解カウントなど

5~7行目を追加します。

rightAnswer

正解を入れるために使います。


rightAnswerCount

正解数をカウントするために使います。


quizCount

何問目を出題しているのかをカウントするために使います。



4. 問題データを用意

4~18行目を追加します。

5行目

クイズのデータを管理するための配列を用意します。


7行目~

クイズデータを多次元配列で作成します。


ArrayListと多次元配列についてはこのあと説明します。

 

 

5. ラベルとボタンを取得

7~12行目を追加します。


前回activity_main.xmlを作成した時に、テキストビューとボタンにidを設定しました。

 

findViewById は「idからビューを見つける」という意味です。

これをすることで、MainActivity.java からテキストビューやボタンの文字を書き換えられるようになります。

 

 

6. クイズ配列を用意

クイズデータからクイズを出題するための配列を用意していきます。

5~20行目を追加してください。


ここで簡単に

  • 基本的な配列
  • 多次元配列
  • ArrayList

の違いを紹介します。

型はString(文字列)を例に紹介していますが、Integer(数値)など他の型の場合でも使い方は同じです。


基本的な配列

String colors[] = {"赤", "青", "緑"};

colors[ 0 ] → 赤
colors[ 1 ] → 青
colors[ 2 ] → 緑

で取り出すことができます。

 

多次元配列

基本的な配列の中に配列を入れている形です。

String colors[][] = {
 {"赤", "ピンク", "朱"},
 {"青", "水色", "紺"},
 {"緑", "黄緑", "深緑"}
};

colors[ 0 ][ 0 ] → 赤
colors[ 1 ][ 1 ] → 水色
colors[ 2 ][ 2 ] → 深緑

 

ArrayList

基本的な配列と同じですが、配列の大きさを決めなくて良いのがArrayListです。

 

例えば、5個の要素を持つ配列の場合、基本的な配列ではこのように書きます。

String str[] = new String[5] ;

 

一方、ArrayList の場合は要素の数を設定する必要がありません。

ArrayList<String> tmpArray = new ArrayList<>();

まず10個の要素を格納できるように作成され、その後10個を超えると自動的に拡張してくれます。

 

例えばクイズ用に配列を使う場合、問題を追加することもありますし、 クイズのレベルによって問題数が変わるかもしれません。 そのたびに配列の大きさを変更するのは面倒ですし、 問題数が多くなったら数えるのも大変です。

このように配列の大きさがどのくらい必要になるか 分からない時に使えるのが ArrayList です。

 

このクイズでは少し応用して ArrayList を多次元配列の形で用意しました。

ArrayList<ArrayList<String>> quizArray = new ArrayList<>();

通常、型には String や Integer を使用しますが、今回は ArrayList の多次元配列バージョンです。

ArrayList の中に ArrayList を入れていくので、型は ArrayList<String>としています。

 

7. コードの補足説明

さきほど書いたコードでは

  1. for ループを使って、quizData からクイズを1問づつ取り出す
  2. tmpArray に問題・正解・選択肢を追加する
  3. quizArray に tmpArray を追加(ArrayList の中に ArrayList を入れる)

ということをしています。

  

なぜ多次元配列から ArrayList にわざわざ書きなおすのかと言うと、クイズには欠かせないシャッフル機能を簡単に実装するためです。

また、この講座の後半で SQLite データベースでのクイズ管理方法を紹介していきます。その時に ArrayList で用意しておく方が便利なので、このような書き方をしています。


tmpArrayとは

tmpArrayのtmpは「temporary」と略で「一時的」という意味です。tempと書くこともあります。
一時的にしか使わない変数名によく使われるので、覚えておくと便利な書き方です。

 

まとめ

クイズを出題するための準備はこれで完了です。

次回は、今回作成したquizArrayからクイズを表示させていきましょう!

 

ここまでのコード

コメント

0 コメント