Quiz als Studienarbeit

HalitGö

Mitglied
Servus zusammen,

ich möchte ein Quiz in Java programmieren bzw. es ist eine Studienarbeit.
Da ich mich noch als Anfänger bezeichnen würde, kenne ich mich noch nicht all zu gut aus.

Dennoch sollte ich ein Quiz hinkriegen.
Es sollen 3 Schwierigkeitsstufen geben (leicht, mittel und schwer). Hierzu habe ich 3 Frage Klassen angelegt, und in jeder Klasse habe ich eine ArrayList erstellt die, die Fragen aus einer .txt Datei aussliest. Das klappt auch schon!
Zu jeder Frage gibt es 4 Antwortmöglichkeiten.

Danach habe ich meine GUI Oberfläche der Fragen designt.
Jetzt zu meiner Frage: Wie schaffe ich es dass meine Frage oben im TextArea angezeigt wird und meine Antwortmöglichkeiten in die 4 Antwortmöglichkeiten eingelesen werden. Am besten sollte dies noch im Zufallsprinzip geschehen.
Und wie sage ich dem Programm welche Antwort richtig bzw. falsch ist.
Im Anhang ist eine Vorstellung, wie es aussehen sollte/könnte.

Ich bedanke mich jetzt schon mal für hoffentlich hilfreiche Antworten.
 

Anhänge

  • GUI.png
    GUI.png
    26,2 KB · Aufrufe: 44

strußi

Top Contributor
so wie du es beschreibst brauchst du ein Liste mit den einzelnen Fragen, eine Liste mit den Antworten und eine Liste mit den richtigen Antworten
hast du eine List<String[]> antworten =new ArrayList<>();?
dann brauchst du eine List<int> antwort =new ArrayList<>(); der die nummer der richtigen Antwort hat oder als String die Richtige Antwort hat, damit du mit StringGegebeneAntwort.equals(StringRichtigeAntwort) prüfen kannst ob die gegebene Antwort richtig ist.
dann wäre es einfach. Das String[] auslesen und mittels einer Methode String für String in die TextArea schreiben.
wie wäre es an stelle der TextArea mit RadioButtons? dann brauchst du nur noch ein Button für weiter.

überleg dir das konzept noch mal, und zeig uns etwas code, damit wir dir bei spezifischen Fragen helfen können
 

truesoul

Top Contributor
Hallo,

sowas wie

Java:
public class Question {

    private List<Answer> answer = new ArrayList<>();
    private String text;

    public List<Answer> getAnswer() {
        return answer;
    }

    public void addAnswer(Answer answer) {
        this.answer.add(answer);
    }

    public void setText(String text) {
        this.text = text;
    }

    public String getText() {
        return text;
    }
}

public class Answer {

   private String text;
   private boolean isCorrect = false;

   public void setCorrect(boolean isCorrect) {
     this.isCorrect = isCorrect;
   }

   public void setText(String text) {
     this.text = text;
   }

   public boolean isCorrect() {
     return isCorrect;
   }

   public String getText() {
     return text;
   }

}

wäre hilfreich. Dann bräuchtest du nur eine Liste mit Questions.
Und wie man in einem TextArea ein text hinzufügt sollte mit Google schnell zu finden sein.

Und wenn du Frage aus einer Datei einlesen möchtest, dann ist eine sinvolle Dateistruktur/typ gut. XML z.B.

Grüße
 

HalitGö

Mitglied
Also erst mal vielen Dank für die schnellen Antworten, ich bin euch wirklich dankbar :)
Nun zum Thema:
Wie gesagt, ich habe mir vorgestellt 3 FrageKlassen zu erstellen (zu jeder Schwierigkeit, s.Anhang)
Fragenleicht.png
Ich denke, es ist vielleicht nicht die schlauste Variante, aber wie soll ich sonst 3 Schwierigkeitsstufen hinbekommen die in zufälliger Reihenfolge dran kommen sollen.
Ist es vielleicht schlauer, eine .txt Datei nur für Fragen einzulesen und diese dann auf das textArea auszugeben? (s.Anhang)
fragen.png
Tut mir leid, wenn ihr die Frage schon beantwortet habt, ich habe es leider nicht ganz verstanden, was ich jetzt wirklich tun soll.

Trotzdem jetzt schon mal vielen lieben Dank an euch :)

Grüße
 

HalitGö

Mitglied
Achso, dazu hätte ich auch noch eine Frage:
Im Anhang ist mal ein Entwurf wie die Hauptoberfläche aussehen soll: GUI.png
Wie schaffe ich es, wenn ich auf Anleitung drücke, sich ein übersichtliches Fenster öffnet, in das ich meine "Spielanleitung" rein schreiben kann. Das würde mir auch noch sehr weiter helfen :)
 

