Objekte speichern und wieder auslesen.

Status
Nicht offen für weitere Antworten.

--ben--

Mitglied
Hallo zusammen,

Bin gerade dabei eine art Quizspiel zu programmieren.
Der Grundgedanke ist ungefähr folgender:

Es gibt eine Klasse Frage, die aus Objekten der Klassen Fragesatz & Antwort konstruiert wird.

//Beipiel für ein FrageObjekt (besteht aus einem Fragesatz & 4 Antworten)

Wie heisst die Hauptstadt von Peru? //Objekt vom Typ Fragesatz (ein String)
<1> Lima //Objekt vom Typ Antwort ( Zahl, Platzhalter und ein boolean wahr/falsch)
<2> Mexico City
<3> La Paz
<4> Buenos Aires


Das klappt auch alles ganz gut,ich hänge jedoch an einer Stelle.
Ich habe eine Eingaberoutine erstellt um neue Fragen einzulesen.
Nun möchte ich meine FrageObjekte mit einem ObjectWriter in einer Textdatei speichern.
Dabei sollen mehrere Fragen in einer großen Datei stehen und später in Zufallsreihenfolge ausgelesen werden können.

Ist das prinzipiell machbar?
Geht es mit dem Objectwriter?
Wie würde ein solches Programm etwa aussehen??

Besten Dank im Vorraus für eure Antworten. Ich bitte um eine möglichst einfache ( Kindgerechte :lol: ) Erklärungen, da
ich erst seit wenigen Tagen Java nutze.

Mfg

Ben
 
Also erstmal - welche Datenstruktur verwendet du ?

Recht einfach wäre ja z.B. eine HashMap oder sonst was in die Richtung. Kannst ja auch mal bisherigen Code posten.

Solche oder so ähnliche "Projekte" gabs hier im Forum auch schon, also einfach mal suchen.
 
Hallo mic_checker, sorry, kann dir nicht sagen, welche datenstruktur ich nutze,ich weiß es selbst nicht, im Zweifelsfall keine :?
Hab mir auch schon mehrere von diesen Projekten angeschaut, konnte es aber nicht auf meines übertragen.
Wahrscheinlich läuft es euch eiskalt den Rücken runter, wenn ihr diesen Pfusch lest, aber okay:
Code:
public class frage

{
//Members
fragesatz f;
antwort a;
antwort b;
antwort c;
antwort d;

//Konstruktor

frage(fragesatz f,antwort a, antwort b, antwort c, antwort d)
{
this.f = f;
this.a = a;
this.b= b;
this.c= c;
this.d= d;
}
//Methoden

public void ausgeben()
{
System.out.println(this.f.fragesatz );
System.out.println("");
System.out.println(this.a.pl1+this.a.zahl+this.a.ende+this.a.antwort);
System.out.println(this.b.pl1+this.b.zahl+this.b.ende+this.b.antwort);
System.out.println(this.c.pl1+this.c.zahl+this.c.ende+this.c.antwort);
System.out.println(this.d.pl1+this.d.zahl+this.d.ende+this.d.antwort);
}

-----------------------------------------------------------------------------------------------------------------------
Code:
public class antwort
{

//-----------Members--------------------
String antwort;
int zahl;
public static String pl1= "<";
public static String ende = ">     " ;
boolean truefalse;

//-----------Konstuktoren-----------------
public antwort(String a, int z, boolean tf)
      {
       this.antwort=a;
       this.pl1 = pl1;
       this.zahl=z;
       this.ende=ende;
       this.truefalse=tf;
       }
       
public antwort(String a, int z)
      {
       this.antwort=a;
       this.pl1 = pl1;
       this.zahl=z;
       this.ende=ende;

       }
//--------------Methoden----------------



}
---------------------------------------------------------------------------------------------------------------------------------
Code:
public class fragesatz
{
//Member

String fragesatz;

//Konstruktor

fragesatz(String f1)
 {
 this.fragesatz=f1;
 }
//Methoden

public void ausgeben()
{
System.out.println(this.fragesatz);
}
}
-----------------------------------------------------------------------------------------------------------------------------------
Code:
import java.io.*;

public class fragenerzeuger_teststadium{

