質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

1回答

1901閲覧

android studioでクイズアプリ、問題の1~5や6~10のように問題を表示させたい。

Naokinaoki

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2020/10/19 03:11

編集2020/10/19 08:54

前提・実現したいこと

プログラミング初心者です。
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); } }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/10/19 03:18

で、質問は何でしょうか 問題は何でしょう
keicha_hrs

2020/10/21 15:17

質問の意味がわかりません。「1~5や6~10のように」というのは、5問ずつ出題したいということですか?
Naokinaoki

2020/10/22 06:11

5問ずつ出題したいということです。 分かりにくくてすいません。
keicha_hrs

2020/10/22 15:41

5問ずつ出題するアプリを実現するためには、まず5問分の問題を出題できるレイアウトを作成するのが先でしょう。Javaソースコードだけ示されても、どこに5問分の問題を表示するビューがあるのか、この質問内容では全くわかりません。また、現在示されているコードも1問解答でActivity遷移することが前提になっていますから、どのように解答を入力するのか、どのように次の画面に遷移させるのか、その仕様から検討し直す必要があるのではありませんか。
guest

回答1

0

質問の意味を理解していないのかもしれませんが、単純に配列quizDataにある上から順番通りに出題したいというだけであるのなら、

java

1public void showNextQuiz() { 2// ランダムな数字を取得 3Random random = new Random(); 4int randomNum = random.nextInt(quizArray.size()); 5 6// randomNumを使って、quizArrayからクイズを一つ取り出す 7ArrayList<String> quiz = quizArray.get(randomNum);

となっている部分を

java

1public void showNextQuiz() { 2 3// quizArrayの先頭からクイズを一つ取り出す 4ArrayList<String> quiz = quizArray.get(0);

に変えればいいのではないですか?これで答えになっているのでしょうか・・・?

投稿2020/10/21 15:22

keicha_hrs

総合スコア6768

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問