KaffeeFan

Bekanntes Mitglied
button.addActionListener(new ActionListener...

probier mal ein bisschen herum :)

P.S: du solltest in den ActionListener z.B. ein JFrame einfügen auf dem du dann z.B. ein JLabel mit der Anleitung anzeigen lassen kannst
 

KaffeeFan

Bekanntes Mitglied
Da ich jetzt Feierabend mache, hier eine mögliche Lösung, falls du es nicht hinbekommst...

Java:
JButton button = new JButton();
    button.addActionListener(new ActionListener(){
      @Override
      public void actionPerformed(ActionEvent evt)
      {
        JFrame frame = new JFrame("Anleitung");
        frame.setSize(100,100);
        frame.setVisible(true);
       
        JLabel label = new JLabel("Anleitung");
       
        label.add(frame);
      }
    });
 

HalitGö

Mitglied
Erst mal vielen Dank für die zahlreichen Antworten, dass alles hilft mir wirklich tierisch weiter und es fängt an Spaß zu machen!

Momentan arbeite ich an der Anleitung, wenn ich auf der Hauptoberfläche auf "Anleitung" drücke öffnet sich schon mal das Frame (danke KaffeeFan)
Jetzt möchte ich auf dem Frame einen Button hinzufügen, mit dem ich auf die Oberfläche zurück komme.

btn.png
Das Problem ist, wenn ich
frame.add(btnZ);
mache, wird das komplette Frame ein Button obwohl ich eigentlich gesagt habe wo der Button sein soll...
Achja, gibt es eine Möglichkeit in dem Anleitungsfenster mit dem WindowBuilder zu arbeiten?
Das würde bestimmt besser und effizienter gehen.

Danke jetzt schon mal, das hier ist wirklich eine große Hilfe!!!

Grüße
 

KaffeeFan

Bekanntes Mitglied
Du musst dem JFrame ein passendes Layout geben, dann wird der Button "normal" angezeigt

p.s: Mit WindowBuilder kenne ich mich nicht aus, sorry
 

strußi

Top Contributor
ich nehme gerne noch ein Panel zwischen Frame und Components so dass, die Components auf dem Panel liegen, wenn ich dann die Gui erweitern möchte, ich entweder ein weiters Panel nehmen kann oder noch ein Panel mit einem anderen Layout zwischenschieben kann.
 

HalitGö

Mitglied
Hallo,

ich arbeite gerade wieder am Quiz.
Es gibt 3 Schwierigkeitsstufen der Fragen (Leicht, mittel und schwer) die zufällig gestellt werden sollen. Ist es sinnvoll nur eine Liste mit mit Fragen zu erstellen, 1 liste nur mit Antworten. Oder wie mache ist das am besten?
Ist es sinnvoll eine Liste zu machen mit allen Fragen
und eine nur mit Antworten nur zu den Fragen? Wie verknüpfe ich das alles am Besten?

Danke jetzt schon mal :)
Grüße
 

System.exit(0)

Aktives Mitglied
Wäre es nicht einfacher, eine Liste zu erstellen, die alles beinhaltet?
Schwieirigkeitsstufe, Frage, richtige Antwort, drei falsche Antworten?
Diese liest du dann aus und kannst dann die vier Antworten "mischen", weißt aber, dass die erste Antwort die richtige war.

Eine Datei ist leichter zu pflegen als drei oder vier.
 

Tonimono

Neues Mitglied
Ich habe letztes Jahr auch ein Quiz geschrieben.
Dabei habe ich pro Frage eine ArrayList gemacht, die jeweils die Frage, 4 Antwortmöglichkeiten und die Zahl(1,2,3 oder 4) der richtigen Antwort und den Schwirigkeitsgrad (1,2 oder 3)beinhaltet.
Diese ArrayLists habe ich dann wieder in 3 Arrays für die 3 Schwirigkeitsstufen gepackt.

Bestimmt nicht die eleganteste Lösung. Aber immerhin hat es funktioniert :)
 

HalitGö

Mitglied
Servus miteinander,
momentan bin ich dank eurer Hilfe schon gut weiter gekommen, stehe aber noch vor einigen Fragen:
z.b:
Die eingelesene Frage soll ganz oben in der textArea stehen
und die 4 Antwortmöglichkeiten sollen untereinander stehen
also so
FRAGE
1. ANTWORT
2. ANTWORT
usw....
momentan sieht es so aus: asdf.png


