問題1-20
mainメソッドはすでに完成しています。(変更は禁止です)
mainメソッド内で呼び出している、第一引数のint二次元配列型の値の中から、第二引数のint型の値がいくつ存在するかをカウントするcountメソッドを定義してください。
【実行結果】
1の個数:4 7の個数:3
【DoubleArrayMethodPractice.java】
public class DoubleArrayMethodPractice { public static void main(String[] args) { // int二次元配列変数の宣言と初期化 int[][] arr = {{1, 5, 8}, {2, 4, 7}, {1, 9, 3, 5}, {4, 2}, {6, 1, 9, 4}, {7, 3, 8, 1}, {8, 4, 3, 9, 7}}; // 検索する数値変数の宣言と初期化 int target = 1; // countメソッドの呼び出し System.out.println(target + "の個数:" + count(arr, target)); // 検索する数値の変更 target = 7; // countメソッドの呼び出し System.out.println(target + "の個数:" + count(arr, target)); } // ここにcountメソッドを定義してください }
解答例
【DoubleArrayMethodPractice.java】
public class DoubleArrayMethodPractice { public static void main(String[] args) { // int二次元配列変数の宣言と初期化 int[][] arr = {{1, 5, 8}, {2, 4, 7}, {1, 9, 3, 5}, {4, 2}, {6, 1, 9, 4}, {7, 3, 8, 1}, {8, 4, 3, 9, 7}}; // 検索する数値変数の宣言と初期化 int target = 1; // countメソッドの呼び出し System.out.println(target + "の個数:" + count(arr, target)); // 検索する数値の変更 target = 7; // countメソッドの呼び出し System.out.println(target + "の個数:" + count(arr, target)); } // ここにcountメソッドを定義してください // countメソッドの定義 public static int count(int[][] arr, int target) { // カウント変数の宣言と初期化 int count = 0; // 配列の走査(1次元目) for(int i = 0; i < arr.length; i++) { // 配列の走査(2次元目) for(int j = 0; j < arr[i].length; j++) { // 検索する数値が見つかった場合 if(arr[i][j] == target) { // カウント変数のインクリメント count++; } } } return count; } }
解説
今回の問題は二次元配列(Javaでは配列の配列)とメソッド定義を組み合わせた内容です。
まずはメソッド定義の引数と戻り値の型をきちんと記述できたでしょうか。
public static int count(int[][] arr, int target) {
問題文にもあるように、第一引数はint型、第二引数はint型です。
戻り値の型に関しては問題文に記述がありませんが、数を数えるわけですからシンプルに考えてint型になります。
配列のすべての要素を走査する場合、普通の配列(いわゆる一次元配列)ならfor文がひとつ、二次元配列ならfor文をネストしてふたつ記述します。
三次元以上でも発想は同じになります。
拡張for文をネストして記述することも可能です。
拡張for文を使うと以下のようなプログラムになります。
// 配列の走査(1次元目) for(int[] x : arr) { // 配列の走査(2次元目) for(int y : x) { // 検索する数値が見つかった場合 if(y == target) { // カウント変数のインクリメント count++; } } }
参考図書
LINE公式アカウント
仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】