Ответ 1
Я бы просто использовал плоские одномерные массивы и индекс, основанный на размерности, я и j.
switch (dimensions) {
case 1: double[] array = new double[10]; break;
case 2: double[][] array = new double[10][]; break;
case 3: double[][][] array = new double[10][][]; break;
case 4: double[][][][] array = new double[10][][][]; break;
case 5: double[][][][][] array = new double[10][][][][]; break;
case 6: double[][][][][][] array = new double[10][][][][][]; break;
default: System.out.println("Sorry, too many dimensions"); break;
}
Есть ли способ сделать это выше? Я хочу, чтобы он мог создавать массив любого количества измерений, также...
Я бы просто использовал плоские одномерные массивы и индекс, основанный на размерности, я и j.
Как уже говорилось, вы не можете использовать такой массив, поскольку для каждого измерения вам понадобится другой код.
Создание такого массива выполнимо, однако, используя отражение:
import java.lang.reflect.Array;
private Class<?> arrayClass(Class<?> compClass, int dimensions) {
if(dimensions == 0) {
return compClass;
}
int[] dims = new int[dimensions];
Object dummy = Array.newInstance(compClass, dims);
return dummy.getClass();
}
public Object makeArray(int dimensions) {
Class<?> compType = arrayClass(double.class, dimensions-1);
return Array.newInstance(compType, 10);
}
Затем вам нужно будет использовать отражение для доступа к вашему массиву или передать его объекту [] (который работает для всех измерений > 1), а затем манипулировать только первым уровнем. Или подайте его методу, который нуждается в правильном типе массива.