現在クイズアプリを作成中です。
分野ごとにクイズを作成しているのですが、全分野同じソースコードで、問題のみが異なるので、途中からクイズ画面を作成するメソッドOpenQ()とボタンを押したときに正誤判定をするxmlファイルで定義したonClickメソッド(checkAnswer)を他のクラスから参照してきて、コーディングを省略することにしました。
下記のコードでは、ServiceManagementクラスから参照しようとしています。
ServiceManagementクラスをOpenという名前でインスタンス化します。そして、そこからOpenQメソッドを使っています。
ここはまで、良かったのです。
しかし、checkAnswerメソッドの方が上手くいかないのです。
onClickは、ButtonクラスのメソッドなのでButtonで参照しようかと思いましたが、どうもうまくいきません。
何故、上手くいかないのでしょうか?publicで定義しているので、できるはずだと思っていたのですが、ご教授いただければ幸いです。
↓こちらが、参照元のServiceManagementクラスです。
java
1package jp.wings.nikkeibp.quizapp; 2 3import androidx.appcompat.app.AlertDialog; 4import androidx.appcompat.app.AppCompatActivity; 5 6import android.app.Application; 7import android.content.DialogInterface; 8import android.content.Intent; 9import android.os.Bundle; 10import android.view.View; 11import android.widget.Button; 12import android.widget.TextView; 13 14import java.lang.reflect.Array; 15import java.util.ArrayList; 16import java.util.Random; 17 18public class ServiceManagement extends AppCompatActivity { 19 20 private TextView c,q; 21 private Button a1,a2,a3,a4; 22 private int quizCount = 1; 23 private String rightAnswer; 24 private int rightCount = 0,Continuos = 0,Qvolume = 5; 25 26 String quizData[][] = { 27 {"SFAとは","営業支援","自主運用","サーバ借り","絶対必要"}, 28 {"バックエンドとは","見えない所","複数共有","使いやすさ","根本的改良"}, 29 {"フロントエンドとは","見える所","生活改善","情報格差","業務改善"}, 30 {"BPRとは","根本的改良","大量データ","自主運用","見えない所"}, 31 {"RPAとは","業務自動化","情報格差","見えることろ",""}, 32 {"インフラ","絶対必要","使いやすさ","営業支援","ゲーム要素"}, 33 {"ホスティングサービス","サーバ借り","構想具体化","見積書要求","エコな調達"}, 34 }; 35 36 ArrayList<ArrayList<String>> FEquestion = new ArrayList<>(); 37 38 @Override 39 protected void onCreate(Bundle savedInstanceState) { 40 super.onCreate(savedInstanceState); 41 setContentView(R.layout.activity_service_management); 42 43 c = findViewById(R.id.countLabel); 44 q = findViewById(R.id.questionLabel); 45 a1 = findViewById(R.id.answerBtn1); 46 a2 = findViewById(R.id.answerBtn2); 47 a3 = findViewById(R.id.answerBtn3); 48 a4 = findViewById(R.id.answerBtn4); 49 50 for (int i = 0; i < 5; i++) { 51 52 ArrayList<String> tempra = new ArrayList<>(); 53 54 tempra.add(quizData[i][0]); 55 tempra.add(quizData[i][1]); 56 tempra.add(quizData[i][2]); 57 tempra.add(quizData[i][3]); 58 tempra.add(quizData[i][4]); 59 60 FEquestion.add(tempra); 61 } 62 63 OpenQ(); 64 } 65 66 public void OpenQ(){ 67 68 c.setText("Q" + quizCount); 69 70 Random random = new Random(); 71 int randNum = random.nextInt(FEquestion.size()); 72 73 ArrayList<String> quiz = new ArrayList<>(); 74 75 quiz = FEquestion.get(randNum); 76 77 q.setText(quiz.get(0)); 78 79 quiz.remove(0); 80 81 a1.setText(quiz.get(0)); 82 a2.setText(quiz.get(1)); 83 a3.setText(quiz.get(2)); 84 a4.setText(quiz.get(3)); 85 86 FEquestion.remove(randNum); 87 } 88 89 public void checkAnswer(View view){ 90 91 Button answerBtn = findViewById(view.getId()); 92 String answerTxt = answerBtn.getText().toString(); 93 94 String notice; 95 96 if (answerTxt == rightAnswer){ 97 98 notice = "正解!"; 99 rightCount++; 100 Continuos++; 101 102 if (Continuos > 1) { 103 104 notice = Continuos + "連続正解"; 105 } 106 107 }else { 108 109 notice = "不正解"; 110 Continuos = 0; 111 } 112 113 AlertDialog.Builder Notice = new AlertDialog.Builder(this); 114 Notice.setTitle(notice); 115 Notice.setMessage("答え:" + rightAnswer); 116 Notice.setPositiveButton("NEXT", new DialogInterface.OnClickListener() { 117 @Override 118 public void onClick(DialogInterface dialog, int which) { 119 120 if (rightCount == Qvolume){ 121 Intent jorney = new Intent(getApplicationContext(),resultActivity.class); 122 jorney.putExtra("RIGHT_ANSWER_COUNT",rightCount); 123 startActivity(jorney); 124 }else{ 125 quizCount++; 126 OpenQ(); 127 } 128 129 } 130 }); 131 } 132}
そして、こちらが、basicTheoryクラスで、参照しようと試みているコードです。
java
1package jp.wings.nikkeibp.quizapp; 2 3import androidx.appcompat.app.AppCompatActivity; 4 5import android.os.Bundle; 6import android.view.View; 7import android.widget.Button; 8import android.widget.TextView; 9 10import java.util.ArrayList; 11import java.util.Collections; 12import java.util.Random; 13 14public class basicTheory extends AppCompatActivity { 15 16 private TextView c, q; 17 private Button a1, a2, a3, a4; 18 private int rightCount = 0, quizCount = 1, Continuos = 0, Qvolume = 5; 19 private String rightAnswer; 20 21 String quiz[][] = { 22 {"アナログとは", "うにょーん", "", "", ""}, 23 {"デジタルとは", "カクカク", "", "", ""}, 24 {"M(メガ)とは", "10^6", "10^3", "10^9", "10^12"}, 25 {"G(ギガ)とは", "10^9", "10^6", "10^3", "10^12"}, 26 {"μ(マイクロ)とは", "10^-6", "10^-9", "10^-3", "10^-12"}, 27 {"n(ナノ)", "10^-9", "10^-3", "10^-6", "10^-12"}, 28 }; 29 30 ArrayList<ArrayList<String>> FEquestion = new ArrayList<>(); 31 32 @Override 33 protected void onCreate(Bundle savedInstanceState) { 34 super.onCreate(savedInstanceState); 35 setContentView(R.layout.activity_basic_theory); 36 37 c = findViewById(R.id.countLabel); 38 q = findViewById(R.id.questionLabel); 39 40 for (int i = 0; i < 5; i++) { 41 42 ArrayList<String> tempra = new ArrayList<>(); 43 44 tempra.add(quiz[i][0]); 45 tempra.add(quiz[i][1]); 46 tempra.add(quiz[i][2]); 47 tempra.add(quiz[i][3]); 48 tempra.add(quiz[i][4]); 49 50 FEquestion.add(tempra); 51 } 52 53 ServiceManagement Open = new ServiceManagement(); 54 Open.OpenQ(); 55 56 } 57 Open.checkAnswer();//ここで、Openが赤字になる。 58 59}
回答1件
あなたの回答
tips
プレビュー