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.
// Record to store Current Curve
public class TMotorCurrentCurve {
public float[] Current_Time;
public float[] Current_Digits;
public float[] Current_Ampere;
public long Direction; // 0=None, 1=In, 2=Out
public float MaxCurrent;
public float MinCurrent;
public float AvgCurrent;
public int used;
// initialize
public TMotorCurrentCurve()
{
float[] CT= new float[100];
Current_Time = CT;
float[] CA = new float[100];
Current_Ampere = CA;
float[] CD = new float[100];
Current_Digits = CD;
Direction = 0L;
MaxCurrent = 0.0F;
MinCurrent = 0.0F;
AvgCurrent = 0.0F;
used = 0;
}
// add element
public void addEntry(float MT, float MD, float MI)
{
if (used == Current_Time.length) grow();
Current_Time[used] = MT;
Current_Ampere[used] = MI;
Current_Digits[used] = MD;
used += 1;
}
public void grow()
{
// increase size of MT
float[] New_MT = new float[2*Current_Time.length];
// copy elements from old MT to new MT
for (int i=0; i<Current_Time.length; i=i+1) { New_MT[i] = Current_Time[i]; }
// Assign new MT to Current_time
Current_Time = New_MT;
// increase size of MD
float[] New_MD = new float[2*Current_Digits.length];
// copy elements from old MT to new MT
for (int i=0; i<Current_Digits.length; i=i+1) { New_MD[i] = Current_Digits[i]; }
// Assign new MT to Current_time
Current_Time = New_MD;
// increase size of MI
float[] New_MI = new float[2*Current_Time.length];
// copy elements from old MT to new MT
for (int i=0; i<Current_Ampere.length; i=i+1) { New_MI[i] = Current_Ampere[i]; }
// Assign new MT to Current_time
Current_Ampere = New_MI;
}
}
// Array to store Motor data
public class TMotorData {
public TMotorCurrentCurve[] Curves;
public int used;
// initialize
public TMotorData()
{
TMotorCurrentCurve[] Cur = new TMotorCurrentCurve[1];
Curves = Cur;
TMotorCurrentCurve CU = new TMotorCurrentCurve();
Curves[0] = CU;
used = 1;
}
// add Entry
public void grow()
{
// increase size of MD
used += 1;
TMotorCurrentCurve[] New_Cur = new TMotorCurrentCurve[used];
// copy elements from old MT to new MT
for (int i=0; i<Curves.length-1; i=i+1) { New_Cur[i] = Curves[i]; }
// Assign new MT to Current_time
Curves = New_Cur;
}
}
Alles anzeigen
Im Hauptprogramm fuehre ich folgendes aus, was funktioniert:
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
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;
}