問題1-19
int二次元配列型の変数arrが宣言されています。
すべての要素を順番に表示するプログラムを、for文を使って記述してください。
次に、すべての要素を逆順に表示するプログラムを、for文を使って記述してください。
【実行結果】
112233445566778899 998877665544332211
【DoubleArrayBasicPractice.java】
public class DoubleArrayBasicPractice { public static void main(String[] args) { // int2次元配列型変数arrの宣言と初期化 int[][] arr = {{11, 22, 33}, {44}, {55, 66}, {77, 88, 99}}; // 配列のすべての要素を順に表示してください System.out.println(); // 配列のすべての要素を逆から表示してください } }
解答例
【DoubleArrayBasicPractice.java】
public class DoubleArrayBasicPractice { public static void main(String[] args) { // int2次元配列型変数arrの宣言と初期化 int[][] arr = {{11, 22, 33}, {44}, {55, 66}, {77, 88, 99}}; // 配列のすべての要素を順に表示してください for(int i = 0; i < arr.length; i++) { for(int j = 0; j < arr[i].length; j++) { System.out.print(arr[i][j]); } } System.out.println(); // 配列のすべての要素を逆から表示してください for(int i = (arr.length -1 ); i >= 0; i--) { for(int j = (arr[i].length -1); j >= 0; j--) { System.out.print(arr[i][j]); } } } }
解説
今回の問題のタイトルは「二次元配列の問題」ですが、正確に言えばJavaに二次元配列はありません。
Excelの表のような二次元的イメージはつかみやすいですが、Javaの場合それは「配列の配列」、つまり配列オブジェクトの各要素がまた配列オブジェクトを指す関係になります。
今回出てきた配列は次のようなものでした。
int[][] arr = { {11, 22, 33}, {44}, {55, 66}, {77, 88, 99} };
配列とは、ある型のデータをまとめて管理するための仕組みですが、Javaの二次元配列は複数の「配列型」をさらにまとめて「配列型」として管理しているわけです。
今回は順に表示するバージョンと、逆順に表示するバージョンの2パターンがありました。
順に表示するバージョンでは、下記のように拡張for文を使用できます。
// 配列のすべての要素を順に表示 for(int[] x : arr) { for(int y : x) { System.out.print(y); } }
arrはint型ですから、ひとつの要素をint型のxとして受け取ります。
さらにxはint型ですから、ひとつの要素をint型のyとして受け取り出力しています。
残念ながら、逆順バージョンは拡張for文で表現できません。
配列を通常のfor文で走査するときに一番のポイントは、必ずlengthフィールドを使用し、マジックナンバーを使用しないことです。
// 配列のすべての要素を順に表示 for(int i = 0; i < arr.length; i++) { for(int j = 0; j < arr[i].length; j++) { System.out.print(arr[i][j]); } }
最初のfor文のarr.length
は、int[]型の値がいくつあるかを表現し、ネストされたfor文のarr[i].length
はその各要素のint[]型の値がいくつint型の値を持っているかを表現しています。
多次元配列をfor文で回すときの基本となる記述なので、しっかりマスターしてください。
参考図書
LINE公式アカウント
仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】