  public static void main(final String[] args)
                                  throws IOException

 {
 //Members
 
 boolean[] booleans = new boolean[5];





  //Satz
  System.out.println("************************************************************************");
  System.out.println("Por favor escribe su PREGUNTA");
  BufferedReader t1 = new BufferedReader(
                      new InputStreamReader(System.in));

  String satz = t1.readLine();


  //antwort1------------------------------------------------------------------------------------
  System.out.println("************************************************************************");
  System.out.println("Por favor escribe la PRIMERA RESPUESTA");
  BufferedReader t2 = new BufferedReader(
                      new InputStreamReader(System.in));

  String aw1 = t2.readLine();
  //wahr oder falsch-------------------
  System.out.println("verdad....pulsa...  <1>  ");
  System.out.println("falso.....pulsa...  <2>  ");

  BufferedReader w1 = new BufferedReader(
                      new InputStreamReader(System.in));

  String tf1 = w1.readLine();
  

  int trueFalse = Integer.parseInt(tf1);
  //schreibt de Eingabe (1 oder 2) in boolean um. 1 heißt richtig, 2 heißt falsch
  if (trueFalse == 1)

  {
  booleans[1] = true;
  }
  else
  {
  booleans[1] = false;
  }
 //antwort2-------------------------------------------------------------------------------------
  System.out.println("************************************************************************");
  System.out.println("Por favor escribe la SEGUNDA RESPUESTA");
  BufferedReader t3 = new BufferedReader(
                      new InputStreamReader(System.in));

  String aw2 = t3.readLine();
  System.out.println("verdad....pulsa...  <1>  ");
  System.out.println("falso.....pulsa...  <2>  ");

  BufferedReader w2 = new BufferedReader(
                      new InputStreamReader(System.in));

  String tf2 = w2.readLine();

  int trueFalse2 = Integer.parseInt(tf2);
  //schreibt de Eingabe (1 oder 2) in boolean um. 1 heißt richtig, 2 heißt falsch
  if (trueFalse2 == 1)

  {
  booleans[2] = true;
  }
  else
  {
  booleans[2] = false;
  }

 //antwort3-------------------------------------------------------------------------
  System.out.println("************************************************************************");
  System.out.println("Por favor escribe la TERCERA RESPUESTA");
  BufferedReader t4 = new BufferedReader(
                      new InputStreamReader(System.in));

  String aw3 = t4.readLine();
  System.out.println("verdad....pulsa...  <1>  ");
  System.out.println("falso.....pulsa...  <2>  ");

  BufferedReader w3 = new BufferedReader(
                      new InputStreamReader(System.in));

  String tf3 = w3.readLine();

  int trueFalse3 = Integer.parseInt(tf3);
  //schreibt de Eingabe (1 oder 2) in boolean um. 1 heißt richtig, 2 heißt falsch
  if (trueFalse3 == 1)

  {
  booleans[3] = true;
  }
  else
  {
  booleans[3] = false;
  }

 //antwort4--------------------------------------------------------------------------------------
  System.out.println("************************************************************************");
  System.out.println("Por favor escribe la CUARTA RESPUESTA");
  BufferedReader t5 = new BufferedReader(
                      new InputStreamReader(System.in));

  String aw4 = t5.readLine();
  System.out.println("verdad....pulsa...  <1>  ");
  System.out.println("falso.....pulsa...  <2>  ");

  BufferedReader w4 = new BufferedReader(
                      new InputStreamReader(System.in));

  String tf4 = w4.readLine();

  int trueFalse4 = Integer.parseInt(tf4);
  //schreibt de Eingabe (1 oder 2) in boolean um. 1 heißt richtig, 2 heißt falsch
  if (trueFalse4 == 1)

  {
  booleans[4] = true;
  }
  else
  {
  booleans[4] = false;
  }
  
//----------------------------------------------
  // Hier werden die Eingaben zu einer antwort (nach  antwort.java , konstruktor) 1 gewandelt.
  fragesatz f1= new fragesatz(satz);
  antwort a1= new antwort (aw1, 1 , booleans[1]);
  antwort a2= new antwort (aw2, 2 , booleans[2]);
  antwort a3= new antwort (aw3, 3 , booleans[3]);
  antwort a4= new antwort (aw4, 4 , booleans[4]);

  //Hier wird aus den Antworten eine Frage
  frage frage1= new frage (f1,a1,a2,a3,a4);
  
  System.out.println("");
  System.out.println("");
  System.out.println("");
  System.out.println("");
  frage1.ausgeben();


//********************************************************************************************************************


//gescheiterter Versuch mit Filewriter

    String s = (frage1.f.fragesatz);
    String sf1 = (a1.pl1+ a1.zahl + a1.ende +a1.antwort);
    String sf2 = (a2.pl1+ a2.zahl + a2.ende +a2.antwort);
    String sf3 = (a3.pl1+ a3.zahl + a3.ende +a3.antwort);
    String sf4 = (a4.pl1+ a4.zahl + a4.ende +a4.antwort);
    File a = new File("test.txt");
    BufferedWriter out;

    try{
    out = new BufferedWriter(new FileWriter("e:\\test.txt"));
    out.write(s);
    out.newLine();
    out.write(sf1);
    out.newLine();
    out.write(sf2);
    out.newLine();
    out.write(sf3);
    out.newLine();
    out.write(sf4);
    out.newLine();
    System.out.println("Eintrag erfolgreich!");
    out.close();
    }
    catch(IOException e){
    System.out.println("fehler");
    }











 }

}
 

Hab die JavaInsel sogar als Buch.
Im Beispielprogramm SerializeAndDeserializeDate geht das auch wunderbar, aber nur mit Date-Objekten.
Hab das ganze schon Versucht umzuschreiben, so, dass es mit "Fragesatz" Objekten funktioniert, hat aber einen Fehler, oder mehrere:



Code:
import java.io.*;
import java.util.*;

public class SerializeAndDeserializeDate
{


