Zufalllsfragen Generator

  • Antworten:14
Nico M.
  • Forum-Beiträge: 26

20.03.2014, 14:25:06 via Website

Hallo Ich habe eine Quiz app Programmiert und bräuchte mal Hilfe bei einem Problem. Ich würde gerne wissen wie ich die Fragen die in meinem Quiz kommen zufällig ablaufen lassen kann da sie bei mir noch nach der reihenfolge ablaufen und ich sie aber natürlich lieber zufällig hätte damit es sich nicht direkt nach einem mal Spielen wiederholt! Hoffe auf schnelle Hilfe danke schonmal im vorraus !

Antworten
impjor
  • Forum-Beiträge: 1.793

20.03.2014, 14:33:31 via Website

Du kannst dir über Java eine zufällige Zahl zwischen 0 und [Anzahl Fragen] generieren lassen und so die x-te Frage anzeigen lassen.
Wenn die Frage beantwortet wurde schrumpft entsprechend die Anzahl der (verbliebenen) Fragen.
Hier ein Link zu den Zufallszahlen: http://blog.mynotiz.de/programmieren/java-zufallszahl-von-bis-703/

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

20.03.2014, 14:35:06 via Website

Hi,

Schreibe die x verschiedenen Fragen in eine Liste und generiere eine Zufallszahl (1 aus x) und gebe die Frage an der durch die Zufallszahl definierten Stelle der Liste aus. Die Zufallszahl merkst Du Dir und bei jeder neuen Generierung der Zufallszahl für die jeweils nächste Frage prüfst Du, ob die Zahl (= die Frage) schon mal ausgegeben wurde. Falls ja, ermittelst Du gleich eine neue Zufallszahl (mit erneuter Prüfung), falls nein gibst Du die Frage aus und speicherst die Zufallszahl erneut in der Liste der bereits gezogenen.

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
impjor
  • Forum-Beiträge: 1.793

20.03.2014, 14:39:05 via Website

Carsten M.
Die Zufallszahl merkst Du Dir und bei jeder neuen Generierung der Zufallszahl für die jeweils nächste Frage prüfst Du, ob die Zahl (= die Frage) schon mal ausgegeben wurde. Falls ja, ermittelst Du gleich eine neue Zufallszahl (mit erneuter Prüfung), falls nein gibst Du die Frage aus und speicherst die Zufallszahl erneut in der Liste der bereits gezogenen.
Das ist nicht notwendig, wenn man die Fragen in einer List speichert. (z.B. ArrayList). Am Anfang alle Fragen dort speichern und dann wenn eine Frage angezeigt wird diese aus der Liste entfernen. So können auch keine Fragen doppelt angezeigt werden und man muss sich nicht alle Zufallszahlen merken.

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

20.03.2014, 14:39:50 via Website

impjor
Carsten M.
Die Zufallszahl merkst Du Dir und bei jeder neuen Generierung der Zufallszahl für die jeweils nächste Frage prüfst Du, ob die Zahl (= die Frage) schon mal ausgegeben wurde. Falls ja, ermittelst Du gleich eine neue Zufallszahl (mit erneuter Prüfung), falls nein gibst Du die Frage aus und speicherst die Zufallszahl erneut in der Liste der bereits gezogenen.
Das ist nicht notwendig, wenn man die Fragen in einer List speichert. (z.B. ArrayList). Am Anfang alle Fragen dort speichern und dann wenn eine Frage angezeigt wird diese aus der Liste entfernen. So können auch keine Fragen doppelt angezeigt werden und man muss sich nicht alle Zufallszahlen merken.
Stimmt, hast recht... :-)

ROFL - Warum kompliziert, wenn's auch einfach geht...

Völlig richtig...

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
Nico M.
  • Forum-Beiträge: 26

20.03.2014, 14:48:53 via Website

Ok soweit so gut Ich trag die Fragen also in eine Array Liste ein das hab ich mir schon gedacht und wie sieht das code mäßig aus ?

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

20.03.2014, 15:12:51 via Website

