2

配列を含む文字列があります。例:

"[[1, 2], [4, 5], [7, 8]]"

これから、実際の Java 配列を作成したいと思います。次元を取得する関数と、配列のすべての要素を取得する再帰関数を作成しました。したがって、すべての 1-D 配列を作成しましたが、ランタイム中に見つけた次元の配列を Java で作成する方法があるかどうかを知りたいですか? 次元は配列として返されます。同様に、上記の例では、ディメンションは次のとおりです。

[3, 2]

編集:この情報から実際の配列を作成する方法はありますか? 次元 [3, 2] は単なる例です。[3, 2, 4, 5] も可能です。実行時にこの情報から配列を生成できますか? コンパイル時にこの情報はありません。

いくつかの問題があります。回答についてコメントできません。ということで、ここで編集。

4

2 に答える 2

1

主な問題は、N 次元配列をコードで直接参照できないことです。

幸いなことに、Java には、N 次元配列を操作するためのちょっとした裏技があります。

配列は、Java の他のすべての非プリミティブと同様のオブジェクトです。

したがって、次のことができます。

// Note it's Object o not Object[] o
Object o = new Object [dimensionLengh];

再帰的な方法を使用して構築できます。

Object createMultyDimArray(int [] dimensionLengths) {
    return createMultyDimArray(dimensionLengths, 0);
}

Object createMultyDimArray(int [] dimensionLengths, int depth) {
    Object [] dimension = new Object[dimensionLengths[depth]];
    if (depth + 1 < dimensionLengths.length) {
        for (int i=0; i < dimensionLengths[depth]; i++) {
            dimension[i] = createMultyDimArray(dimensionLengths, depth+1);
        }
    }
    return dimension;
}

Objectこれを使用するには、 fromからにキャストする必要がありますObject []

Java は配列に対してタイプ セーフであり、間違いによって ClassCastException が発生する可能性があります。Java リフレクションを使用して配列を作成する方法についてもお読みになることをお勧めします: http://docs.oracle.com/javase/tutorial/reflect/special/arrayInstance.html

于 2013-07-10T08:00:34.383 に答える