検討:
int[][] multD = new int[5][];
multD[0] = new int[10];
これは、5行10列の2次元配列を作成する方法ですか?
このコードをオンラインで見ましたが、構文が意味をなしませんでした。
検討:
int[][] multD = new int[5][];
multD[0] = new int[10];
これは、5行10列の2次元配列を作成する方法ですか?
このコードをオンラインで見ましたが、構文が意味をなしませんでした。
次のことを試してください。
int[][] multi = new int[5][10];
...これは次のようなものの省略形です:
int[][] multi = new int[5][];
multi[0] = new int[10];
multi[1] = new int[10];
multi[2] = new int[10];
multi[3] = new int[10];
multi[4] = new int[10];
すべての要素が、のデフォルト値に初期化されるため、上記も次と同等であることに注意してint
ください0
。
int[][] multi = new int[][]{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};
2次元配列を宣言し、宣言時に要素を次のように直接格納できます。
int marks[][]={{50,60,55,67,70},{62,65,70,70,81},{72,66,77,80,69}};
ここで、 intは配列に格納されている整数型の要素を表し、配列名は「マーク」です。配列は同じデータ型を持つ要素のコレクションであるため、 intは「{」および「}」中括弧内に表されるすべての要素のデータ型です。
上記のステートメントに戻ります。要素の各行は中括弧内に記述する必要があります。行と各行の要素は、コンマで区切る必要があります。
ここで、ステートメントを観察します。3行5列あるので、JVMは3 * 5=15ブロックのメモリを作成します。これらのブロックは、個別に次のように参照できます。
marks[0][0] marks[0][1] marks[0][2] marks[0][3] marks[0][4]
marks[1][0] marks[1][1] marks[1][2] marks[1][3] marks[1][4]
marks[2][0] marks[2][1] marks[2][2] marks[2][3] marks[2][4]
注:n個
の要素
を格納する場合、配列インデックスはゼロから始まり、n-1で終わります。2次元配列を作成する別の方法は、最初に配列を宣言してから、new演算子を使用してその配列にメモリを割り当てることです。
int marks[][]; // declare marks array
marks = new int[3][5]; // allocate memory for storing 15 elements
上記の2つを組み合わせることにより、次のように書くことができます。
int marks[][] = new int[3][5];
他の人が言ったようにそれらを作成することができます。追加するもう1つのポイント:次のように、必ずしも同じ数の列を持つ必要はなく、各行で傾斜した2次元配列を作成することもできます。
int array[][] = new int[3][];
array[0] = new int[3];
array[1] = new int[2];
array[2] = new int[5];
5行10列の2次元配列を作成するための最も一般的なイディオムは次のとおりです。
int[][] multD = new int[5][10];
または、各行を明示的に初期化する必要がありますが、以下を使用することもできます。これは、現在の行に似ています。
int[][] multD = new int[5][];
for (int i = 0; i < 5; i++) {
multD[i] = new int[10];
}
次のように宣言することも可能です。良いデザインではありませんが、機能します。
int[] twoDimIntArray[] = new int[5][10];
試す:
int[][] multD = new int[5][10];
コードでは、2D配列の最初の行のみが0に初期化されることに注意してください。2行目から5行目も存在しません。あなたがそれらを印刷しようとすると、あなたはnull
それらのすべてのために得るでしょう。
Javaでは、2次元配列を1次元配列と同じものとして宣言できます。一次元配列では、次のように書くことができます
int array[] = new int[5];
ここで、intはデータ型、array []は配列宣言であり、new array
5つのインデックスを持つオブジェクトを持つ配列です。
このように、2次元配列は次のように書くことができます。
int array[][];
array = new int[3][4];
これarray
がintデータ型です。最初にそのタイプの1次元配列で宣言し、次に3行4列の配列を作成します。
あなたのコードで
int[][] multD = new int[5][];
multD[0] = new int[10];
これは、5行の2次元配列を作成したことを意味します。最初の行には10列あります。Javaでは、必要に応じてすべての行の列サイズを選択できます。
int [][] twoDim = new int [5][5];
int a = (twoDim.length);//5
int b = (twoDim[0].length);//5
for(int i = 0; i < a; i++){ // 1 2 3 4 5
for(int j = 0; j <b; j++) { // 1 2 3 4 5
int x = (i+1)*(j+1);
twoDim[i][j] = x;
if (x<10) {
System.out.print(" " + x + " ");
} else {
System.out.print(x + " ");
}
}//end of for J
System.out.println();
}//end of for i
int rows = 5;
int cols = 10;
int[] multD = new int[rows * cols];
for (int r = 0; r < rows; r++)
{
for (int c = 0; c < cols; c++)
{
int index = r * cols + c;
multD[index] = index * 2;
}
}
楽しみ!
この方法を試してください:
int a[][] = {{1,2}, {3,4}};
int b[] = {1, 2, 3, 4};
これらのタイプの配列は、Javaではジャグ配列と呼ばれます。
int[][] multD = new int[3][];
multD[0] = new int[3];
multD[1] = new int[2];
multD[2] = new int[5];
このシナリオでは、配列の各行が異なる数の列を保持します。上記の例では、最初の行は3つの列を保持し、2番目の行は2つの列を保持し、3番目の行は5つの列を保持します。この配列は、コンパイル時に次のように初期化できます。
int[][] multD = {{2, 4, 1}, {6, 8}, {7, 3, 6, 5, 1}};
配列内のすべての要素を簡単に繰り返すことができます。
for (int i = 0; i<multD.length; i++) {
for (int j = 0; j<multD[i].length; j++) {
System.out.print(multD[i][j] + "\t");
}
System.out.println();
}
実際、Javaには数学的な意味での多次元配列はありません。Javaには、配列の配列、つまり各要素が配列でもある配列があります。そのため、初期化するための絶対的な要件は、最初の次元のサイズです。残りが指定されている場合は、デフォルト値が設定された配列が作成されます。
int[][] ar = new int[2][];
int[][][] ar = new int[2][][];
int[][] ar = new int[2][2]; // 2x2 array with zeros
それはまた私たちに癖を与えます。サブ配列のサイズは、要素を追加して変更することはできませんが、任意のサイズの新しい配列を割り当てることで変更できます。
int[][] ar = new int[2][2];
ar[1][3] = 10; // index out of bound
ar[1] = new int[] {1,2,3,4,5,6}; // works
動的で柔軟なもの(つまり、列と行を追加または削除できるもの)が必要な場合は、「ArrayListのArrayList」を試すことができます。
public static void main(String[] args) {
ArrayList<ArrayList<String>> arrayListOfArrayList = new ArrayList<>();
arrayListOfArrayList.add(new ArrayList<>(List.of("First", "Second", "Third")));
arrayListOfArrayList.add(new ArrayList<>(List.of("Fourth", "Fifth", "Sixth")));
arrayListOfArrayList.add(new ArrayList<>(List.of("Seventh", "Eighth", "Ninth")));
arrayListOfArrayList.add(new ArrayList<>(List.of("Tenth", "Eleventh", "Twelfth")));
displayArrayOfArray(arrayListOfArrayList);
addNewColumn(arrayListOfArrayList);
displayArrayOfArray(arrayListOfArrayList);
arrayListOfArrayList.remove(2);
displayArrayOfArray(arrayListOfArrayList);
}
private static void displayArrayOfArray(ArrayList<ArrayList<String>> arrayListOfArrayList) {
for (int row = 0; row < arrayListOfArrayList.size(); row++) {
for (int col = 0; col < arrayListOfArrayList.get(row).size(); col++) {
System.out.printf("%-10s", arrayListOfArrayList.get(row).get(col));
}
System.out.println("");
}
System.out.println("");
}
private static void addNewColumn(ArrayList<ArrayList<String>> arrayListOfArrayList) {
for (int row = 0; row < arrayListOfArrayList.size(); row++) {
arrayListOfArrayList.get(row).add("added" + row);
}
}
出力:
First Second Third
Fourth Fifth Sixth
Seventh Eighth Ninth
Tenth Eleventh Twelfth
First Second Third added0
Fourth Fifth Sixth added1
Seventh Eighth Ninth added2
Tenth Eleventh Twelfth added3
First Second Third added0
Fourth Fifth Sixth added1
Tenth Eleventh Twelfth added3