Ich suche nach einer Möglichkeit, eine Reihe von Elementen in einem Array unbekannter Dimension (nicht Länge) zu lesen.Lesebereich von Werten in einem Array mit unbekannter Dimension
Der Client kann eine Leseanforderung für ein Objekt senden und den zu lesenden Bereich angeben. Die Eingabe String könnte wie folgt lauten: "1: 2: 3: 2,2: 3: 1: 4" zum Beispiel. Dies würde bedeuten, dass er die Elemente im Bereich von [1] [2] [3] [2] bis [2] [3] [1] [4] eines Arrays lesen möchte.
ein Betonelement lesen ich diese Funktion erstellt:
public Object readValue(Object obj,int[] positions) {
Object value = null; //Result
int objDimension = getDimension(obj); //Dimesion of the array
System.out.println("Dimension: " + objDimension);
try {
Object[] aux = (Object[]) obj;
for (int i = 0; i < objDimension - 1; i++) {
int pos = positions[i];
aux = (Object[]) aux[pos];
}
value = aux[positions[objDimension - 1]];
System.out.println("Result: " + value);
} catch (ArrayIndexOutOfBoundsException e) {
// TODO: Send a fault to the client.
System.out.println("Error: "+e.getMessage());
}
return value;
}
public static int getDimension(Object value) {
Class<?> clazz = value.getClass();
String className = clazz.getName();
int dimension = 0;
for (int i = 0; i < className.length(); i++) {
if (className.charAt(i) != '[') {
dimension = i;
break;
}
}
return dimension;
}
//Example.
public static void main(String[] args) {
// TODO code application logic here
TestMultiDimensioNRead test = new TestMultiDimensioNRead();
Integer[][][][] testSubject = new Integer[5][2][4][];
testSubject[0][0][2] = new Integer[8];
testSubject[0][0][0] = new Integer[15];
testSubject[0][0][1] = new Integer[20];
testSubject[0][0][3] = new Integer[2];
testSubject[1][1][2] = new Integer[7];
testSubject[1][1][2][0] = 80;
test.readValue(testSubject,new int[]{1, 1, 2, 0});
}
Ich war eine gute Art und Weise denken kann das differens zwischen jeder Dimension Länge zu berechnen sein.
Wenn jemand mit einer guten Idee kommen kann, würde ich wirklich schätzen.
Vielen Dank im Voraus.
EDIT 1: Der Code in dieser Frage liest den Wert einer bestimmten Position in einem Array unbekannter Dimension. Mein Problem ist, alle Elemente zu lesen, die zwischen den angegebenen Punkten liegen. Dies war in der ersten Frage möglicherweise nicht klar.
Dies ist wahrscheinlich aus vielen Gründen kein vorgeschlagener Ansatz. Kann ich fragen, was Sie insgesamt erreichen wollen? Ich würde wahrscheinlich überdenken, wie Sie das Problem lösen. – Kurtymckurt
Es ist für einen Server, einer der Dienste ist es, eine Reihe von Werten aus einem Array beliebiger Größe zu lesen. Die Arrays sind nicht vordefiniert und haben keine Dimesion-Grenze (ich schrieb 255, wegen der Dimensionsbegrenzung von Java). Diese werden beim Start des Servers erstellt und stammen aus den Konfigurationsdateien. Übrigens ist jeder alternative Weg oder Idee willkommen, danke. – gabun88
Können Sie die Dimensionen mit den Daten als Parameter übergeben? Es hat keinen Sinn, einen Algorithmus zu schreiben, um es herauszufinden, wenn der aufrufende Code es kennt (zumindest für diese Verwendung). – Kurtymckurt