D
dexter1337
Gast
Hallo,
ich versuche derzeit ein Programm zu erstellen, das einem ermöglicht, eigene Multiple-Choice-Fragen einzufügen und sich diese dann vom Programm abfragen zu lassen. (Also praktisch ein einfacher Vokabeltrainer)
Nun habe ich eine Klasse Frage mit den Parametern: frage, Antwortmoeglichkeit, Loesung, Relevanz, LetzterAufruf.
Die Paramter Relevanz und LetzterAufruf verändern sich, wenn ich mir eine Frage stellen lasse. Die Relevanz ist ein double wert, der halbiert wird, wenn ich die Frage richtig beantworte und verdoppelt, wenn ich die Frage falsch beantworte. Der Long Wert LetzterAufruf wird mit dem aktuellen Datum in Millisekunden besetzt. Mein Problem ist nun, dass ich die Werte einer Frage ja nicht persistent ändern kann. Deswegen hatte ich die Idee, die Fragen in eine Map zu packen und diese anschließend zu serialiseren, so dass ich auch nach einem erneuten Programmstart auf die aktuellsten Werte zugreifen kann und nicht die default werte erhalte, die ich beim Erstellen der frage in der Main-Methode festgelegt hatte.
Ich habe versucht, genau dies mit den Methoden writeToFile() und readFile() zu ermöglichen und soweit ich das sehe, schreibt er die Fragen auch in die Datei rein. Der Knackpunkt ist jetzt, dass das Programm die Datei beim Starten lesen soll, so dass wie erwähnt mit den neusten werten weitergearbeitet wird.
Vielleicht gibt es auch eine deutlich simplere Lösung, aber irgendwie muss ich die Werte der Fragen persistent updaten. Vielleicht hat hier ja noch jemand eine andere Idee. Mein Code zeigt die Main Methode, in der ich eine Frage erstelle und die Frage Klasse mit dem Konstruktor, der stellen() Methode, die mir die Fragen auf Wunsch stellt, die writeToFile, die readFile und schließlich die toString Methode.
ich versuche derzeit ein Programm zu erstellen, das einem ermöglicht, eigene Multiple-Choice-Fragen einzufügen und sich diese dann vom Programm abfragen zu lassen. (Also praktisch ein einfacher Vokabeltrainer)
Nun habe ich eine Klasse Frage mit den Parametern: frage, Antwortmoeglichkeit, Loesung, Relevanz, LetzterAufruf.
Die Paramter Relevanz und LetzterAufruf verändern sich, wenn ich mir eine Frage stellen lasse. Die Relevanz ist ein double wert, der halbiert wird, wenn ich die Frage richtig beantworte und verdoppelt, wenn ich die Frage falsch beantworte. Der Long Wert LetzterAufruf wird mit dem aktuellen Datum in Millisekunden besetzt. Mein Problem ist nun, dass ich die Werte einer Frage ja nicht persistent ändern kann. Deswegen hatte ich die Idee, die Fragen in eine Map zu packen und diese anschließend zu serialiseren, so dass ich auch nach einem erneuten Programmstart auf die aktuellsten Werte zugreifen kann und nicht die default werte erhalte, die ich beim Erstellen der frage in der Main-Methode festgelegt hatte.
Ich habe versucht, genau dies mit den Methoden writeToFile() und readFile() zu ermöglichen und soweit ich das sehe, schreibt er die Fragen auch in die Datei rein. Der Knackpunkt ist jetzt, dass das Programm die Datei beim Starten lesen soll, so dass wie erwähnt mit den neusten werten weitergearbeitet wird.
Vielleicht gibt es auch eine deutlich simplere Lösung, aber irgendwie muss ich die Werte der Fragen persistent updaten. Vielleicht hat hier ja noch jemand eine andere Idee. Mein Code zeigt die Main Methode, in der ich eine Frage erstelle und die Frage Klasse mit dem Konstruktor, der stellen() Methode, die mir die Fragen auf Wunsch stellt, die writeToFile, die readFile und schließlich die toString Methode.
Java:
public static void main(String[] args) {
Frage frage1 = new Frage("Was ist die Lösung?",
new String[] { "a", "b", "c", "d" }, 3, 1.0, 0);
frage1.stellen();
}
public class Frage implements Serializable {
private static final long serialVersionUID = 2618030797013447881L;
public String frage;
public String[] Antwortmoeglichkeit;
public int Loesung;
public double Relevanz;
public long LetzterAufruf;
public static int primarykey;
static Map<Integer, Frage> Database = new TreeMap<Integer, Frage>();
public Frage(String fra, String[] ant, int loe, double rel, long let) {
this.frage = fra;
this.Antwortmoeglichkeit = ant;
this.Loesung = loe;
this.Relevanz = rel;
this.LetzterAufruf = let;
Database.put(++primarykey, this);
try {
writeToFile(Database);
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
public void stellen() {
int i = 0;
System.out.println(Database.get(i));
System.out.println("0: " + Database.get(i).Antwortmoeglichkeit[0] + "\n" + "1: "
+ Database.get(i).Antwortmoeglichkeit[1] + "\n" + "2: " + Database.get(i).Antwortmoeglichkeit[2] + "\n"
+ "3: " + Database.get(i).Antwortmoeglichkeit[3] + "\n");
Scanner in = new Scanner(System.in);
int answer = in.nextInt();
Frage frage = Database.get(i);
int loe = frage.Loesung;
frage.LetzterAufruf = System.currentTimeMillis();
if (answer == loe) {
frage.Relevanz = frage.Relevanz / 2;
System.out.println("<Your answer is correct!>" + "\n");
} else if (answer != loe) {
frage.Relevanz = frage.Relevanz * 2;
System.out.println("<Your answer is false!>" + "\n");
}
}
public static void writeToFile(Map<Integer, Frage> f) throws FileNotFoundException, IOException {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("Fragen.bin"));
oos.writeObject(f);
oos.close();
System.out.println("Done writing");
}
public static void readFile() throws FileNotFoundException, IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Fragen.bin"));
Map<Integer, Frage> updated = (Map<Integer, Frage>) ois.readObject();
ois.close();
System.out.println("Done reading");
}
public String toString() {
if (this.LetzterAufruf == 0) {
return "Frage: " + this.frage + "\n" + "Antwortmöglichkeiten: " + "\n" + "0: " + this.Antwortmoeglichkeit[0]
+ "\n" + "1: " + this.Antwortmoeglichkeit[1] + "\n" + "2: " + this.Antwortmoeglichkeit[2] + "\n"
+ "3: " + this.Antwortmoeglichkeit[3] + "\n" + "Lösung: " + this.Loesung + "\n" + "Relevanz: "
+ this.Relevanz + "\n" + "Letzter Aufruf: " + "nie";
}
return "Frage: " + this.frage + "\n" + "Antwortmöglichkeiten: " + "\n" + "0: " + this.Antwortmoeglichkeit[0]
+ "\n" + "1: " + this.Antwortmoeglichkeit[1] + "\n" + "2: " + this.Antwortmoeglichkeit[2] + "\n" + "3: "
+ this.Antwortmoeglichkeit[3] + "\n" + "Lösung: " + this.Loesung + "\n" + "Relevanz: " + this.Relevanz
+ "\n" + "Letzter Aufruf: " + new Date(this.LetzterAufruf);
}
}