Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe folgendes Problem: Ich lese 100 float Werte aus einer SPS aus. Da dies die Nachrichtenlänge sprengt, muß ich diese in zwei 50 "Häppchen" holen. Dies geschieht folgendermaßen:
Code:
float[] myArray = (float[])evt.getNewValue();
Gibt es nun eine Möglichkeit diese beiden Arrays zusammenzuführen?
Ich habe schon mit ArrayList herumexperiementiert, aber weder ist es möglich per toArray-Befehl ein einzelnes 100 Positionen umfassendes Array zu erzeugen, noch kann ich per:
Code:
float[] myArray2 = new myArray2[50];
myArray2 = (float[])evt.getNewValue();
for (int i = 0; i < myArray2.length; i++)
{myArray.add(myArray2[i]);
}
die einzelnen Array-Werte der Arraylist hinzufügen.
Gibt mehrere Möglichkeiten. Entweder du machst dir 3 Arrays, eins mit 100 und 2 mit 50 und kopierst dann die 2 50er in das 100er per einfacher for Schleife.
Oder, wenn du Werte als Objekte brauchst und länger dann Kapselst du jedes float in ein Float Objekt und dann kannst du ArrayList.addAll(Arrays.asList(Object[])) nutzen. Das lohnt aber nur wenn du die noch länger als Objekte brauchst. Um einfach über die floats zu hühnern ist das überzogen.
float[] myArr1 = new float[50];
float[] myArr2 = new float[50];
//einlesen der Werte
float[] myArr = new float[100];
for (int i = 0; i < 50; i++){
myArr[i] =myArr1[i];
}
for (int i = 0; i < 50; i++){ //Edit: hier ist Anubis' Lösung besser...
myArr[i + 50] = myArr2[i];
}
Wenn du alles in einem zweidimensionalen Array machst, gehts auch mit beliebig vielen. Hier ein 1.5-Beispiel:
Code:
public float[] toOneArray (float[]... fs)
{
int retlength = 0;
for (float[] flo : fs){
retlength += flo.length;
}
float[] ret = new float[retlength];
int actLength = 0;
for (float[] flo : fs){
for (int i = 0; i < flo.length; i++){
ret[actLength + i] = flo[i];
}
actLength += flo.length;
}
return ret;
}
Das könnte man dann so aufrufen:
Code:
float[] myArr1 = new float[50];
float[] myArr2 = new float[50];
//einlesen der Werte
float[] myArr = toOneArray (myArr1, myArr2);
Wenn ich das richtig verstanden habe, hats du zwei Arrays der Länge 50 (myArray und myArray2).
Erzeuge do einfach ein neunes Array der länge 100 und packe, dann biede Arrays rein:
Code:
float[] daten = new float[100];
for(int i = 0; i < 50; i++) {
daten[i] = myArray[i];
daten[i+50] = myArray2[i];
}
Ist ja Wahnsinn, wie schnell einem hier geholfen wird. Vielen Dank! Für mich ist es am einfachsten, es per kopieren der zwei Arrays in eines zu machen.
Mit freundlichen Grüßen,
die nachrichtenlänge darf nicht mehr als 50 float-werte betragen?
hm... da ich auch messwerte analysieren muss, ist ja das problem schon vorprogrammiert:
ich benötige ein array, das gut und gerne an die >500.000 werte speichern muss. jetzt die frage ob das sinn macht?
kommt drauf an was man(n) möchte. also, dieses array muss später an eine c+-funktion über JNI übergeben werden, wo die werte dan aus dem array über die MatLab-API in matrizen umgesetzt werden sollen.
gibt es andere lösungswege? bin für hilfe dankbar!
Das Problem hängt bei mir mit der SPS aus der ich auslese zusammen. Die hat nämlich eine Nachrichtenlängenbeschränkung (also die maximale Nachrichtengröße, war glaub ich irgendwas bei 240 Bytes). Daher muß ich die Abfrage in zwei Teile à 50 aufteilen. Wenn du von einer Meßkarte oder so abgreifst, die diese Beschränkung nicht aufweist, ist es kein Problem die Menge an Daten zu übertrage, vorausgesetzt dein Arbeitsspeicher reicht aus. Wenn ich es nämlich richtig verstanden habe, dürfen Arrays unendlich groß sein.