Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Javaの2次元(多次元)配列とは?

この記事では、Javaの2次元配列について解説します。

2次元配列は、1次元配列に縦の並びを加えた配列です。

そして、2次元配列の配列を多次元配列と言います。

配列については、以下の記事で詳しく説明しています。

【関連記事】
▶︎【Java入門】配列と初期化について

2次元配列を宣言する

2次元配列を使うには、まず宣言する必要があります。

宣言方法は、次のように記述できます。

型名 [][] 配列変数名;
配列変数名 = new 型名[ 行数 ][ 列数 ];

もしくは、1文で記述してもOKです。

型名 [][] 配列変数名 = new 型名[ 行数 ][ 列数 ];

2次元配列を宣言するときは、「[ ]」(ブラケット)記号を2つ並べます。

これによって、行と列の2つの要素数を指定可能です。

要素数は必ずしも同じ必要はないので、例えば「行は2」「列は3」といったように書けます。

2次元配列を初期化する

2次元配列を初期化するには、次のように記述します。

型名 [][] 配列変数名 = { {値1-1, 値1-2, ..}, {値2-1, 値2-2, ..} };

値全体を「{}」(中括弧)で括ります。

その中でさらに「{}」で括り、1行目、2行目…と値を格納していきます。

「値1-1」が「1行目の1列目」、「値1-2」が「1行目の2列目」といった形です。

また、次のように初期化してもOKです。

配列変数名[0][0] = 値1-1;
配列変数名[0][1] = 値1-2;
配列変数名[1][0] = 値2-1;
配列変数名[1][1] = 値2-2;

2次元配列に追加して表示

では、実際にプログラムを動かして確認してみましょう。

次のように、scoresという2次元配列に値を1つずつ追加してみます。

■記述例
public class Main {
  public static void main(String args[]){
    // 2次元配列の初期化
    int[][] scores = new int[3][2];

    // 2次元配列に値を追加
    scores[0][0] = 67;
    scores[0][1] = 90;
    scores[1][0] = 74;
    scores[1][1] = 81;
    scores[2][0] = 69;
    scores[2][1] = 55;

    // 値を出力
    System.out.println("1人目の国語の成績:" + scores[0][0] + " 数学の成績:" + scores[0][1]);
    System.out.println("2人目の国語の成績:" + scores[1][0] + " 数学の成績:" + scores[1][1]);
    System.out.println("3人目の国語の成績:" + scores[2][0] + " 数学の成績:" + scores[2][1]);
  }
}
■実行結果
mbp:Desktop potepan$ java Main
1人目の国語の成績:67 数学の成績:90
2人目の国語の成績:74 数学の成績:81
3人目の国語の成績:69 数学の成績:55

それぞれ、追加した値が出力されました。

また、2次元配列の初期化と追加を同時に行う方法もあります。

今回は、for文も使って出力方法を変えてみました。

■記述例
public class Main {
  public static void main(String args[]){
    // 2次元配列の初期化と値の追加
    int[][] scores = {
      {67, 90},
      {74, 81},
      {69, 55}
    };

    // 値を出力
    for (int i = 0; i < 3; i++) {
      System.out.println(i+1 + "人目の成績");

      for (int j = 0; j < 2; j++) {

        if (j == 0) {
          System.out.println("国語の成績:" + scores[i][j]);
        } else {
          System.out.println("数学の成績:" + scores[i][j]);
        }

      }

      System.out.println();
    }
  }
}
■実行結果
mbp:Desktop potepan$ java Main
1人目の成績
国語の成績:67
数学の成績:90

2人目の成績
国語の成績:74
数学の成績:81

3人目の成績
国語の成績:69
数学の成績:55

どちらの追加方法でも問題なく行えますので、お好みのやり方を試してみてください。

2次元配列の要素数を取得するには?

要素数を取得するにはどうすればいいですか?

要素数(長さ)を取得するには、lengthメソッドを使いましょう!

使い方は簡単で、要素数を取得したい配列に「.length」を追記する形で使います。

ポテパンダの一言メモ

取得できる要素数は列数と等しくなります。

実際に、プログラムを動かして確認してみます。

