Android random multiple-choice-quiz: wie zur Identifikation der korrekten Antwort
Ich versuche zu erstellen, die eine zufällige multiple-choice-quiz für android. Ich möchte anzeigen, um eine zufällige Frage aus einem String-array mit der entsprechenden Antwort aus einem anderen string-array zeigt, in eine der folgenden vier Optionen. Die anderen drei Optionen werden kommen aus einer anderen string-array, welches verwendet wird, bieten die "falschen" Antworten für all die Fragen, nach dem Zufallsprinzip.
Zwei Fragen:
Gibt es einen besseren Weg, um einen multiple-choice-quiz wie diesem?
-und-
Wenn der Spieler wählt eine Antwort, wie kann ich ermitteln, welche array-die Antwort kam von?
Dies ist der code, den ich verwende, um zu randomisieren:
String[] question = { //questions here//};
ArrayList<String> questionList = new ArrayList(Arrays.asList(question));
String[] answer = { //answers here//};
ArrayList<String> answerList = new ArrayList(Arrays.asList(answer));
String[] distractor = { //distractors here//};
ArrayList<String> distractorList = new ArrayList(Arrays.asList(distractor));
int i = 0;
Random r = new Random();
public void randomize() {
TextView word = (TextView) findViewById(R.id.textView1);
TextView choice1 = (TextView) findViewById(R.id.textView2);
TextView choice2 = (TextView) findViewById(R.id.textView3);
TextView choice3 = (TextView) findViewById(R.id.textView4);
TextView choice4 = (TextView) findViewById(R.id.textView5);
if (i < question.length) {
int remaining = r.nextInt(questionList.size());
String q = questionList.get(remaining);
word.setText(q);
questionList.remove(remaining);
String a = answerList.get(remaining);
int slot = r.nextInt(4);
TextView[] tvArray = { choice1, choice2, choice3, choice4 };
tvArray[slot].setText(a);
answerList.remove(remaining);
//an if/else statement here to fill the remaining slots with distractors
InformationsquelleAutor CoffeeCrisp | 2012-08-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schlage ich vor, erstellen wir eine neue Klasse namens QuestionAndAnswer. Die Klasse halten sollte, die Frage und die richtige Antwort, es könnte auch halten Sie eine beliebige benutzerdefinierte falschen Antworten und die Auswahl des Benutzers. Die genaue Umsetzung ist völlig bis zu Ihnen.
In Ihrer Aktivität haben, die ein Array von diesem QuestionAndAnswer Klasse zum Durchlaufen der Liste die Fragen und tally die Punkte, wenn Sie fertig.
(Ich könnte genauer sein, wenn man den entsprechenden code von dem, was Sie versucht haben.)
Neben
Dies ist, was ich beginnen würde mit:
(Von deinem code, ich vermute, dass die
distractorList
enthält die falschen Antworten, die Sie anzeigen möchten.)Für die Tätigkeit wechselte ich in deine vier Antworten TextViews in eine RadioGroup, auf diese Weise kann der Benutzer intuitiv wählen Sie eine Antwort aus. Ausserdem gehe ich davon aus, dass es
prev
undnext
Knöpfe, Sie passenint currentQuestion
- und call -fillInQuestion()
.Haben Sie möglicherweise bemerkt, dass QuestionAndAnswer hat eine isCorrect () - Methode, wenn es Zeit ist Grad die quiz-können Sie die Anzahl der richtigen Antworten wie diese:
Dies ist mein Grundgedanke. Der code ist ein komplettes dachte, so wird es kompilieren. Natürlich, werden Sie wollen, fügen Sie einen Button "weiter" sehen Sie die verschiedenen Fragen. Aber das ist genug für Sie, um zu sehen, eine Möglichkeit, mischen Sie Ihre Fragen und Antworten, indem Sie diese organisiert.
Tun QuestionAndAnswer Klasse, die enthält die richtige Antwort auf die Frage, aber haben eine statische Liste der "Distraktoren" geteilt werden zwischen allen Ihren QuestionAndAnswer Objekte. Auch, haben eine variable namens usersChoice um zu speichern, welche Antwort der Benutzer tatsächlich ausgewählt. Finden Sie die eine, die war tatsächlich nahm durch die Umsetzung OnClickListener in Ihrem QuestionAndAnswer Klasse und tut textView.setOnClickListener(this) für jede Ihrer testView.
questionTextView.setText(qna.Frage); in fillInQuestion () - Funktion werfen nullpointer exception, weil der questionTextView-Objekt auf null gesetzt bei questionTextView = (TextView) findViewById(R. id.Frage zu stellen), können Sie erklären, warum?
Ja, dein layout nicht über eine View mit
@+id/question
.findViewById()
können nur suchen Sie Ansichten, die derzeit erstellt. Stellen Sie sicher, dassmain.xml
hat die Ansichten, die Sie möchten.ya Sie haben Recht, ich hatte schon.
InformationsquelleAutor Sam
Hier ein Beispiel, können Sie versuchen. Dies ist das Daten-Modell wie halten Sie Stoffe für die Frage-Antwort-Ding.
Ok, so dass Sie jedesmal, wenn Sie eine Frage, hast du alle Optionen zu beantworten, und die richtige Antwort zu jeder Frage.
Erstellen Sie einfach einen korrekten Daten-Struktur, um Sie zu halten.
Eh, nur ein Beispiel, soll nicht perfekt sein, aber versuchen Sie es, wenn Sie neu auf dieser stopft ^^!
InformationsquelleAutor Pete Houston