Serialisierung und Deserialisierung von Objekten - Frageprogramm

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.

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);

    }

}
 

mihe7

Top Contributor
Vorab ein Hinweis: in Java schreibt man per Konvention die Bezeichner von Variablen, Parametern und Methoden in lowerCamelCase, Namen von Klassen und anderen Typen in UpperCamelCase.

Grundsätzlich ist Dein Denkansatz nicht so verkehrt. Du solltest lediglich die verschiedenen Zuständigkeiten aus Deiner Fragen-Klasse heraustrennen. Aktuell ist die Klasse für alles zuständig.
 

Bela B.

Aktives Mitglied
Das writeToFile und readFile raus aus der Klasse Frage, da das nicht zu der Aufgabe der Klasse gehört (wie mihe7 schon gesagt hat).

In der Main würde ich dann überprüfen, ob denn eine Datei mit dem Namen Fragen.bin existiert, falls ja dann eben die Methode readFile aufrufen (die dann als Rückgabewert eben eine Map<Integer, Frage> hat) und diese dann in deiner Main speichern.
Anschließend kannst du dann deine Map durchgehen und entsprechend bei jeder Frage die stellen()-Methode aufrufen.

Denke das ist das, was du meinst.
 
D

dexter1337

Gast
Vorab ein Hinweis: in Java schreibt man per Konvention die Bezeichner von Variablen, Parametern und Methoden in lowerCamelCase, Namen von Klassen und anderen Typen in UpperCamelCase.

Grundsätzlich ist Dein Denkansatz nicht so verkehrt. Du solltest lediglich die verschiedenen Zuständigkeiten aus Deiner Fragen-Klasse heraustrennen. Aktuell ist die Klasse für alles zuständig.
Danke
 
D

dexter1337

Gast
Das writeToFile und readFile raus aus der Klasse Frage, da das nicht zu der Aufgabe der Klasse gehört (wie mihe7 schon gesagt hat).

In der Main würde ich dann überprüfen, ob denn eine Datei mit dem Namen Fragen.bin existiert, falls ja dann eben die Methode readFile aufrufen (die dann als Rückgabewert eben eine Map<Integer, Frage> hat) und diese dann in deiner Main speichern.
Anschließend kannst du dann deine Map durchgehen und entsprechend bei jeder Frage die stellen()-Methode aufrufen.