■記述例
public class Main {
  public static void main(String args[]){
    int[][] scores = {
      {67, 90},
      {74, 81},
      {69, 55}
    };
    System.out.println("配列の要素数は " + scores.length + " です。");
  }
}
■実行結果
mbp:Desktop potepan$ java Main
配列の要素数は 3 です。

より詳しい内容は、次の記事をチェックしてみてください。

【関連記事】
▶︎【Java基礎】サッと理解!文字列・配列の長さをlengthで取得する(よく使うサンプルコード付き)

2次元配列をソートする

2次元配列をソートするには、自作でComparableインターフェースを実装することで実現できます。

記述例は次の通りです。

■記述例
import java.util.Arrays;
import java.util.Comparator;

public class Main {
  public static void main(String args[]){
    int[][] scores = {{67, 90}, {74, 81}, {69, 55}, {67, 78}, {80, 56}};
    Sort[] sort = new Sort[5];

    for (int i = 0; i < 5; i++) {
        sort[i] = new Sort(scores[i][0], scores[i][1]);
    }

    Arrays.sort(sort);
    System.out.println("---国語の成績でソートします---");

    for (int i = 0; i < 4; i++) {
      System.out.printf("国語の成績:%d 数学の成績:%d\n", sort[i].first, sort[i].second);
    }
  }

  // Comparableインターフェースを実装する
  public static class Sort implements Comparable<Sort> {
    int first, second;

    public Sort(int first, int second) {
        this.first = first;
        this.second = second;
    }

    public int compareTo(Sort num) {
      //第一要素の値が同じ場合に、第二要素で昇順にソートする処理
      if (this.first == num.first) {
        return this.second - num.second;
      } else {
        return this.first - num.first;
      }
    }
  }

}

ソートを行うために、Arrayクラスのsortメソッドを使用しました。

上記のプログラムを実行すると、次の結果を取得できます。

■実行結果
mbp:Desktop potepan$ java Main
---国語の成績でソートします---
国語の成績:67 数学の成績:78
国語の成績:67 数学の成績:90
国語の成績:69 数学の成績:55
国語の成績:74 数学の成績:81

国語の成績を基準に、意図した処理でソートできているのがわかります。

ポテパンダの一言メモ

ソートについては以下の記事でも解説していますので、あわせて確認してみてください。

【関連記事】
▶︎【Java】listの要素を並び替える ソート処理の方法について解説

2次元配列で検索する

ここでは、2次元配列で値を検索する方法を紹介します。

配列を検索するには、ArrayクラスのbinarySearchメソッドを使いましょう。

binarySearchメソッドは、ソートされた配列内の要素を検索するメソッドです。

では、サンプルを元に動きを確認してみます。

■記述例
import java.util.Arrays;

public class Main {
  public static void main(String args[]){
    int[][] scores = {{67, 90}, {74, 81}, {69, 55}, {76, 78}, {80, 56}};
    final int SEARCH_NUMBER = 69;
    int index = 0;
    int row = -1;

    for(int i = 0; i < scores.length; i++) {

      if(scores[i][0] <= scores[i][1]) {
        Arrays.sort(scores[i]);
        index =  Arrays.binarySearch(scores[i], SEARCH_NUMBER);
      } else {
        Arrays.sort(scores[i]);
        index =  Arrays.binarySearch(scores[i], SEARCH_NUMBER);

        if(index == 0) {
          index = 1;
        } else if(index == 1) {
          index = 0;
        } else {
          //
        }
      }

      if(index >= 0) {
          row = i;
          break;
      }
    }

    if(index >= 0) {
        System.out.println(String.format("Hit!  scores[%s][%s]=%s", row, index, SEARCH_NUMBER));
    } else {
        System.out.println(String.format("scores[][]に%sは存在しません", SEARCH_NUMBER));
    }
  }
}

for文の中で、binarySearchメソッドを用いて検索処理をしています。

出力の際に、元の配列の並びを再現するために、if文で条件を変えています。

上記のプログラムを実行することで、SEARCH_NUMBERで指定した値が出現する、一番最初の配列を出力します。

■実行結果
mbp:Desktop potepan$ java Main
Hit! scores[2][0]=69

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。