【Android Studio】クイズアプリ開発講座 第3回「クイズを準備する」
![](https://codeforfun.jp/wp-content/uploads/2018/09/thumb-android-quiz-4x.png)
ここまでの記事はこちら
クイズ画面を作成できたので、今回は「クイズを出題するために必要な変数・配列」を準備していきます。
解説
1. カウントラベル
前回 activity_main.xml に用意した TextView を使うための準備をします。
MainActivity.java を開いて3行目を追加します。
必要な import
6 行目あたりに import android.widget.TextView; が追加されます。
![](https://codeforfun.jp/wp-content/uploads/2023/09/as-quiz-java-giraffe-3-1-1024x429.png)
自動的に追加されない場合は自動 import を有効にする方法から設定しておくことをオススメします。
設定しても追加されない場合は、青いメッセージが出ている状態で Alt キーと Enter キーを同時に押してください。
2. TextViewとButton
4~8行目を追加します。
countLabel と同じく、activity_main.xml に用意した TextView と Button を使うための準備です。
同じ型の場合は1行にまとめて書くこともできます。
クイズの実装には
- onCreate
- showNextQuiz
- onClick
の3つのメソッドを使っていきます。
どのメソッド内からでも TextView と Button を使うことができるように
public class MainActivity extends AppCompatActivity
と
protected void onCreate(Bundle savedInstanceState)
の間にコードを書いています。
![](https://codeforfun.jp/wp-content/uploads/2023/09/as-quiz-java-giraffe-3-2-1024x235.png)
3. 正解カウントなど
3~5行目を追加します。
rightAnswer
正解を入れるために使います。
rightAnswerCount
正解数をカウントするために使います。
quizCount
何問目を出題しているのかをカウントするために使います。
4. 問題データを用意
4~18行目を追加します。
4行目
クイズのデータを管理するための配列を用意します。
6行目~
クイズデータを多次元配列で作成します。
ArrayListと多次元配列についてはこのあと説明します。
5. ビューの取得
onCreate メソッドに6~11行目を追加します。
前回 activity_main.xml を作成した時に、TextView と Button に id 属性を設定しました。
![](https://codeforfun.jp/wp-content/uploads/2023/09/as-quiz-java-giraffe-3-3.png)
findViewById は「idからビューを見つける」という意味です。
findViewById メソッドを使ってビュー要素を取得することで、MainActivity.java から TextView や Button のテキストを書き換えられるようになります。
6. クイズ配列を用意
クイズデータからクイズを出題するための配列を用意していきます。
5~19行目を追加してください。
ここで簡単に
- 基本的な配列
- 多次元配列
- 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];
または
String[] str = {"あ", "い", "う", "え", "お"};
と書いて、あらかじめ要素数を決めておく必要があります。
ArrayList の場合は、要素数を決めておく必要はありません。
ArrayList<String> tmpArray = new ArrayList<>();
まず10個の要素を格納できるように作成され、その後10個を超えると自動的に拡張してくれます。
例えばクイズ用に配列を使う場合、問題を追加することもありますし、クイズのレベルによって問題数が変わるかもしれません。そのたびに配列の大きさを変更するのは面倒ですし、問題数が多くなったら数えるのも大変です。
このように配列の大きさがどのくらい必要になるか分からない時に使えるのが ArrayList です。
このクイズでは少し応用して ArrayList を多次元配列の形で用意しました。
ArrayList<ArrayList<String>> quizArray = new ArrayList<>();
通常、型には String や Integer を使用しますが、今回は ArrayList の多次元配列バージョンです。ArrayList の中に ArrayList を入れていくので、型は ArrayList<String> としています。
7. コードの補足説明
さきほど書いたコードでは
- for ループを使って quizData からクイズを1問づつ取り出す
- tmpArray に問題・正解・選択肢を追加する
- quizArray に tmpArray を追加(ArrayList の中に ArrayList を入れる)
ということをしています。
なぜ quizData 配列から ArrayList 配列にわざわざ書きなおすのかと言うと、クイズには欠かせないシャッフル機能を簡単に実装するためです。
また、この講座の後半で SQLite データベースでのクイズ管理方法を紹介していきます。その時に ArrayList で用意しておく方が便利なので、このような書き方をしています。
tmpArray の tmpは「temporary」の略で「一時的」という意味です。temp と書くこともあります。一時的にしか使わない変数名によく使われるので、覚えておくと便利な書き方です。
8. Warningについて
現在 for ループの for の部分に Warning が出ていると思います。
for の上にカーソルをあわせると ‘for’ loop replaceable with enhanced ‘for’ と表示されます。
![](https://codeforfun.jp/wp-content/uploads/2023/09/as-quiz-java-giraffe-3-4-1024x182.png)
これは「for ループをより良い方法で書き換えることができます」という Warning です。
for の上でクリックすると、左側に豆電球のマークが出るのでクリックします。
![](https://codeforfun.jp/wp-content/uploads/2023/09/as-quiz-java-giraffe-3-5-1024x178.png)
Replace with enhanced ‘for’ をクリックします。
![](https://codeforfun.jp/wp-content/uploads/2023/09/as-quiz-java-giraffe-3-6-1024x265.png)
for ループが書き換わって Warning が消えたことが確認できると思います。
for (String[] quizDatum : quizData) {
この書き方は「quizData 配列から要素を quizDatum という名前で一つずつ取り出す」という方法です。
今まで quizData[i] と書いていた部分が quizDatum にあたるので、都道府県名の取り出し方が
tmpArray.add(quizData[i][0]);
から
tmpArray.add(quizDatum[0]);
に変わっています。
どちらの書き方でも良いですが、for ループに慣れるまでは配列のイメージをつかみやすい for (int i = 0; i < quizData.length; i++) で書くことをオススメします。
配列の使い方に慣れてきたら for (String[] quizDatum : quizData) を使って、効率的なコードを書いていきましょう。
次に行うこと
クイズを出題するための準備は完了です。
次回は quizArray からクイズを取り出して表示してみましょう!
ここまでのコード
- MainActivity.java
-