・   「Java入門編」 第8回

6:繰り返しの処理の記述(その2)

「繰り返し(loop)」の構造について詳しく練習します。 do-whileのループ、break文、continue文のの役割などにも触れます。


・ 準備:

  1. LinuxもしくはWindowdsの環境でログインしなさい。
  2. 作業のための端末エミュレータのウィンドウを開きなさい。
  3. ホームディレクトリの下の Javaの作業用のディレクトリ java の中に移動しなさい。

・ 基本課題1:「whileループの復習」

  1. 前回の課題で作成したソースファイル WhileTest2.java の内容を確認しなさい(存在しない人は新たに作成しなさい。
  2. java コマンドを通じて何度かプログラムを実行して結果を確認しなさい。

・ 基本課題2:「do - while形式のループ」
Javaには、do - while の形式のループも用意されています。 この形式も、条件判定の前にデータ処理を行う必要がある場合に便利です。 do-whileのループでは、繰り返しの条件判定はブロックの最後で行われるため、 必ず最低1回はブロック内の処理が実行されます。

  1. ソースファイル WhileTest4.javaを作成しなさい。
  2. javac コマンドでコンパイルをしなさい。
  3. java コマンドを通じてプログラムを実行しなさい。
  4. 課題1で見たプログラムと同じ結果が、より簡単な記述のプログラムで実現されている ことを確認してください。

・ 基本課題3:「無限ループとbreak」
条件判定が常に trueとすると、無限に処理を繰り返すことになります。 普通は、特別な条件を満たすとループを強制的に脱出できるように、 break文とともに使用します。
この場合も、効果的に breakを使用することで課題1のプログラムに比較して 理解しやすいものになっています。

  1. ソースファイル WhileTest5.javaを作成しなさい。
  2. javac コマンドでコンパイルをしなさい。
  3. java コマンドを通じてプログラムを実行しなさい。
  4. 課題1:と同じ結果が得られことを確認しなさい。

・ 基本課題4:「無限ループとbreak(2)」
無限ループの記述はforでも可能です。 forの場合は、3つの式のいずれか、あるいはすべてを省略することもできます。

  1. ソースファイル ForTest4.javaを作成しなさい。
  2. javac コマンドでコンパイルをしなさい。
  3. java コマンドを通じてプログラムを実行しなさい。
  4. 課題3:と同じ結果が得られことを確認しなさい。

・ 基本課題5:「continueの使用」
continue文は break文に似た使い方をしますが、 ループの外に脱出するのではなく、 単に処理を途中で打ち切って繰り返し処理の先頭に戻ります。

  1. ソースファイル WhileTest6.javaを作成しなさい。
  2. javac コマンドでコンパイルをしなさい。
  3. java コマンドを通じてプログラムを実行しなさい。
  4. 課題1から4までの時と結果に違いが生じるはずです。どんな違いがありましたか?

・ メールによるレポート課題: 以下の結果を tatsuo宛のメール で知らせてください。 件名(Subject)は java9

  1. 学籍番号と氏名
  2. Javaにおける break の働きについて簡単に説明しなさい。

・ 応用課題1:「二重ループの応用」
素数(自分自身と1でしか割り切れない数)を求めるプログラムを考えてみましょう。 まず、単純に自分より小さいすべての数に対して割り切れるかどうかチェックし、 約数が2個のみの場合に出力することにします。 最初は2から20までの数の範囲で実行し、 プログラムが正しく動作することを確認してください。

  1. ソースファイル PrintPrime.javaを作成しなさい。
  2. javac コマンドでコンパイルをしなさい。
  3. java コマンドを通じてプログラムを実行しなさい。

・ 応用課題2:「処理の効率を高める工夫」
上のプログラムは正しい結果を表示しますが、多少無駄な部分があります。 素数のみをすばやく求めるように改良してみましょう。

  1. ソースファイル PrintPrime2.javaを作成しなさい。
  2. javac コマンドでコンパイルをしなさい。
  3. java コマンドを通じてプログラムを実行しなさい。
  4. このプログラムはどのような点で無駄を省いているか考えなさい。 また、確かに正しい結果を表示することも確認しなさい。

・ 応用課題3:「処理の効率の比較」
計算量が少ない時は問題ありませんが、大きな数を多数処理する場合にプログラムの 効率が問題となってきます。

  1. ソースファイル PrintPrime.java の一部を書き直して、 10000000 から 10001000 の範囲の素数を表示するようにしなさい。
  2. 同じく、ソースファイル PrintPrime2.java の一部を書き直して、 10000000 から 10001000 の範囲の素数を表示するようにしなさい。
  3. 両方のプログラムを javac コマンドでコンパイルし直しなさい。
  4. 両方のプログラムを java コマンドで実行し、その処理速度を比較しなさい。

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