Die Fragen stehen in einer Textdatei, das sieht so aus:
sadfasdfasdf.png sadfasdfasdf.png

Das wäre mein erstes Problem, danach stellt sich mir die Frage, wie ich es hinbekomme zu sagen, welche Antworten richtig und welche Falsch sind.

Fettes Dankeschön jetzt schon mal!!!!!!!!!!!!!!!
 

Joose

Top Contributor
Naja du musst doch nur statt dem "," zwischen den Antworten einen Zeileumbruch "\n" einfügen. (Stichwort "String.replace()")
Ich nehme an ein "x" vor einer Antwort soll die richtige markieren?

Wie schon weiter oben beschrieben würde ich die Fragen + Antworten einlesen und in Objekte umwandeln. Durch diesen OOP Ansatz machst du dir einiges einfacher.
 

HalitGö

Mitglied
Ok danke schonmal,
ich habe jetzt 3 FragenKlassen
JEDE Klasse beinhaltet 30 Fragen (die in einer .txt Datei stehen) und zu jeder Frage 4 Antwortmöglichkeiten, die auch in der selben .txt Datei stehen.)

Jetzt meine Frage: Wie teile ich es mit dem Programm zu sagen, welche Antwort richtig und welche falsch ist?!
Ich weiß das habe ich schon mal gefragt, aber ich konnte mir nichts aus den Antworten ziehen... Tut mir leid ._.

Ich hoffe ich kann mit den nächsten Antworten etwas anfangen :)

lg
 

Joose

Top Contributor
ich habe jetzt 3 FragenKlassen
JEDE Klasse beinhaltet 30 Fragen (die in einer .txt Datei stehen) und zu jeder Frage 4 Antwortmöglichkeiten, die auch in der selben .txt Datei stehen.)

Warum 3 FragenKlassen? Eine Klasse ist die Blaupause für ein Objekt mit Eigenschaften. Sprich es ist sinnvoller das ganze als Klasse "QuestionPool" und "Question" abzubilden.
Die Klasse Question beinhaltet die Frage, sowie die 4 Antworten und auch die Information welches die richtige Antwort ist.
Die Klasse QuestionPool verwaltet eine Liste von Question Objekten.

Jetzt meine Frage: Wie teile ich es mit dem Programm zu sagen, welche Antwort richtig und welche falsch ist?!

Du hast die richtigen Fragen mit "x" markiert. Beim Einlesen der Textdatei musst du eben schauen ob eine Antwort mit "x" startet. (String.startWith())

Hier das schon gepostete Beispiel einer Question Klasse (von @truesoul)
Java:
public class Question {
   private List<Answer> answer = new ArrayList<>();
   private String text;

   public List<Answer> getAnswer() {
     return answer;
   }

   public void addAnswer(Answer answer) {
     this.answer.add(answer);
   }

   public void setText(String text) {
     this.text = text;
   }

   public String getText() {
     return text;
   }
}

public class Answer {
   private String text;
   private boolean isCorrect = false;

   public void setCorrect(boolean isCorrect) {
     this.isCorrect = isCorrect;
   }

   public void setText(String text) {
     this.text = text;
   }

   public boolean isCorrect() {
     return isCorrect;
   }

   public String getText() {
     return text;
   }
}

Erweitert um einen QuestionPool
Java:
public class QuestionPool {
   private List<Question> pool;
  
   public QuestionPool() {
     this.pool = new ArrayList<Question>();
   }
  
   public void addQuestion(Question newQuestion) {
     this.pool.add(newQuestion);
   }
}

Bei diesem Code müssest du nur noch eine Klasse schreiben welche dir die gewünschte Datei einliest und in entsprechende Question Objekte umwandelt. Und diese Objekte dann in den Pool "steckt".
 

Jardcore

Top Contributor
Wie würdest du es denn machen, wenn du es nicht mit java machen würdest sonder nur Papier und einen Stift hättest?
Wenn du das weißt, dann übertrage es durch die Objektorientierung in die virtuelle Welt.
 

HalitGö

Mitglied
Servus,

bin mal wieder am Coden und habe folgendes Problem.
Ich glaube ich hab das schon mal oben geschrieben, aber ich checke das nicht ganz wie ich es jetzt mit den richtigen Antworten machen solll!

Es gibt immernoch eine Textdatei mit Fragen und Antworten, die richtigen Antworten fangen mit einem "x" in der Textdatei an.
So, verknüpfe ich am besten das ganze. Sorry, ich weiß, ich habe das jetzt schon paar mal gefragt, aber ich kapier es einfach nicht.

Danke im Voraus
 

Ähnliche Java Themen

Neue Themen


Oben