  static void serialize( String filename )
  {
    try
    {
      FileOutputStream file = new FileOutputStream( filename );
      ObjectOutputStream o = new ObjectOutputStream(file );
      o.writeObject("Today" );
      o.writeObject(new fragesatz ("Hallo") );   //hier
      o.writeObject(new Date()) ;
      o.close();
    } catch ( IOException e ) { }
  }

  static void deserialize( String filename )
  {
    try
    {
      FileInputStream file = new FileInputStream( filename );
      ObjectInputStream o = new ObjectInputStream( file );
      String string = (String) o.readObject();
      fragesatz f = (fragesatz) o.readObject();   //hier
      Date date = (Date) o.readObject();
      o.close();

      System.out.println( string );
      f.ausgeben();                     //hier
      System.out.println( date );

    }
    catch ( IOException e ) { }
    catch ( ClassNotFoundException e ) { }
  }



  public static void main( String args[] )
  {
    String filename = "e:/test.txt";

    serialize( filename );
    deserialize( filename );

  }
}
[/quote]
 
mit date gehts weil date Serializable implementiert.

wie ich oben schon geschrieben habe, müssen alle klassen, die du speichern möchtest, dieses interface implementieren.
 
Und da es nur ein so genanntes Markerinterface ist, also ein Interface ohne implementierte Methoden, genügt es, einfach das Interface zu implementieren. Es brauchen also keine Methoden überschrieben werden.
 
OT

Code:
//********************************************************************************************************************

spar dir das, du hast wohl zuviel zeit 🙂
 
byto hat gesagt.:
wie ich oben schon geschrieben habe, müssen alle klassen, die du speichern möchtest, dieses interface implementieren.

Sorry, hab dich nur nicht gleich verstanden.

Aber das beste ist....jetzt geht mein Programm!!


Vielen Dank an alle für eure Hilfe! :applaus:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben