前提・実現したいこと
プログラミング初心者です。
android studioでクイズアプリを作成しています。
ランダム表示ではなく、問題の15や610のように問題を表示させたいです。
今回、解答すると解答、解説画面に画面遷移します。
問題のランダム表示を順番に表示させたいです。
ご教授いただければ幸いです。
該当のソースコード
package jp.codeforfun.quizapp;
import androidx.appcompat.app.AppCompatActivity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
private TextView countLabel; private TextView questionLabel; private Button answerBtn1; private Button answerBtn2; private Button answerBtn3; private Button answerBtn4; private String rightAnswer; private int rightAnswerCount = 0; private int quizCount = 1; static final private int QUIZ_COUNT = 5; ArrayList<ArrayList<String>> quizArray = new ArrayList<>(); String[][] quizData = { // {"都道府県名", "正解", "選択肢1", "選択肢2", "選択肢3"} {"北海道", "札幌市", "長崎市", "福島市", "前橋市"}, {"青森県", "青森市", "広島市", "甲府市", "岡山市"}, {"岩手県", "盛岡市","大分市", "秋田市", "福岡市"}, {"宮城県", "仙台市", "水戸市", "岐阜市", "福井市"}, {"秋田県", "秋田市","横浜市", "鳥取市", "仙台市"}, {"山形県", "山形市","青森市", "山口市", "奈良市"}, {"福島県", "福島市", "盛岡市", "新宿区", "京都市"}, {"茨城県", "水戸市", "金沢市", "名古屋市", "奈良市"}, {"栃木県", "宇都宮市", "札幌市", "岡山市", "奈良市"}, {"群馬県", "前橋市", "福岡市", "松江市", "福井市"}, };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
countLabel = findViewById(R.id.countLabel); questionLabel = findViewById(R.id.questionLabel); answerBtn1 = findViewById(R.id.answerBtn1); answerBtn2 = findViewById(R.id.answerBtn2); answerBtn3 = findViewById(R.id.answerBtn3);
TextView countLabel = findViewById(R.id.countLabel);
// 正解数を取得 Intent intent = getIntent(); rightAnswerCount = intent.getIntExtra("rightAnswerCount", 0); //quizCountを取得 quizCount = intent.getIntExtra("quizCount", quizCount); // TextViewに表示する countLabel.setText(String.valueOf(quizCount) + "/10"); // クイズデータquizDataからクイズ出題用のquizArrayを作成する for (String[] quizDatum : quizData) { // 新しいArrayListを準備 ArrayList<String> tmpArray = new ArrayList<>(); // クイズデータを追加 tmpArray.add(quizDatum[0]); // 問題 tmpArray.add(quizDatum[1]); // 正解 tmpArray.add(quizDatum[2]); // 選択肢1 tmpArray.add(quizDatum[3]); // 選択肢2 // tmpArrayをquizArrayに追加する quizArray.add(tmpArray); }
ここのランダムのところを変更したい
public void showNextQuiz() {
// ランダムな数字を取得
Random random = new Random();
int randomNum = random.nextInt(quizArray.size());
// randomNumを使って、quizArrayからクイズを一つ取り出す ArrayList<String> quiz = quizArray.get(randomNum); // 問題文 questionLabel.setText(quiz.get(0)); // 正解をrightAnswerにセット rightAnswer = quiz.get(1); // クイズ配列から問題文(都道府県名)を削除 quiz.remove(0); // 正解と選択肢3つをシャッフル Collections.shuffle(quiz); // 回答ボタンに正解と選択肢3つを表示 answerBtn1.setText(quiz.get(0)); answerBtn2.setText(quiz.get(1)); answerBtn3.setText(quiz.get(2)); // このクイズをquizArrayから削除 quizArray.remove(randomNum); }
public void checkAnswer(View view) {
// どの回答ボタンが押されたか
Button answerBtn = findViewById(view.getId());
String btnText = answerBtn.getText().toString();
String str = rightAnswer.toString();
if (btnText.equals(rightAnswer)) { rightAnswerCount++; Intent intent = new Intent(Base_Screen.this, Correct_Answer.class); intent.putExtra("rightAnswerCount", rightAnswerCount); intent.putExtra("quizCount", quizCount); intent.putExtra("rightAnswer", str); startActivity(intent); } else { Intent intent = new Intent(Base_Screen.this, Incorrect_answer.class); intent.putExtra("rightAnswerCount", rightAnswerCount); intent.putExtra("quizCount", quizCount); intent.putExtra("rightAnswer", str); startActivity(intent); } }
}