1. 配列の「長さ」ってなに?
配列の長さは「その配列が何個の要素を持っているか」です。
Javaでは配列の長さを確認するのに .length(フィールド)を使います。
int[] a = new int[4];
System.out.println(a.length); // → 4
Javaa は 4 個の int が入る配列なので a.length は 4 です。
2. 多次元配列(2次元)でも同じルール
2次元配列は「配列の中に配列がある」構造です。
たとえば int[][] table = new int[3][5]; は外側の配列が 3 個、その中の各配列は 5 個ずつ要素を持ちます。
table.length→ 外側配列の個数(ここでは 3)table[0].length→ 0 番目の内側配列の長さ(ここでは 5)table[1].length→ 同様に 5
ポイント:内側の配列ごとに長さが違っても良い(ジャグ配列/可変長配列)。
int[][] jag = new int[2][];
jag[0] = new int[3]; // jag[0] は長さ3
jag[1] = new int[5]; // jag[1] は長さ5
System.out.println(jag.length); // → 2
System.out.println(jag[0].length); // → 3
System.out.println(jag[1].length); // → 5
Java3. よく使うパターン:全要素にアクセスする(ネストされた for)
多次元配列を扱うときは、外側をループ → 内側をループ が基本です。.length をループ条件に使えば安全に全要素を処理できます(要素数が変わっても動く)。
int[][] scores = { {87, 54}, {76, 92, 48, 58, 84} };
for (int i = 0; i < scores.length; i++) { // 外側(行)
for (int j = 0; j < scores[i].length; j++) { // 内側(列)※scores[i]の長さを使う
System.out.println("scores[" + i + "][" + j + "] = " + scores[i][j]);
}
}
Javaこのコードは scores の全要素を順に表示します。内側の長さが違っていても scores[i].length を使うことで安全にループできます。
4. 強化版(便利テク):拡張 for(for-each)による書き方
ネスト for を簡潔に書けます。インデックスが不要で全要素を順に見たいときに便利。
for (int[] row : scores) {
for (int val : row) {
System.out.println(val);
}
}
Java注意:拡張 for は「インデックスが必要なとき」や「位置を表示したいとき」には向きません。
5. 実用例:2次元配列の合計と平均(サンプル)
public class SumAverage2D {
public static void main(String[] args) {
int[][] scores = { {80, 90, 70}, {60, 85}, {100, 95, 90, 80} };
int total = 0;
int count = 0;
for (int i = 0; i < scores.length; i++) {
for (int j = 0; j < scores[i].length; j++) {
total += scores[i][j];
count++;
}
}
double average = (double) total / count;
System.out.println("合計 = " + total);
System.out.println("平均 = " + average);
}
}
Java出力(例):
合計 = 850
平均 = 85.0
6. よくある初学者のミスと注意点
lengthとlength()を混同- 配列 →
.length(フィールド) - 文字列(String) →
.length()(メソッド)
例:array.lengthは OK、str.length()は OK。array.length()はエラー。
- 配列 →
- オフバイワン(IndexOutOfBounds)
ループはi < array.lengthとする。i <= array.lengthはダメ(最後に範囲外アクセスになる)。 - 内側配列が
nullの可能性int[][] a = new int[3][];としたとき、a[0]がまだnullだとa[0].lengthを呼ぶとNullPointerExceptionになります。初期化を確認するか、null チェックを入れてください。 - 配列の「サイズ変更」はできない
一度作った配列の長さは変えられません。要素数を増やしたければArrays.copyOfやArrayListを使います。
7. 小さなステップアップ例題(コード付き)
例題 A — 各行ごとの最大値を出す
int[][] data = { {3, 7, 2}, {10, 5}, {6, 6, 9, 1} };
for (int i = 0; i < data.length; i++) {
int max = Integer.MIN_VALUE;
for (int j = 0; j < data[i].length; j++) {
if (data[i][j] > max) max = data[i][j];
}
System.out.println("row " + i + " max = " + max);
}
Java例題 B — 3×3 の行列の転置(正方行列のみ)
int[][] m = { {1,2,3}, {4,5,6}, {7,8,9} };
int[][] t = new int[3][3];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
t[j][i] = m[i][j];
}
}
Java8. 練習問題(初心者向け) — 解答付き
問題1int[][] a = { {1,2}, {3,4,5} }; の全要素の合計を求めるコードを書け。
解答例(短)
int[][] a = { {1,2}, {3,4,5} };
int sum = 0;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) sum += a[i][j];
}
System.out.println(sum); // 出力 15
Java問題2int[][] a = new int[3][]; a[0]=new int[1]; a[1]=new int[2]; a[2]=new int[3];
この配列の a.length と a[2].length は何?
解答a.length = 3、a[2].length = 3
問題3
3×4 の配列を作り、各要素に行番号+列番号を入れる(例:[i][j] = i*10 + j)コードを書け。
解答例
int[][] t = new int[3][4];
for (int i = 0; i < t.length; i++) {
for (int j = 0; j < t[i].length; j++) {
t[i][j] = i * 10 + j;
}
}
Javaまとめ(初心者向けの一言)
- 配列の長さは
.lengthで取得する(String と違って括弧はなし)。 - 多次元配列では 外側も内側も
.lengthを使う。内側はarray[i].length。 - ループは
.lengthを使って安全に回す。要素ごとに長さが違うときもこれで対応できる。 - 内側が
nullの場合は注意。配列は固定長なので、増やしたいときは別手段(Arrays.copyOfやArrayList)。
