行と列の両方について2D配列の長さを取得する必要があります。次のコードを使用して、これを成功させました。
public class MyClass {
public static void main(String args[])
{
int[][] test;
test = new int[5][10];
int row = test.length;
int col = test[0].length;
System.out.println(row);
System.out.println(col);
}
}
予想どおり、5、10が印刷されます。
この行を見てください。
int col = test[0].length;
列の長さを取得するには、実際には特定の行を参照する必要があります。私には、これは非常に醜いようです。さらに、配列が次のように定義されているとします。
test = new int[0][10];
その場合、長さを取得しようとするとコードは失敗します。これを行うための別の(よりインテリジェントな)方法はありますか?
考えて
public static void main(String[] args) {
int[][] foo = new int[][] {
new int[] { 1, 2, 3 },
new int[] { 1, 2, 3, 4},
};
System.out.println(foo.length); //2
System.out.println(foo[0].length); //3
System.out.println(foo[1].length); //4
}
列の長さは行ごとに異なります。データを固定サイズの2D配列でバックアップしている場合は、ラッパークラスの固定値にゲッターを指定します。
2D配列は長方形のグリッドではありません。あるいは、Javaの2D配列のようなものはありません。
import Java.util.Arrays;
public class Main {
public static void main(String args[]) {
int[][] test;
test = new int[5][];//'2D array'
for (int i=0;i<test.length;i++)
test[i] = new int[i];
System.out.println(Arrays.deepToString(test));
Object[] test2;
test2 = new Object[5];//array of objects
for (int i=0;i<test2.length;i++)
test2[i] = new int[i];//array is a object too
System.out.println(Arrays.deepToString(test2));
}
}
アウトプット
[[], [0], [0, 0], [0, 0, 0], [0, 0, 0, 0]]
[[], [0], [0, 0], [0, 0, 0], [0, 0, 0, 0]]
配列test
とtest2
は(多かれ少なかれ)同じです。
それを覚えるのは本当に大変でした
int numberOfColumns = arr.length;
int numberOfRows = arr[0].length;
これがなぜそうなのか、そして配列の問題が出たときにどうやってこれを理解できるのかを理解しましょう。以下のコードから、rows = 4とcolumns = 3がわかります。
int[][] arr = { {1, 1, 1, 1},
{2, 2, 2, 2},
{3, 3, 3, 3} };
arr
には複数の配列があり、これらの配列を縦に並べて列数を取得できます。行数を取得するには、最初の配列にアクセスしてその長さを考慮する必要があります。この場合、[1、1、1、1]にアクセスし、行数は4になります。配列が見えない問題が発生した場合は、次のように四角形として配列を視覚化できます。 n×m次元で、最初の配列、次にその長さにアクセスすることで行数を取得できると結論付けます。もう1つ(arr.length
)は列用です。
Javaでは、各「行」の長さが異なる「不規則配列」を作成できます。正方配列があることがわかっている場合は、次のように空の配列から保護するようにコードを修正して使用できます。
if (row > 0) col = test[0].length;
String [][] example = {{{"Please!", "Thanks"}, {"Hello!", "Hey", "Hi!"}},
{{"Why?", "Where?", "When?", "Who?"}, {"Yes!"}}};
example.length;
= 2
example[0].length;
= 2
example[1].length;
= 2
example[0][1].length;
= 3
example[1][0].length;
= 4
すべての多次元配列が長方形であるとは限らないので、言語レベルでより明確な方法はありません。ギザギザ(列の長さが異なる)配列が必要な場合があります。
必要な機能を抽象化するために独自のクラスを簡単に作成できます。
あなたが配列に限定されていないのであれば、おそらく Multimap のように、さまざまなコレクションクラスのいくつかは同様にうまくいくでしょう。
次のJavaの2次元配列用のプログラムを試してください。
public class ArrayTwo2 {
public static void main(String[] args) throws IOException,NumberFormatException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int[][] a;
int sum=0;
a=new int[3][2];
System.out.println("Enter array with 5 elements");
for(int i=0;i<a.length;i++)
{
for(int j=0;j<a[0].length;j++)
{
a[i][j]=Integer.parseInt(br.readLine());
}
}
for(int i=0;i<a.length;i++)
{
for(int j=0;j<a[0].length;j++)
{
System.out.print(a[i][j]+" ");
sum=sum+a[i][j];
}
System.out.println();
//System.out.println("Array Sum: "+sum);
sum=0;
}
}
}
.length =行数/列の長さ
[0] .length =列数/行の長さ
import Java.util.Arrays;
public class Main {
public static void main(String[] args)
{
double[][] test = { {100}, {200}, {300}, {400}, {500}, {600}, {700}, {800}, {900}, {1000}};
int [][] removeRow = { {0}, {1}, {3}, {4}, };
double[][] newTest = new double[test.length - removeRow.length][test[0].length];
for (int i = 0, j = 0, k = 0; i < test.length; i++) {
if (j < removeRow.length) {
if (i == removeRow[j][0]) {
j++;
continue;
}
}
newTest[k][0] = test[i][0];
k++;
}
System.out.println(Arrays.deepToString(newTest));
}
}