Denke das ist das, was du meinst.
Danke
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Serialisierung - Deserialisierung Allgemeine Java-Themen 4
Z Serialisierung und Deserialisierung einer HashMap Allgemeine Java-Themen 17
antonia09 Einkaufszettel Persistenz und Serialisierung Allgemeine Java-Themen 6
R Datentypen Korrekte integer in Hex ASCII Konvertierung und serialisierung Allgemeine Java-Themen 1
M Serialisierung funktioniert nicht Allgemeine Java-Themen 9
Z Best Practice Serialisierung Allgemeine Java-Themen 2
Arif Input/Output Serialisierung - Datei wird nicht erzeugt Allgemeine Java-Themen 3
M Alternative zur Serialisierung.. Protobuf? Allgemeine Java-Themen 9
Thallius Serialisierung schlägt fehl. Allgemeine Java-Themen 3
M Serialisierung & Verschlüsselung Allgemeine Java-Themen 2
E Serialisierung - Sinn einer generierten serialVersionUID? Allgemeine Java-Themen 4
V Serialisierung von Instanz eigener Klasse Allgemeine Java-Themen 5
A Input/Output Serialisierung und Object.hashCode() Allgemeine Java-Themen 3
K Serialisierung einer verschachtelten Datenstuktur Allgemeine Java-Themen 9
Tobse Input/Output Dateiformat: Serialisierung VS Custom format Allgemeine Java-Themen 6
A Problem bei Serialisierung von Bibliotheks-Klassen Allgemeine Java-Themen 6
A Input/Output Serialisierung Sonderzeichen Allgemeine Java-Themen 3
P Serialisierung der Oberklasse Allgemeine Java-Themen 2
Kr0e Circular reference - Serialisierung Allgemeine Java-Themen 6
K Serialisierung in Properties-Datei möglich? Allgemeine Java-Themen 3
B Serialisierung mit Unterobjekten über Netzwerk Allgemeine Java-Themen 3
C Serialisierung - Standardwert für nachträglich hinzugefügtes Feld Allgemeine Java-Themen 2
S Serialisierung der Kindklasse Allgemeine Java-Themen 5
K Serialisierung komplett selbst machen Allgemeine Java-Themen 13
C Serialisierung ohne Serializable Allgemeine Java-Themen 4
S Serialisierung und Referenzen Allgemeine Java-Themen 6
S Viele Bilder -> Speicher ausgelastet? / (De-)serialisierung geht nicht mehr richtig Allgemeine Java-Themen 8
E Objekt bei Serialisierung ändern Allgemeine Java-Themen 2
Q Serialisierung / Speicherung Geschwindingkeit & Aktuelle Position Allgemeine Java-Themen 7
W Serialisierung Allgemeine Java-Themen 6
K Serialisierung von Hashmap in Vector Allgemeine Java-Themen 3
F Serialisierung und Obfuscation? Allgemeine Java-Themen 7
G (De)serialisierung und Referenzen Allgemeine Java-Themen 5
T Serialisierung: Wie macht RMI das so schnell? Allgemeine Java-Themen 14
J Serialisierung: readInt + writeInt Allgemeine Java-Themen 4
X Einige Fragen zu Serialisierung Allgemeine Java-Themen 2
J bean + serialisierung + serialVersionUID Allgemeine Java-Themen 3
K Serialisierung Allgemeine Java-Themen 6
thE_29 Wie funktioniert Serialisierung? Allgemeine Java-Themen 10
S Problem mit Serialisierung Allgemeine Java-Themen 2
C Serialisierung von JComboBox Allgemeine Java-Themen 4
W Deserialisierung und Ausführung Allgemeine Java-Themen 2
woezelmann Object nach Deserialisierung nicht mehr gleich Allgemeine Java-Themen 13
S Deserialisierung EOF Allgemeine Java-Themen 5
G Deserialisierung funktioniert n. Refaktorisierung nicht mehr Allgemeine Java-Themen 10
B OOP Kommunikation zwischen Objekten? Allgemeine Java-Themen 5
Zrebna Wieso sollte man Null-Prüfungen nicht mit Optional-Objekten nutzen? Allgemeine Java-Themen 13
B Sent and Receive Funktionen zwischen Objekten ermöglichen? Allgemeine Java-Themen 8
A Objekt aus anderen Objekten machen Allgemeine Java-Themen 8
PCOmega137 Objekten zufällig erzeugte Namen geben Allgemeine Java-Themen 2
T Speichern von Objekten Allgemeine Java-Themen 2
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
M loeschen von objekten Allgemeine Java-Themen 22
S Parametrisierte jUnit 5-Tests mit eigenen Datentypen/Klassen-Objekten als Test-Parameter Allgemeine Java-Themen 0
F Best Practice Große Anzahl an Objekten speichern und lesen Allgemeine Java-Themen 19
M Array aus Thread Objekten erstellen Allgemeine Java-Themen 2
K Vergleich von Strings von Objekten Allgemeine Java-Themen 4
B Endlosschleife beim Verteilen von Objekten Allgemeine Java-Themen 4
L Von ArrayList abgeleitete Klasse nur mit bestimmten Objekten füllen Allgemeine Java-Themen 1
D Verwaltung von sehr vielen Objekten Allgemeine Java-Themen 12
G problem: array aus objekten Allgemeine Java-Themen 10
H Liste von Objekten generisch sortieren Allgemeine Java-Themen 0
S Zur Laufzeit Klasse mit einer anzahl von X Objekten erstellen Allgemeine Java-Themen 5
B OOP Auf Zustandsänderungen von Objekten reagieren Allgemeine Java-Themen 2
H Best Practice zu vielen konstanten Objekten? Allgemeine Java-Themen 10
M 3D-Grafik Probleme beim drehen von Objekten Allgemeine Java-Themen 9
A Sinnvolles Software Design bei Eigenschaftsänderungen von Objekten Allgemeine Java-Themen 7
J Java-Implementierung diverser Beziehungen zwischen Klassen bzw. Objekten Allgemeine Java-Themen 2
S Threads Liste mit Objekten in Teillisten zerlegen und abarbeiten Allgemeine Java-Themen 3
P J-Unit vergleich von 2 Objekten merkwürdig Allgemeine Java-Themen 7
Landei Guice - Injection von "zwischendurch" erzeugten Objekten Allgemeine Java-Themen 4
S Sortieren nach Objekten Allgemeine Java-Themen 13
T Liste mit GregorianCalendar-Objekten in List einlesen, mit Collection sortieren und ausgeben Allgemeine Java-Themen 3
D Von mehreren Objekten eine Eigenschaft abfragen Allgemeine Java-Themen 11
G Array mit neuen Objekten der selben Klasse füllen Allgemeine Java-Themen 2
S Eine Collection von Objekten mit LDAP Syntax filtern Allgemeine Java-Themen 5
M Schnittmenge von Objekten Allgemeine Java-Themen 3
N Performates lesen von Objekten aus Dateien Allgemeine Java-Themen 2
hdi Speichergröße von Objekten & Referenzen Allgemeine Java-Themen 8
hdi JTable: Sortierung von Date-Objekten Allgemeine Java-Themen 4
C ArrayList (mit Objekten) sortieren Allgemeine Java-Themen 12
C TreeSet mit Objekten befüllen Allgemeine Java-Themen 12
L Lesen von Objekten aus Datei Allgemeine Java-Themen 17
S Liste mit verschiedenden Objekten Allgemeine Java-Themen 15
I Vector mit Objekten sortieren,Videos mit JMF wiedergeben Allgemeine Java-Themen 6
J ArrayList aus Point-Objekten nach dem x-Wert ordnen Allgemeine Java-Themen 2
T abspeichern und laden von objekten in JFrame Allgemeine Java-Themen 2
G Serialisieren von Objekten : IO Exception beim Schreiben Allgemeine Java-Themen 3
G Kompletten Frame mit allen Objekten resizen Allgemeine Java-Themen 10
G Tagesdifferenz zw. 2 Gregorian Objekten Allgemeine Java-Themen 14
M Endgültiges Löschen von Objekten Allgemeine Java-Themen 7
M Problem mit Objekten Allgemeine Java-Themen 11
B Serialisieren von mehreren Objekten Allgemeine Java-Themen 7
W Threads & Pipes --> Ist eine Übergabe von Objekten mö Allgemeine Java-Themen 7
T casten von Objekten aus einer ArrayList Allgemeine Java-Themen 4
O kommunikation zw. objekten Allgemeine Java-Themen 7
G List mit selbstdefinierten Objekten sortieren Allgemeine Java-Themen 2
T Unabhängigkeit von Variablen/ Objekten. Allgemeine Java-Themen 6
M String aus array mit Objekten suchen Allgemeine Java-Themen 26
F Array von Objekten Allgemeine Java-Themen 2

Ähnliche Java Themen


Oben