Zeichenorientierte & Serialisierte Datenverarbeitung Listen

ph

Mitglied
Hi,
ich sitze vor einer Aufgabe nur fehlt mir n bisschen der richtige Ansatz, vllt habt ihr ja eine idee.
Wie muss ich das Programm richtig aufbauen sodass alles der Aufgabenstellung entspricht?
Ich habe auch das problem das mein double in der liste List<double>mwlist; angemeckert wird, nur warum?
Zur Aufgabe: Ich habe eine Klasse Sensor, diese ist zum Verwalten der Messdaten eines Sensors.
In der Aufgabe heißt es:programmieren Sie eine Klasse zur Verwaltung eines Sensors mit seinen Messwerten
class Sensor implements Serializable
int senid;
String senbez;
String eh;
List<double>mwlist;
Sensor(int eid, String ebez,String eeh){...},
void mwUPD(double xmw[])

Die Klasse hat einen Konstruktor mit Übergabewerten für senid,senbez und eh. Er initialisiert das Attribut mwlist mit der null-Referenz.Die Methode mwUPD() legt effektiv die Liste mwlist an und füllt die Knoten mit Werten aus xmw[].

Die Klasse sieht bis jetzt folgerndermaßen aus:

Java:
import java.io.*;
import java.text.*;
import java.util.*;
class Sensor implements Serializable{
  int senid;
  String senbez;
  String eh;
  List<double>mwlist=null;
  
  Sensor(){}
  Sensor(int senid,String senbez,String eh){
    this.senid=senid;
    this.senbez=senbez;
    this.eh=eh;
  }
  
//xmw[] wird aus der Klasse SenAnw1 übergeben
  void mwUPD(double xmw[]){
    mwlist=new ArrayList<double>();
    mwlist.add(xmw);
  }
}


Nun zu meine Klasse SenAnw1:
Ich habe eine Datei SENSOR.TXT deren Aufbau folgendermaßen ist, SENID;SENBEZ;EH
z.B 12345;Thermometer;C°
Die Datei MW.TXT sieht folgendermaßen aus 15;23;47;23;87 usw es sind die Messwerte.

Die Aufgabenstellung sieht folgendermaßen aus:
Programmieren Sie eine Klasse SenAnw1 mit einer main()-Methode und Methoden zum zeichenorientierten Einlesen der Dateien SENSOR.TXT (dat2sen()) und MW.TXT (senLiUPD()).
Die Methode dat2sen() erzeugt für korrekte Datensätze Knoten vom Typ Sensor, deren Attribut mwlist noch null ist und kettet diese Knoten in eine Sensorliste ein.
Der Prototyp zieht folgendermaßen aus:static List<Sensor>dat2sen(BufferedReader bsen1)

Die Methode senLiUPD() prüft für korrekte Datensätze aus MW.TXT, ob ein zugehöriger Sensor bereits in der Sensorliste enthalten ist. Falls ja, wird mit dem Feld xmw[] der Messwerte des Datensatzes die Methode mwUPD() der Klasse Sensor aufgerufen. Der Rückgabewert ist die Anzahl der korrekten Datensätze.
Prototyp: static int senLiUPD(List<Sensor>senLi,BufferedReader brmw1)

Mit einer Methode senLiSerAus() werden alle Knoten der Sensorliste serialisiert in eine Dastei SENSOR.SER geschriben.

Nun zum Quelltext:
Java:
import java.io.*;
import java.text.*;
import java.util.*;
class SenAnw1{
  public static void main(String args[]){
    FileReader fr1=new FileReader("SENSOR.TXT");
    BufferedReader bsen1=new BufferedReader(fr1);
    List<Sensor>dat2sen();
    
    FileReader fr2=new FileReader("MW.TXT");
    BufferedReader brmw1=new BufferedReader(fr2);
  }
  
  static List<Sensor>dat2sen(BufferedReader bsen1){
    String Sensordaten=bsen1.readLine();
    List<Sensor>dat2sen;
    dat2sen=new LinkedList<Sensor>();
    while(Sensordaten!=null){
      try{
        String Datensätze[]=Sensordaten.split(";");
        dat2sen.add(Sensordaten);
        Sensordaten=bsen1.readLine();
      }
      catch(RuntimeException e){
        System.out.println("Konvertierung fehlgeschlagen!");
      }
    }
    bsen1.close();
    return Sensor;
  }
  
  static int senLiUPD(List<Sensor>senLi,BufferedReader brmw1){
    return;
  }
}

Meine Fehlermeldungen:

Compiliere J:\Sensor.java mit Java-Compiler
Sensor.java:19:11: error: no suitable method found for add(double[])
mwlist.add(xmw);
^
method List.add(int,Double) is not applicable
(actual and formal argument lists differ in length)
method List.add(Double) is not applicable
(actual argument double[] cannot be converted to Double by method invocation conversion)
1 error

Compiliere J:\SenAnw1.java mit Java-Compiler
SenAnw1.java:8:24: error: ';' expected
List<Sensor>dat2sen();
^
1 error
 
Zuletzt bearbeitet:
S

SlaterB

Gast
ich habe den Text anfangs gelesen, dann immer mehr überflogen, am Ende einfach maschinell nach einem Fragezeichen gesucht,
aber nix dabei

besteht eine Frage oder worum geht es hier?

------

edit:
ein paar Schwächen sind natürlich direkt zu sehen
List<double>?
und dann ein double[] einfügen?

Serialisierung funktioniert mit ObjectStreams wie man überall in den Anleitungen kinderleicht nachlesen kann,
mit BufferedReader kommt man Strings, aber keine Objekte
 
Zuletzt bearbeitet von einem Moderator:

jgh

Top Contributor
ich sitze vor einer Aufgabe nur fehlt mir n bisschen der richtige Ansatz, vllt habt ihr ja eine idee.

mmh, das hätte ich als Frage interpretiert...aber da er einen Ansatz schon hat, habe ich auf ein evtl. Problem gewartet, das habe ich aber auch nicht gefunden....
 

ph

Mitglied
Mein Problem ist wie ich meine Klasse SenAnw1 richtig aufbaue? Sodass diese der Aufgabenstellung entspricht und auch funktioniert. Und ob ihr mir zeigen könnt wo meine Fehler sind?

Ich habe die Klasse SenAnw1 nochmal überarbeitet.

Java:
import java.io.*;
import java.text.*;
import java.util.*;
class SenAnw1{
  public static void main(String args[]){
    FileReader fr1=new FileReader("SENSOR.TXT");
    BufferedReader bsen1=new BufferedReader(fr1);
    
    FileReader fr2=new FileReader("MW.TXT");
    BufferedReader brmw1=new BufferedReader(fr2);
  }
  
  static List<Sensor>dat2sen(BufferedReader bsen1){
    String Sensordaten=bsen1.readLine();
    List<Sensor>dat2sen;
    dat2sen=new LinkedList<Sensor>();
    while(Sensordaten!=null){
      try{
        String Datensätze[]=Sensordaten.split(";");
        dat2sen.add(Sensordaten);
        Sensordaten=bsen1.readLine();
      }
      catch(RuntimeException e){
        System.out.println("Konvertierung fehlgeschlagen!");
      }
    }
    fr1.close();
    return Sensor;
  }
  
  static int senLiUPD(List<Sensor>senLi,BufferedReader brmw1){
    return;
  }
}

Danke
 
S

SlaterB

Gast
oh, in der Aufgabenstellung steht auch TXT, das widerspricht dem 'implements Serializable' und deinem Thementitel etwas..,
nun ja

hast du schon ein Dateiformat?
bevor du an die Java-Programmierung der Verarbeitung gehst, überlege nochmal welche Daten du hast,
wie du diese in Textform speichern willst, stelle dir ein Beispiel zusammen

grundsätzlich kompilierbaren Code drumherum wäre auch hilfreich,
wie und wo programmierst du denn bisher, hast du schon irgendwas laufen lassen,
es muss doch Fehlermeldungen hageln?

> fr1.close();
fr1 ist in der main() deklariert..,
reicht aber den übergebenen BufferedReader zu closen()

freilich wird dat2sen() auch nie aufgerufen
 

ph

Mitglied
Ich lese ja die Daten aus der Textdatei SENSOR.TXT und speichere diese in eine Liste Sensor falls der Datensatz ok ist also der From SENID(INT);SENBEZ;EH(DOUBLE) entspricht, dann splitte ich diese bei ";" und parse sie in int und double. Soweit ich das richtig verstanden habe.
 

ph

Mitglied
oh, in der Aufgabenstellung steht auch TXT, das widerspricht dem 'implements Serializable' und deinem Thementitel etwas..,
nun ja

hast du schon ein Dateiformat?
bevor du an die Java-Programmierung der Verarbeitung gehst, überlege nochmal welche Daten du hast,
wie du diese in Textform speichern willst, stelle dir ein Beispiel zusammen

grundsätzlich kompilierbaren Code drumherum wäre auch hilfreich,
wie und wo programmierst du denn bisher, hast du schon irgendwas laufen lassen,
es muss doch Fehlermeldungen hageln?

> fr1.close();
fr1 ist in der main() deklariert..,
reicht aber den übergebenen BufferedReader zu closen()

freilich wird dat2sen() auch nie aufgerufen

ja fehlermeldungen bekomme ich ne menge, das andere habe ich geändert.
 
S

SlaterB

Gast
> also der From SENID(INT);SENBEZ;EH(DOUBLE) entspricht
+
> und parse sie in int und double.

wo steht dazu Code? das sieht nach einer richtigen Richtung aus, ja,

im ersten Posting habe ich gerade bisschen zum Format in der Datei gelesen, ok,
aber nur eine Zeile einzulesen, evtl. zu splitten, das sorgt noch nicht dafür dass alle Variablen ihre Werte bekommen,
du musst schon anschauen was im gesplitteten Array dann drinsteht, jede Position parsen, im Konstruktor einzeln übergeben
 

ph

Mitglied
> also der From SENID(INT);SENBEZ;EH(DOUBLE) entspricht
+
> und parse sie in int und double.

wo steht dazu Code? das sieht nach einer richtigen Richtung aus, ja,

im ersten Posting habe ich gerade bisschen zum Format in der Datei gelesen, ok,
aber nur eine Zeile einzulesen, evtl. zu splitten, das sorgt noch nicht dafür dass alle Variablen ihre Werte bekommen,
du musst schon anschauen was im gesplitteten Array dann drinsteht, jede Position parsen, im Konstruktor einzeln übergeben

Das war bissher meine Idee wie ich da weitermachen würde, werde das mal ausprobieren. Danke
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben