問題1-17
mainメソッドはすでに完成しています。(変更は禁止です)
mainメソッド内で呼び出している、引数で渡ってくるint配列オブジェクトの各要素の中から最大のものを選んで戻り値として返すmaxメソッドを定義してください。
(ただし、すべての値は正の数とします)
【実行結果】
配列の最大値:1010
【ArrayMethodPractice2.java】
public class ArrayMethodPractice2 { public static void main(String[] args) { int[] arr = {43, 2, 765, 234, 908, 115, 32, 476, 938, 65, 93, 47, 102, 735, 529, 1010, 639, 660, 182, 908}; // maxメソッドの呼び出し System.out.println("配列の最大値:" + max(arr)); } // ここにmaxメソッドを定義してください }
解答例
【ArrayMethodPractice2.java】
public class ArrayMethodPractice2 { public static void main(String[] args) { int[] arr = {43, 2, 765, 234, 908, 115, 32, 476, 938, 65, 93, 47, 102, 735, 529, 1010, 639, 660, 182, 908}; // maxメソッドの呼び出し System.out.println("配列の最大値:" + max(arr)); } // ここにmaxメソッドを定義してください public static int max(int[] arr) { // 最大値格納用変数の宣言と初期化 int maxValue = 0; // 配列の走査 for(int i = 0; i < arr.length; i++) { // 配列要素が最大値変数より大きい場合 if(arr[i] > maxValue) { // 配列要素で上書きする maxValue = arr[i]; } } return maxValue; } }
解説
今回も引数に配列オブジェクトを受け取るメソッドを定義する基本的な問題です。
前回と同様、引数のnullチェックは省略しています。
最大値を保存するためのローカル変数maxValueを宣言し、0で初期化している点がポイントです。
問題文に「すべての値は正の数とします」という一文がありますので、取り得る最大値の中で最も小さい数「0」で初期化しています。
このmaxValue変数は、いわば暫定の最大値なわけですから、配列を走査して、その最大値より大きい配列要素が見つかれば、最大値を入れ替えて(代入)していくことになります。
最終的にfor文終了時点でmaxValue変数に格納されている値が配列要素の中で一番大きな値になります。
もちろん、前回の問題と同様に拡張for文を用いて、次のように記述しても問題ありません。
for(int value : arr) { // 配列要素が最大値変数より大きい場合 if(value > maxValue) { // 配列要素で上書きする maxValue = value; } }
参考図書
LINE公式アカウント
仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】