-1

簡単な質問です。新しい 2 次元の int 配列をそのようにインスタンス化すると

int[][] input = new int[101][]; //number is irrelevant

日食はこれを気にしないようですが、これが期待どおりに機能するかどうかは完全にはわかりません。つまり、配列の2番目の部分が動的に機能するということです。

あなたの回答を読んだ後、私の質問の言い回しが悪いことに気づきました。

ファイルから読み込んでいます - これは CSV で、101 列と X 行があります。ファイルを 1 行ずつ読み取っているので、「2 次元配列」の最初の次元が 101 であることは簡単にわかります。しかし、ファイルを 1 行ずつ読み取っているためでもあります。 、ファイル全体を反復処理しないと、2 番目の次元が X になるとは断言できません。

現在の方法を使用して X を見つけるにはどうすればよいでしょうか、それとも実際には不可能でしょうか?

4

6 に答える 6

2

次に、 all である 101 個の要素がinputありますnull。2 番目のディメンションを作成するには、アイテムごとに初期化する必要があります。

input[13] = new int[63];
input[14] = new int[128];

2 番目のディメンションは、すべての第 1 レベルのアイテムで同じである必要はありません。これを使用した場合、2 番目の次元は同じになります。

int[][] input = new int[101][50];

その後、すべての値が に初期化され0ます。

しかし、本当の答えは次のとおりです。なぜ試してみなかったのですか?

于 2012-06-05T14:20:16.180 に答える
0

他の回答が指摘しているように、Javaには「ギザギザ」の配列、つまり配列の配列しかありません。

int[][] input = new int[101][];

ここでコードが行っていることは、int[]s の 101 要素の配列を作成することです。int[]は であるため、Object各要素は に初期化されnullます。int[]次に、使用する前に各要素を設定する必要があります。

input[0] = new int[4];

内部配列をすべて 1 つのサイズにすばやく初期化できるショートカット構文あります。

int[][] input = new int[101][4];

intこれにより、 ( に初期化された)の 4 要素配列の 101 要素配列が作成され0ます。

于 2012-06-05T14:24:47.350 に答える
0

技術的には、Java には「2 次元」配列の概念がありません。それが持っているもの、そしてあなたが書いたものは、配列の配列です-これにより、ギザギザの配列を持つことができます。

何かを書くことで、基本的に、実際の「内部」配列を初期化していないため、new int[3][]概念化できる配列の配列があると言いました。[null,null,null]この時点で、次のようなことをする必要があります

input[0] = new int[3]
input[1] = new int[3]
input[2] = new int[3]

[[0,0,0]、[0,0,0]、[0,0,0]]として概念化できます。

書くnew int[3][3]ことは、これと同じ目標を達成します。

于 2012-06-05T14:25:04.710 に答える
0

Eclipse は、2 番目の次元を初期化していなくても問題ありません。あなたのアプローチでは、すべてのサブ配列を初期化する必要があります: int[1]、int[2] など。

于 2012-06-05T14:25:49.967 に答える
0

その 2 番目の次元の長さが可変であることを探していると思います。その場合、それを配列の配列にすることで、各行の長さを定義することができます。

于 2012-06-05T14:21:03.730 に答える
0

Java はジャグ配列のみをサポートします。つまり、すべての次元が自動的に初期化されるわけではなく、自分で初期化する必要があります。

for (int i = 0; i < input.length; ++i)
    input[i] = new int[42]; // or anything else.
于 2012-06-05T14:21:55.570 に答える