Quiz App: Antworten bei jedem Aufruf in unterschiedlicher Reihenfolge darstellen

  • Antworten:11
  • Bentwortet
appmaker4567
  • Forum-Beiträge: 4

06.12.2019, 14:07:06 via Website

Hallo bin relativ neu im App entwickeln.

Habe eine Quiz App entwickelt, nun möchte ich dass die Antworten bei jedem Aufruf in einer anderen Reihenfolge angezeigt werden.
Muss ich hier beim Anzeigen auf dem Screen oder beim laden aus der Datenbank etwas ändern?
Stehe gerade etwas auf dem Schlauch
Mfg

Antworten
Jokel
  • Forum-Beiträge: 1.530

06.12.2019, 15:57:31 via Website

Hallo erstmal willkommen im Forum.

Die Anzeige wird ja wohl gleich bleiben.
Also entweder du machst ein random der Daten bevor du sie anzeigen lässt.
Oder host sie gleich per Zufall aus der DB.

Ohne genauere Infos über deinen Code kann mann hier nicht viel Hilfe geben.

appmaker4567Pascal P.

Antworten
appmaker4567
  • Forum-Beiträge: 4

08.12.2019, 12:05:02 via Website

Hallo, danke schonmal
Würde es gerne mit nem Random der Daten vor dem Anzeigen machen
Glaub der Teil des Codes sollte der entsprechende sein.

private void showNextQuestion(){
rb1.setTextColor(textColorDefaultRb);
rb2.setTextColor(textColorDefaultRb);
rb3.setTextColor(textColorDefaultRb);
rb4.setTextColor(textColorDefaultRb);
rbGroup.clearCheck();

    if (questionCounter < questionCountTotal) {
        currentQuestion = questionList.get(questionCounter);

        textViewQuestion.setText(currentQuestion.getQuestion());
        rb1.setText(currentQuestion.getAnswer1());
        rb2.setText(currentQuestion.getAnswer2());
        rb3.setText(currentQuestion.getAnswer3());
        rb4.setText(currentQuestion.getAnswer4());

        questionCounter++;
        textViewQuestionCount.setText("Question: " + questionCounter + "/" + questionCountTotal);
        answered = false;
        buttonConfirmNext.setText("Bestätigen");
        timeLeftInMillis = COUNTDOWN_IN_MILLIS;
        startCountDown();
    } else {
        finishQuiz();
    }

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.12.2019, 12:44:29 via Website

Vielleicht machtst du in die Question Klasse noch eine Methode getNextQuestion() oder sowas rein, die dann eine belibige Antwort aus den 4 zurückgibt. Du musst nur dafür sorgen, dass es keine doppelten gibt.
Theoretisch kannst du das mit einer Liste/Array und einer Zufallszahl machen und dir merken, welche Antworten du schon verwendet hast.

LG Pascal //It's not a bug, it's a feature. :) ;)

appmaker4567

Antworten
appmaker4567
  • Forum-Beiträge: 4

08.12.2019, 18:11:09 via Website

Sorry verstehe ich leider nicht ganz was damit gemeint ist.
Also im Moment werden einem 4 Antworten angezeigt und diese Antworten sollen immer in ner unterschiedlichen Reihenfolge kommen

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.12.2019, 19:49:32 via App

OK und was machen die Methoden getAnswer1...4() im Code?
Kannst du den Ausschnitt mal posten.

LG Pascal //It's not a bug, it's a feature. :) ;)

appmaker4567

Antworten
appmaker4567
  • Forum-Beiträge: 4

08.12.2019, 21:10:31 via Website

public class Question {
private String question;
private String answer1;
private String answer2;
private String answer3;
private String answer4;
private int answerNr;
private int levelId;
private int categoryId;

public Question() {
}




public Question(String question, String answer1, String answer2, String answer3, String answer4,
                int answerNr,int levelId, int categoryId ) {
    this.question = question;
    this.answer1 = answer1;
    this.answer2 = answer2;
    this.answer3 = answer3;
    this.answer4 = answer4;
    this.answerNr = answerNr;
    this.levelId = levelId;
    this.categoryId = categoryId;

}

public String getQuestion() {
    return question;
}

public void setQuestion(String question) {
    this.question = question;
}

public String getAnswer1() {
    return answer1;
}

public void setAnswer1(String answer1) {
    this.answer1 = answer1;
}

public String getAnswer2() {
    return answer2;
}

public void setAnswer2(String answer2) {
    this.answer2 = answer2;
}

public String getAnswer3() {
    return answer3;
}

public void setAnswer3(String answer3) {
    this.answer3 = answer3;
}

public String getAnswer4() {
    return answer4;
}

public void setAnswer4(String answer4) {
    this.answer4 = answer4;
}

public int getAnswerNr() {
    return answerNr;
}

public void setAnswerNr(int answerNr) {
    this.answerNr = answerNr;
}

public int getLevelId() {
    return levelId;
}

public void setLevelId(int levelId) {
    this.levelId = levelId;
}

public int getCategoryId() {
    return categoryId;
}

public void setCategoryId(int categoryId) {
    this.categoryId = categoryId;
}

}

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.12.2019, 12:33:09 via Website

Vielleicht sowas in der Art:

public List<String> getAnswersRandomly(){
 List<String> answerList = new ArrayList<String>();
 answerList.add(answer1);
 answerList.add(answer2);
 answerList.add(answer3);
 answerList.add(answer4); 
//Liste aus Antworten aufbauen

 Collections.shuffle(answerList); //Listenelemente "mischen"
return answerList;     
}

und dann kannst du in deiner Activity:

textViewQuestion.setText(currentQuestion.getQuestion());
List<String> answerList = currentQuestion.getAnswersRandomly();
        rb1.setText(answerList.get(0));
        rb2.setText(answerList.get(1));
        rb3.setText(answerList.get(2));
        rb4.setText(answerList.get(3));

Code ist nicht getestet, aber sollte vom Prinzip her gehen.

LG Pascal //It's not a bug, it's a feature. :) ;)

appmaker4567

Antworten
Jokel
  • Forum-Beiträge: 1.530

09.12.2019, 15:54:23 via Website

Hallo @pascal das ist ein guter und einfacher Vorschlag.
Nur sollte er auch bedenken und kontrollieren wo jetzt die richtige Antwort ist. Denn jetzt stimmt nun seine Antwort bestimmt nicht mehr.

Pascal P.appmaker4567

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.12.2019, 18:51:52 via App

Ja das ist dann der nächste Schritt.
Eins nach dem Anderen ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

Jokelappmaker4567

Antworten
Jokel
  • Forum-Beiträge: 1.530

09.12.2019, 19:04:28 via Website

Ok dann schauen wir mal wie er es meistert ;)

appmaker4567

Antworten
Jokel
  • Forum-Beiträge: 1.530

09.12.2019, 20:08:43 via Website

Ein Vorschlag von mir ich würde fur die Liste nicht nur einen string machen.
Am besten ein Objekt eine Klasse mit einer string variablen und einen int oder ein boolean der angibt das die Antwort die richtigr ist oder nicht.

Die arraylist benutzt dann die Klasse Objekt. Somit ist immer auch bei der Antwort mitgespeichert ob es die richtige ist.

— geändert am 09.12.2019, 20:09:46

Pascal P.

Antworten