多次元配列

配列の要素が二方向に連続して並んでいるものを2次元配列と呼びます(二方向に連続したインデックスによってアクセスできるということであり、実際のメモリ領域では二方向にはなりません)。「配列の配列」と表現することができ、1次元配列の各要素が1次元配列を持っているような構造になります。下図は2次元配列の概念図です:

多次元配列

多次元配列の宣言

整数を記録する2次元配列変数は次のように宣言・初期化します。

型[][] 配列変数名 = new int[縦方向のサイズ][横方向のサイズ];

サイズには、各方向の配列の要素の数を示し、[   ] の中に整数値の定数を指定します。例えば、縦方向のサイズが 5、横方向のサイズが 7 の2次元配列は以下のように宣言します:

int[][] month = new int[5][7];

1つ目の方向の1要素について、2 つ目の方向のサイズ分だけ要素があります。new int[5][7]では、合計 5 × 7 = 35 の要素が確保されます。

多次元配列へのアクセス

上記2次元配列変数 month において、縦方向のインデックスが 3、横方向のインデックスが 1 である要素にアクセスするには month[3][1] と記述します。例:

int[][] month = new int[5][7];
int value;
month[1][5] = 3;
month[3][1] = 7;
month[4][6] = 0;
value = month[3][1]; // value の値は7

文字の扱いについて

この問題では、文字を入力で扱うため、文字の変数や入力について簡単に補足をします。文字や文字列の詳細についてはITP1_8以降で詳しく解説します。

文字はchar型の変数で管理します。ここでは、文字と整数の組を読み込む方法を考えます。Scannerでは、nextメソッドで1つの文字列(String)を入力することができます。ここでは、入力した文字列の最初の文字を取り出すことで、対象の文字を記録します。例えば、空白で区切られた文字と整数の組を入力するコードは以下のようになります。

Scanner sc = new Scanner(System.in);
char ch = sc.next().charAt(0);
int x = sc.nextInt();

文字をコードにそのまま記述する場合は、' ' (シングルコーテーション)でくくります。例えば、文字変数 ch の内容が文字'S'であるかどうかを判定するコードは次のようになります。

if ( ch == 'S' ){
  System.out.println("This is Spade.");
}

Reference

 

オンラインジャッジではじめるC/C++プログラミング入門 (マイナビ)

AIZU ONLINE JUDGE のコース問題を題材にした解説書です。各トピックごとに C/C++ 言語の基礎的な内容を学習し、Introduction to Programming の演習問題にチャレンジしていきます。内容は敷居の高いものではなく、プログラミング初学者が取り組む例題からスタートしています。