解答例 - j1.lesson11.LinearSearch

package j1.lesson11;

import java.io.*;

/**
 * 課題1102 - 解答例.
 @author s.arakawa
 @version $Id: LinearSearch_java.rps,v 1.1 2006/03/06 12:56:14 java2005 Exp $
 */
public class LinearSearch {

    /**
     * コンソールから整数を次々と入力させ、その中から特定の整数を探すプログラム。
     * 以下の擬似コードで表される。
     <pre>
     * プログラム全体
     *     print &quot;要素数を入力:&quot;
     *     count = コンソール入力 (整数)
     *     if count が負の値
     *         print &quot;要素数には0以上の値を指定してください&quot;
     *         プログラムの終了
     *     values = 要素数が count の新しい配列 (int[])
     *     for i を 0 から values の長さ - 1 まで
     *         print &quot;要素を入力:&quot;
     *         values[i] = コンソール入力 (整数)
     *     print &quot;探す要素を入力:&quot;
     *     target = コンソール入力 (整数)
     *     index = search(values, target)
     *     if index が -1
     *         print &quot;見つかりませんでした&quot;
     *     else
     *         print &quot;index番目に入力されました&quot;
     </pre>
     @param args 無視される
     @throws IOException 入力時に例外が発生した場合
     */
    // プログラム全体
    public static void main(String[] argsthrows IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        // print "要素数を入力:"
        System.out.print("要素数を入力:");

        // count = コンソール入力 (整数)
        int count = Integer.parseInt(reader.readLine());

        // if count が負の値
        if (count < 0) {
            // print "要素数には0以上の値を指定してください"
            System.out.println("要素数には0以上の値を指定してください");

            // プログラムの終了
            return;
        }

        // values = 要素数が count の新しい配列 (int[])
        int[] values = new int[count];

        // for i を 0 から values の長さ - 1 まで
        for (int i = 0; i < values.length; i++) {
            // print "要素を入力:"
            System.out.print("要素を入力:");

            // values[i] = コンソール入力 (整数)
            values[i= Integer.parseInt(reader.readLine());
        }

        // print "探す要素を入力:"
        System.out.print("探す要素を入力:");

        // target = コンソール入力 (整数)
        int target = Integer.parseInt(reader.readLine());

        // index = search(values, target)
        int index = search(values, target);

        // if index が -1
        if (index == -1) {
            // print "見つかりませんでした"
            System.out.println("見つかりませんでした");
        }
        // else
        else {
            // print "index番目に入力されました"
            System.out.println(index + "番目に入力されました");
        }
    }

    /**
     * 指定された要素が配列内で最初に検出された位置の要素番号を返し、
     * 指定された要素が配列にない場合は -1 を返す。
     * 以下の擬似コードで表される。
     <pre>
     * search(array, value)
     *     for i を 0 から array の長さ -1 まで
     *         if array[i] と value が同じ
     *             i の値を返す
     *     -1 を返す
     </pre>
     @param array 検索対象の配列
     @param value 探す値
     @return 指定された要素が配列内で最初に検出された位置の要素番号、または -1
     */
    public static int search(int[] array, int value) {
        // for i を 0 から array の長さ -1 まで
        for (int i = 0; i < array.length; i++) {
            // if array[i] と value が同じ
            if (array[i== value) {
                // i の値を返す
                return i;
            }
        }
        // -1 を返す
        return -1;
    }
}