Quiz- Fragen zufällig anzeigen lassen

Niklas170

Mitglied
Hallo, ich habe ein Quiz programmiert. Das einzige, was ich noch ändern will, ist, dass die Fragen zufällig und nicht immer in der gleichen Reihenfolge angezeigt werden. Kann mir jemand helfen und einen möglichen Lösungscode, der funktioniert, hier drunter schreiben? Wäre sehr nett und danke im voraus!
Hier mein Code:

Java:
//
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Quiz {

  public static void main(String[] args) {
 
    int punkte = 0;
 
    String[] frage1 = {
    "Wann fand die erste Mondlandung statt?",
    "<1> 1989",
    "<2> 1969",
    "<3> 1927",
    "2"
    };
 
    String[] frage2 = {
    "Von welchem Künstler stammt das Gemälde Sternenhimmel?",
    "<1> Rainer Randig",
    "<2> Pablo Picasso",
    "<3> Vincent van Gogh",
    "3"
    };
    String[] frage3 = {
    "Wie heißt die Hauptstadt von Eritrea?",
    "<1> Asmara",
    "<2> Bocklemühl",
    "<3> Biewende",
    "1"
    };
    String[] frage4 = {
    "Wann wurde die UNO gegründet?",
    "<1> 1945",
    "<2> 1938",
    "<3> 1990",
    "1"
    };
    String[] frage5 = {
    "Für welchen europäischen Topklub spiele Hristo Stoichkov?",
    "<1> FC Barcelona",
    "<2> Manchester United",
    "<3> Inter Mailand",
    "1"
    };
    String[] frage6 = {
    "Wer gewann die Fußballweltmeisterschaft 2010?",
    "<1> Argentinien",
    "<2> Spanien",
    "<3> Niederlande",
    "2"
    };
    //Fragen werden in einem zweidimensionalen String-Array gespeichert
    String[][] liste = {
    frage1,frage2,frage3,frage4,frage5,frage6
    };
    //Ausgabe von Fragen in der Konsole
    for(int i=0;i<liste.length;i++)
      {
   
      System.out.println(liste[i][I][0]);
      System.out.println(liste[i][I][1]);
      System.out.println(liste[I][i][2]);
      System.out.println(liste[i][I][3]);
      System.out.println("Bitte Antwort eingeben: ");
    
      //Einlesen von Eingabe
      BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
    
      try {
        String antwort =  eingabe.readLine();
        System.out.println("Sie haben als Antwort: "+antwort+" eingegeben.");
      
        //Vergleichen von Antworten
        if(antwort.equals(liste[I][i][4]))
          {
          System.out.println("#GenauDAS!\n");
          punkte++;
          }
        else
          {
          System.out.println("#nö!\n");
        }
      
      } catch (IOException e) {
        System.out.println("Falsche Eingabe!");
      }
    }
    System.out.println("Sie haben "+punkte+" von 6 Punkten erreicht.");
    if(punkte==6)
      {
      System.out.println("Sie erhalten die Gewinnsumme von 1.000.000€!");
      }
    else
      {
      System.out.println("Versuchen Sie es erneut!");
    }
  }
  
}
//
 
Zuletzt bearbeitet von einem Moderator:
Nur ein kleiner Schubs in die richtige Richtung:
Suche nach "array zufällig mischen"
oder schau dir mal Collections.shuffle(arraylist) an.
 
Moin,

nutze doch bitte die Code-Tags!!
Entweder über den "Einfügen..."-Button im Editor oder direkt: [code=Java] ...meinTollerCode... [/code]

Gruß Klaus
 
Habe gerade nichts zu tun, deshalb hier ein Vorschlag ^^:
Java:
public static void main(String[] args){

    List<String> questions = new ArrayList<>();
    questions.add("Frage 1: lalala");
    questions.add("Frage 2: hshshsh");

    String[] a1 = new String[]{"12", "14", "20"};
    String[] a2 = new String[]{"klo", "schuessel", "decke"};

    Collections.shuffle(questions);
    for (String s: questions){
        String num = s.substring(6, 7);
        System.out.println(s);
        if(Objects.equals(num, "1")){
            printAnswers(a1);
        }else if(Objects.equals(num, "2")){
            printAnswers(a2);
        }
    }
}

private static void printAnswers(String[] a) {
    for (String answer: a) {
        System.out.println(answer);
    }
}
 
Am besten wäre es du machst dir eine Klasse "Frage" in der du in geeigneten Attributen die Frage und die zugehörigen Antworten speicherst (inkl. Kennzeichen welches die richtige ist). Instanzen dieser Klasse speicherst du dann in einer ArrayList und beim Spielen greifst du dann per Zufallsindex auf diese Fragen zu. Du wirst dann noch geeignete Getter-Methoden brauchen (getFrage(), getAntworten(), istAntwortKorrekt() etc.) und schon hast du was du brauchst. Beim Vorschlag von @Cromewell sehe ich nicht wie er das mit beliebig vielen Fragen handlen will ?
 
@JStein52 Da hast du Recht. War auch nur schnell erstellt x)

So ist schon besser:
Java:
public class Question {

    private String quest;
    private String[] answers;
    private int solution;

    public Question(String quest, String[] answers, int solution){
        this.quest = quest;
        this.answers = answers;
        this.solution = solution;
    }

    public String getQuest() {
        return quest;
    }

    public void printAnswers() {
        for(String answer: answers){
            System.out.println(answer);
        }
    }

    public int getSolution() {
        return solution;
    }
}
So in etwa die main-func:
Java:
public static void main(String[] args){
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    int inp = 0;

    List<Question> questions = new ArrayList<>();
    questions.add(new Question("Frage 1: Wer bin ich?", new String[]{"a", "b", "c"}, 0));
    questions.add(new Question("Frage 2: Wie alt bin ich?", new String[]{"1", "2", "3"}, 1));

    for(Question q: questions){
        System.out.println(q.getQuest());
        q.printAnswers();
        try {
            inp = Integer.parseInt(reader.readLine());
        } catch (IOException e) {
            System.err.println("Fehler bei der Eingabe...");
            e.printStackTrace();
        } catch (IllegalArgumentException iae){
            System.err.println("Zahlen zwischen 1 und 3");
        }
        if(inp-1 == q.getSolution()){
            System.out.println("Richtig!");
        }else{
            System.out.println("Leider nicht...");
        }
    }

}

PS: Dann noch Collections.shuffle(questions); einbauen... und eventuell das "Frage n" rausnehmen 😀
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben