Arrays instantiieren

  • Hallo, ich habe folgende Klassen:


    public class TMotorCurrentCurve
    {
    public long Direction;
    public float[][] Current_Digits;
    public float[][] Current_Ampere;
    public float MaxCurrent;
    public float MinCurrent;
    public float AvgCurrent;
    }


    public class TMotorData
    {
    public TMotorCurrentCurve[] Curves;
    }



    Ich instatiiere so:


    MD.Curves = new TMotorCurrentCurve[10];


    Aber wie kann ich die 2D-Arrays in der ersten Klasse instantiieren?

  • Folgendes fuehrt auch zum Absturz:


    TMotorData MD = new TMotorData();
    MD.Curves = new TMotorCurrentCurve[10];
    for (int i=0; i<10; i=i+1)
    {
    MD.Curves[i].Current_Time = new float[100];
    MD.Curves[i].Current_Ampere = new float[100];
    MD.Curves[i].Current_Digits = new float[100];
    }

  • Also abgesehen davon, dass ich Current_Time nirgendwo finde:


    2D Arrays intanziierst Du wie 1D Arrays.

    Java
    motorData.getCurves().get(i).setCurrentDigits(new float[10][100]);

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Mein Ziel ist es ein dynamisches 2-dimensionales Array zu erzeugen, das wachsen kann. Die Klasse TMotorCurrentCurve enhaelt jeweils einen Satz einer Datenkurve von Messdaten (Zeiten, Strom in Ampere, Strom in Digits). Die Klasse TMotorData enthaelt mehrere dieser Datensaetze. Ich habe beiden Klassen einen Konstruktor hinzugefuegt, der die Arrays initialisiert. Weiterhin eine Methode grow(), die die Dimensionen der Arrays erhoeht, wenn man an das Limit stoesst.



    Im Hauptprogramm fuehre ich folgendes aus, was funktioniert:


    Code
    TMotorData MD = new TMotorData();
    		MD.Curves[0].addEntry(1000.0F, 210.0F, 10.0F);
    		MD.Curves[0].addEntry(2000.0F, 215.0F, 11.0F);
    		MD.Curves[0].addEntry(3000.0F, 220.0F, 12.0F);


    Nun moechte ich einen zweiten Datensatz in TMotorData erzeugen, also


    Code
    TMotorData MD = new TMotorData();
    MD.grow();
    MD.Curves[1].addEntry(1000.0F, 210.0F, 10.0F);
    MD.Curves[1].addEntry(2000.0F, 215.0F, 11.0F);
    MD.Curves[1].addEntry(3000.0F, 220.0F, 12.0F);


    Entweder klappt das Eintragen der Werte schon nicht, oder die App beendet sich beim Auslesen der Werte. Was ist falsch in den Methoden growth()?


    Ist das besser beschrieben Marco?


    Gutelo


    Edit: so ein mist, staendig vergesse ich irgendwas. Folgendes muss bei TMotorData.growth() eingefuegt werden, dann geht es:


    for (int i=0; i<used; i=i+1)
    {
    TMotorCurrentCurve CU = new TMotorCurrentCurve();
    New_Cur[i] = CU;
    }

  • Ja, ich versteh ein bisschen besser.
    Der Nachteil an der Nutzung skalarer Arrays ist, dass sie ziemlich unveränderlich sind.


    Wenn Du dringend auf Hardwarenähe und Geschwindigkeit angewiesen bist, solltest Du das vermutlich lieber in C realisieren.


    Ansonsten wäre es vermutlich sinnvoller, ein Objekt mit der Zuordnung von current_digits und current_ampere in ein Java Array zu packen, da diese von Natur aus mitwachsen und man sich darum nicht zu kümmern braucht.


    PS: Ich habe Deinen letzten Beitrag so verstanden, dass es jetzt läuft. Insofern gehe ich nicht weiter auf die Implementierung ein. :)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Das Programm ist schon fertig unter Lazarus. Terminal-Programm das über serielle Schnittstelle einen Arduino Mikroprozessor steuert. Dieser nimmt auf einem analogen input channel Spannungswerte auf die über einem Widerstand abfallen wenn ein Motor fährt. Der Strom ist proportional zur Spannung. Die strom-zeit Kurven werden geplottet. Abhängig vom Verlauf werden dann bestimmte Werte ins Eeprom des arduino gespeichert um z.b. im Anschlag den Motor abzuschalten. Das lazarus Programm war schnell fertig, aber das ganze auf Android umzusetzen ist schwer. Immerhin kann ich jetzt schon die datenfiles einlesen lassen. Er parst die strom-zeit Daten und er zeigt die Kurven im androidplot an. Nun hänge ich am file open Dialog. Danach kommt die Kommunikation über USB2Serial. Für letzteres habe ich eine Komponente gefunden.


    Jetzt weist du was ich mache :)

  • Klingt sehr interessant !


    du solltest in java aber versuchen mehr auf objekte zu setze, sprich keine mehrdimensionalen arrays zu nutzen.
    Erstelle die eine Klasse die deinen Wünschen entspricht und packe dann mehrere Instanzen dieser Klasse in eine Java.util.ArrayList.
    Die kann dynamisch wachsen und du kannst auch löschen und überschreiben wie du es für nötig hälst.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!