はじめに
基礎的なアルゴリズムをJavaで実装していきます。
今回は 「配列中の最大値検索」 です。
配列中の最大値検索
目的:
カンマ区切りの複数の数値を受け取り、その中で最も大きい数値を検索します。
手段:
「配列に格納した値を先頭から1つずつ取り出して比較し、前より値が大きければ戻り値を更新する。
配列の最後の値を比較し終わった時点で戻り値に入っている値が、その配列の最大値になる。」というアルゴリズムです。
設計
カンマ区切りの値を1つ1つ配列に格納するために split()
を使っています。
また、1行単位で標準入力を読み込んだ場合String型になるので、それをint型に変換する処理を挟んでいます。(数値の大小比較をしたいため)
ソース
フォルダ構成
ソースコード
main.java
package main;
import process.MaxSearch;
public class Main {
public static void main(String[] args) {
// 配列中の最大値検索クラスをインスタンス化して処理をスタート
MaxSearch maxSearch = new MaxSearch();
maxSearch.MaxSearchStarter();
}
}
MaxSearch.java
package process;
import java.util.Scanner;
// 配列中の最大値検索
public class MaxSearch {
public void MaxSearchStarter() {
Scanner sc = new Scanner(System.in);
System.out.println("カンマ区切りの数値を入力してください。");
String input = sc.nextLine();
sc.close();
// 受け取った値をカンマで分割して配列(String型)に格納する
String[] values = input.split(",");
// int型に変換して別の配列に格納しなおす
int[] intValues = new int[values.length];
for (int i = 0; i < values.length; i++) {
intValues[i] = Integer.parseInt(values[i].trim());
}
// 入力値(int型)を格納した配列をMaxSearchExec()に渡し、その中の最大値を受け取る
int result = MaxSearchExec(intValues);
System.out.println("入力した配列中の最大値は\"" + result + "\"です。");
}
protected int MaxSearchExec(int[] values) {
int Ans = values[0];
for (int i = 1; i < values.length; i++) {
if (values[i] > Ans) {
Ans = values[i];
}
}
return Ans;
}
}
実行
おわりに
アルゴリズム実装3本目でした。
配列の中身をint型に直すところはもっと効率的な書き方ができそうな気がします。
良いアイデアがあったらコメントで教えて下さい。
参考図書
基本情報技術者試験のアルゴリズム問題がちゃんと解ける本 第2版 [矢沢 久雄]
その他の記事リンク