4択クイズアプリ

【Android Studio 4.1】クイズアプリ開発講座 第3回「クイズを準備する」

 
この講座の目次はこちら

Android Studio 3.x / 4.0.1 をお使いの方はこちらをお読み下さい。

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

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

MainActivity.java を開いて始めていきましょう!
 
 


 

動画

【Android Studio 4.1】クイズアプリ開発講座 #4 クイズを準備する

 

動画で使用しているクイズデータ


 
 

テキスト

1. カウントラベル

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

前回 activity_main.xml で作成した TextView を使うための準備です。
 
 

TextView の部分が赤くなる場合

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

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

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

警告が消えましたか?

コードを見てみると6行目あたりに import android.widget.TextView; が追加されています。

import android.widget.TextView; が追加
 

基本的に import~ は自動的に追加されますが、コードをコピペした場合は追加されないことが多いです。

今後同じように import が必要になった場合は altreturn を押して必要な import を行って下さい。
 
 

2. TextViewとButton

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

countLabel と同じく、activity_main.xml に用意した TextView と Button を使うための準備です。

まとめて書くこともできます。

 

クイズの実装には

  • onCreate
  • showNextQuiz
  • checkAnswer

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

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

public class MainActivity extends AppCompatActivity

protected void onCreate(Bundle savedInstanceState)

の間にコードを書いています。
 

public class MainActivity と protected void onCreate の間
 
 

3. 正解カウントなど

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

 

rightAnswer

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

rightAnswerCount

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

quizCount

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

 
 

4. 問題データを用意

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

 

4行目

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

6行目~

クイズデータを多次元配列で作成します。
ArrayListと多次元配列についてはこのあと説明します。
 
 

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

6~11行目を追加します。

 

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

テキストビューとボタンのid
 

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

findViewById を使って要素を取得することで、MainActivity.java から TextView や Button のテキストを書き換えられるようになります。
 
 

6. クイズ配列を用意

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

4~19行目を追加してください。

 

ここで簡単に

  1. 基本的な配列
  2. 多次元配列
  3. 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. コードの補足説明

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

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

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

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

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

tmpArrayとは

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

 
 

8. Warningについて

現在 for ループの for の部分に Warning が出ていると思います。

for の上にカーソルをあわせると 'for' loop replaceable with enhanced 'for' と表示されます。

for loop replaceable with enhanced for
 

これは「for ループをより良い方法で書き換えることができます」という Warning です。
 

for の上でクリックすると、左側に豆電球のマークが出るのでクリックします。

豆電球のマーク
 

Replace with enhanced 'for' をクリックします。

Replace with enhanced for
 

for ループが書き換わって Warning が消えたことが確認できると思います。

for (String[] quizDatum : quizData) {

この書き方は「quizData 配列から要素を quizDatum という名前で一つずつ取り出す」という方法です。
 

今まで quizData[i] と書いていた部分が quizDatum にあたるので、都道府県名の取り出し方が

tmpArray.add(quizData[i][0]);

から

tmpArray.add(quizDatum[0]);

に変わっています。
 

どちらの書き方でも良いですが、プログラミング初心者の方は配列のイメージをつかみやすい for (int i = 0; i < quizData.length; i++) で書くことをオススメします。

配列の使い方に慣れてきたら for (String[] quizDatum : quizData) を使って、効率的なコードを書いていきましょう
 
 

次に行うこと

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

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

第4回「問題と選択肢を表示する」に進む
 

ここまでのコード


 
 

クイズアプリ開発講座の完全版について


 

もっとアプリ開発をしてみたい!自分のアプリをリリースしたい!という方のために、この講座の完全版をご用意しました。
 

完全版では

  • SQLite Databaseを使ってのクイズ管理
  • クイズカテゴリの選択
  • 正解・不正解の効果音
  • AdMob バナー・インタースティシャル広告
  • Image Asset Studio(アイコン作成ツール)の使い方

などを実装していきます。
 

これらのコードはクイズアプリ以外にも利用できるコードばかりなので、今後アプリを開発していく時に必ず役立つと思います。
 

さらに3つの特典

  1. Google Play Games リーダーボード・実績の実装方法
  2. 画像を使ったクイズアプリの作り方
  3. 答えを入力するクイズアプリの作り方

もご用意しました。
 

講座ボーナス
 

全手順の動画付きで、アプリの開発から公開・アップデートまで出来る講座になっています。

初めてアプリを作るという方もぜひ挑戦してみてください
 

 
 

ABOUT ME
Sara
Sara
「わかりやすく・シンプル」をモットーに、スマホアプリ・ウェブアプリの作り方を紹介します。 独学でプログラミングを勉強をしている方、基礎は勉強したけれど次に何をすれば良いか分からない...という方のお役に立てるサイトを目指しています🙂
独学は難しそうと感じたら

 
独学でプログラミングを勉強するのは難しそう、効率的にプログラミングを学びたいという方はオンラインスクールがオススメです。

オンラインスクールを選ぶときのポイント

  • 無料体験があること
  • 個別サポートがあること

自分にあったスタイルを見つけるために、無料体験のご利用をオススメします。(無料体験後に自分には合わないなと感じたらハッキリ断ってしまって問題ありません。)
 
個別サポートもプログラミング学習に挫折しないために重要なポイントです。エラーや困った時にすぐに個別対応をしてくれるスクールを利用して下さい。

ここでは3つのオンラインスクールを紹介します。
全て無料体験がありますので、ぜひ自分に合ったスクールを見つけてみて下さい????
 

1. TechAcademy(テックアカデミー)

オンライン完結で勉強できるスクールで、コースがとても充実しています。チャットで質問すればすぐに回答を得られるのが一番のおすすめポイントです。
オリジナルのサービスやアプリの開発もサポートしてくれるので、開発したいものが決まっている人にもオススメです。

無料体験はこちら

2. CodeCamp(コードキャンプ)

一対一で受講できる個別指導のプログラミングスクールです。
Webデザイン・Webサービス開発・アプリ開発などを幅広く学習することができます。
マンツーマンなので自分のペースで学習できて、質問もその都度できるのがメリットです。

無料体験レッスンはこちら

3. Treehouse

英語でも良い、英語とプログラミングを同時に勉強したいという方は Treehouse がオススメです。月25ドルで始めることができて、たくさんのプログラミング言語を学ぶことができます。
個別サポートはありませんが、掲示板が充実しています。ほとんどの場合、質問してから30分程度で回答を得ることができます。

7日間の無料体験はこちら

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA