・   「Java入門編」実習 第4回

まとめ(Javaの文法とアルゴリズム)

前期のまとめとして、Javaの文法とアルゴリズムについて復習しましょう。


・ 準備1(学内向け):
Linux, Windows 2000いずれの環境でもかまいません。 端末エミュレータのウィンドウを開きなさい。 各自のJavaの課題の作業用のディレクトリ java に移動しなさいなさい。 その中で以下の作業を行いなさい。


・ 基本課題1:「合計を求めるアルゴリズム」
int型の整数値の配列の合計を計算する staticなメソッドを提供するクラスを作ります。

  1. ソースファイル Goukei.java を作成しなさい。
  2. javac コマンドでコンパイルをしなさい。
  3. 実行結果を確認しなさい。

・ 基本課題2:「平均値を求めるアルゴリズム」
int型の整数値の配列の平均値(float型)を計算する staticなメソッドを提供するクラスを作ります。

  1. ソースファイル Heikin.java を完成させなさい。
  2. javac コマンドでコンパイルをしなさい。
  3. 実行結果を確認しなさい。

・ 基本課題3:「最大値を求めるアルゴリズム」
int型の整数値の配列の最大値を捜す staticなメソッドを提供するクラスを作ります。

  1. ソースファイル Saidai.java を完成させなさい。
  2. javac コマンドでコンパイルをしなさい。
  3. 実行結果を確認しなさい。

・ 基本課題4:「最小値を求めるアルゴリズム」
int型の整数値の配列の最小値を捜す staticなメソッドを提供するクラスを、 課題3を参考にして作ってください。

  1. ソースファイル名は Saisyou.java としなさい。
  2. 課題1から3までと同様に、 内部に確認用の staticなフィールドと main()メソッドを用意しなさい。
  3. javac コマンドでコンパイルをしなさい。
  4. 実行結果を確認しなさい。

・ 基本課題5:「アルゴリズムの利用」
キーボードから入力されたデータの 個数、合計、平均値、最大値、最小値を求めて表示します。

  1. ソースファイル ToukeiTest.java を完成させなさい。
  2. javac コマンドでコンパイルをしなさい。
  3. 以下のようにして実行結果を確認しなさい。

$ java ToukeiTest
*** >> の後に整数のデータを入力してください ***
*** quit または exit を入力すると終了します ***
>> 78
データ数:1,合計値:78,平均値:78.0,最大値:78,最小値:78
>> 33
データ数:2,合計値:111,平均値:55.5,最大値:78,最小値:33
>> 64
データ数:3,合計値:175,平均値:58.333332,最大値:78,最小値:33
>> 99
データ数:4,合計値:274,平均値:68.5,最大値:99,最小値:33
>> 13
データ数:5,合計値:287,平均値:57.4,最大値:99,最小値:13
>> 8
データ数:6,合計値:295,平均値:49.166668,最大値:99,最小値:8
>> quit


・ 今週のレポート課題(学内用):
ここまでの課題が終わった人は、下記の項目を tatsuo宛のメール で報告しなさい。(Subjectは program10)

  1. 課題1から4で得られた テスト用のデータの合計、平均値、最大値、最小値

・ 応用課題1:「ソートのアルゴリズム」
最も単純なソートのアルゴリズムによる staticなメソッドを提供するクラスを作ります。

  1. ソースファイル SimpleSort.java を作成しなさい。
  2. javac コマンドでコンパイルをしなさい。
  3. 実行結果を確認しなさい。

・ 応用課題2:「バブルソートのアルゴリズム」
バブルソートのアルゴリズムによる staticなメソッドを提供するクラスを作ります。

  1. ソースファイル BubbleSort.java を作成しなさい。
  2. javac コマンドでコンパイルをしなさい。
  3. 実行結果を確認しなさい。

・ 応用課題3:「クイックソートのアルゴリズム」
クイックソートのアルゴリズムによる staticなメソッドを提供するクラスを作ります。

  1. ソースファイル QuickSort.java を作成しなさい。
  2. javac コマンドでコンパイルをしなさい。
  3. 実行結果を確認しなさい。

・ 応用課題4:「マージソートのアルゴリズム」
マージソートのアルゴリズムによる staticなメソッドを提供するクラスを作ります。

  1. ソースファイル MergeSort.java を作成しなさい。
  2. javac コマンドでコンパイルをしなさい。
  3. 実行結果を確認しなさい。

・ 応用課題5:「ソートのアルゴリズムの比較」
適当な個数のサンプルを自動生成させ、ソートのアルゴリズムのテストをします。

  1. ソースファイル SortTest.java を作成しなさい。
  2. javac コマンドでコンパイルをしなさい。
  3. 次のように引数を与えてみて、実行結果を確認しなさい。

java SortTest s 10
java SortTest b 10
java SortTest q 10
java SortTest m 10

・ 応用課題6:「ソートの速度の比較」
配列のサイズを大きくしていった時、それぞれのアルゴリズムの処理速度 がどう変わるか調べます。

  1. この課題は Linuxの環境で行ってください。
    コマンドの処理の時間を調べるコマンド time を使用します。
    標準出力への表示は行わないように /dev/null にリダイレクトします。
    次のように引数を与えてみて、実行結果を確認します。
  2. それぞれのアルゴリズムについて、データ数が 100個、1000個、10000個、100000個 でどのくらいの差が生じるか調べなさい。
    また、ソートを実行しないオプション(d)で、ソート以外の処理でどの程度の 時間が消費されているかも調べ、比較に利用しなさい。
    既存のSDKのクラスライブラリにある java.util.Arraysクラスによって 提供される sort()メソッドとも比較してみなさい。

time java SortTest d 100 > /dev/null
time java SortTest s 100 > /dev/null
time java SortTest b 100 > /dev/null
time java SortTest q 100 > /dev/null
time java SortTest m 100 > /dev/null
time java SortTest j 100 > /dev/null


・ おまけのレポート課題(学内用):
応用課題ができた人は、下記の項目を tatsuo宛のメール で報告しなさい。(Subjectは ouyou10)

  1. 100000個の要素を持つint型の配列のソートの計算にかかった時間を 4つのソートにアルゴリズム、 SDKのjava.util.Arraysのsort()に対して求め、比較しなさい。

実習の目次   今週の講義の内容