Eintragen in eine Liste kannst du mit:
1frageListe.add(...);

Eine zufällige Zahl zwischen 0 und Größe der Liste erstellen mit:
1Random random = new Random();
2int zufallszahl = random.nextInt(frageListe.size());

Die Frage bekommen mit:
1Frage zufallsFrage = frageListe.get(zufallszahl);
Ich weiß jetzt nicht in welchem Datentyp du deine Fragen gespeichert hast, deswegen habe ich Frage frage genommen ;)

Die Frage löschen mit:
1frageListe.remove(zufallszahl);
Wobei das passieren sollte bevor du eine neue Zufallszahl erstellst ;)

Verbessert mich wenn was falsch ist :)

— geändert am 20.03.2014, 15:22:17

Antworten
Andreas S.
  • Forum-Beiträge: 76

20.03.2014, 22:36:54 via Website

Die Funktion mischt dir die Einträge in der Liste:

1Collections.shuffle(frageListe);

— geändert am 20.03.2014, 22:40:48

impjor

Antworten
Nico M.
  • Forum-Beiträge: 26

21.03.2014, 19:09:17 via Website

Aufjedenfall schonmal danke aber wie kann ich dann die Antworten überprüfen ?

Antworten
impjor
  • Forum-Beiträge: 1.793

21.03.2014, 20:20:52 via Website

Genauso, wie du es bisher gelöst hast?:blink: (Als die Fragen noch der Reihe nach kamen...)
Wenn das jetzt nicht mehr funktioniert, solltest du das Konzept überdenken.

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Nico M.
  • Forum-Beiträge: 26

23.03.2014, 12:18:27 via Website

Ja ich hab ja im moment einfach 2 Strings fragen und Antwort string !

Antworten
impjor
  • Forum-Beiträge: 1.793

23.03.2014, 13:34:34 via Website

Nico M.
Ja ich hab ja im moment einfach 2 Strings fragen und Antwort string !
Warum hast du zwei Fragen-Strings? Hast du zwei Fragen? Wenn, ist doch nur die aktuelle Frage interessant.
Was ist dein Antwort-String? Die Antwort des Nutzers? Die Lösung? Normalerweise hat ein Quiz Multiple-Choice, d.h. es gibt (z.B.) 4 Antwortmöglichkeiten und der User wählt eine davon aus. Dann wird als Lösung einfach gespeichrt, ob die erste / zweite / drite oder vierte Möglichkeit die richtige war.

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Nico M.
  • Forum-Beiträge: 26

24.03.2014, 17:29:00 via Website

Ne ich hab das so gemacht das man die Antwort selber eingeben muss ! (Fand das anspruchsvoller für den User) deswegen habe ich einen Fragen String und einen dazugehörigen Antwort string

Antworten
impjor
  • Forum-Beiträge: 1.793

24.03.2014, 19:56:58 via Website

Prinzipiell kannst du ja String mittels String1.equals(String2) überprüfen. Da Groß-\Kleinschreibung nicht beachtet werden soll wäre da noch String#equalsIgnoreCase(...);
Natürlich bekommst du da nur einen Vergleich Buchstabe für Buchstabe. Also auf die Frage "Wie heißt unsere Bundeskanzlerin?" Kann "Merkel" von dir als richtig angesehen werden, "Angela" oder "Angela Merkel" oder "Frau Merkel" sind dann aber falsch...

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Lucas
  • Forum-Beiträge: 717

24.03.2014, 22:02:26 via App

ich würde es so machen

1ArrayListQuestion.add(Frage);
2ArrayListAnswer.add(passende Antwort);
3
4Random rnd = New Random();
5
6int zufall = rnd.nextInt(ArrayListQuestion.size()):
7
8String q = ArrayListQuestion.get(zufall), a = ArrayListAnswer.get(zufall);
9
10ArrayListQuestion.remove(zufall)
11ArrayListAnswer.remove(zufall)

ich hoffe das stimmt

MfG
Lucas

— geändert am 24.03.2014, 22:04:36

Antworten