0

変な質問かもしれませんが、それは私が Java にあまり詳しくないからかもしれません。

そこで、2D int 配列を宣言しました。

int[][] arr = new int[0][10]

ご覧のとおり、2 番目の次元の長さは 10 で、1 番目の次元の長さは 0 です。Java がこの種の配列をどのように処理するかはわかりませんが、コンパイラはエラーを生成しません。つまり、正当な配列です。宣言。

さて、私は配列をいくつかの関数に渡し、関数内から 2 番目の次元の長さを取得したいと考えています。もちろん次のようなものです:

arr[0].length

動作しません。これを行う別の方法はありますか?

4

3 に答える 3

3

new int[0][10]とによって作成されたオブジェクトnew int[0][20]は同等です。ここには論理的な「2番目の次元」はありません。事実上、次のようなものを実行しています。

int[][] createArray(int d1, int d2) {
    int[][] ret = new int[d1][];
    for (int i = 0; i < d1; i++) {
        ret[i] = new int[d2];
    }
    return ret;
}

これをシナリオに変換すると、 .を読み取らないd2コードになります。

(配列の配列ではなく)汎用の長方形配列を表現したい場合は、独自の型を作成することを検討してください。

于 2012-05-26T15:16:48.657 に答える
1

Javaの配列、および他のほとんどすべてのプログラミング言語は、ゼロベースです。この2D配列を考えてみましょう。

int[][] arr = new int[1][10];

これは、1行10列であることを意味します。

ここで、この配列について考えてみましょう。

int[][] arr = new int[0][10];

これは、行がゼロで(無関係な量の列)が含まれていることを意味します。

2番目の配列にインデックスを付けようとすると、インデックスを作成できないことがわかります。長さがゼロの配列には開始点がありません。

コンパイラは、ディメンションを宣言したため、これを有効と見なしますが、Javaで実際に意味のある方法で使用することはできません。

于 2012-05-26T15:21:06.173 に答える
0

二次元の長さなどというものはありません。検討:

int[][] arr = new int[10][10];
arr[5] = new int[42];

2 番目の次元の長さは? 10か42?

いいえ、この方法では機能しません。arr10 個の要素を持つ配列で、それぞれが int 配列 (または null) の参照でなければなりません。言うことはそれだけです。

于 2012-05-26T15:29:35.437 に答える