Powered by SmartDoc

while文

for文のような一定回数の繰り返しではなく条件によってループを制御したいときに利用する。for文によるループはwhile文で書き換えることが出来る。

フローチャートの形はfor文と同じ。

while文の書式

while文の書式は次の通り。条件式はループを継続する形にする。

while文の書式
while(条件式){
  条件成立時に処理する文
  .....
}

1から10までの整数を表示する

for文の例題にもあった1から10までの整数を表示するプログラムをwhile文では次のように書きます。for文ではループ制御の変数の初期値、繰り返し条件、増減をまとめて記述していたのでフローチャートとの対応が異なっていましたが、while文ではフローチャート通りに対応します。

while文による1から10までの整数の表示
class While01 {
    public static void main(String args[]){
        int i;

        i = 1;
        while(i <= 10){
            System.out.println(i);
            i = i + 1;
        }
    }
}

0から1までを0.1間隔で変化させ、その値を表示する

for文ではループ制御変数(カウンタ)には整数値だけしか利用できませんでしたが、while文を使えば実数を使うことが出来ます。

次のプログラムは0から1までを0.1間隔で変化させ、その値を表示する物である。

0から1までを0.1間隔で変化させ、その値を表示する。
class While02 {
    public static void main(String args[]){
        double i;

        i = 0;
        while(i <= 1){
            System.out.println(i);
            i = i + 0.1;
        }
    }
}

このプログラムを実行すると次のような結果が得られる。

0.0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999

実数も2進数として扱われるのでこのような結果になる(2)

  1. 0.1は2進数では表現できない。

合計が100を超える整数は

1から順に整数を加算していって合計が100を超える最初の整数値を探すプログラム考えてみる。

この問題の処理手順は次のように考えればよい。

  1. カウンタと合計を記憶する変数の初期値を0にする
  2. 合計が100以下の時に次の処理を繰り返す
    1. カウンタに1を加える。
    2. 合計とカウンタの値を加算する。
  3. 合計が100を超えたら繰り返し処理を終わり、カウンタの値を表示する。

上記の手順を元にフローチャートを作ると次のようになる。

合計が最初に100を超える整数を求める

プログラムは次の通り

合計が100を超える最初の整数
class FirstIntOver100 {
    public static void main(String args[]){
        int i, sum;

        i = 0;
        sum = 0;

        while(sum <= 100){
            i = i + 1;
            sum = sum + i;
        }

        System.out.println("合計が100を超える最初の整数は" + i + "です。");
    }
}

2のn乗を求める

2n を求めるには、次の手順に従えばよい。

  1. カウンターcの初期値を1に設定する
  2. かけ算の結果xを記憶する変数の初期値を1にする
  3. カウンターの値がn以下の時、次の処理を繰り返す。
    1. かけ算の結果に2を掛け、その結果を新しいかけ算の結果の値にする
    2. カウンターの値に1加算する
  4. カウンターの値がnを超えたら結果を表示する。

この手順をフローチャートにすると次のようになる。

2のn乗を求める

演習

次の各問題のプログラムをwhile文で作りなさい。

  1. 1から10までの整数のうち、偶数だけを表示する。(Guusuu.java)
  2. 1から20までの偶数の和を求める。(SumEvenW.java)
  3. 1から20までの奇数の和を求める。(SumOddW.java)
  4. 1から10までの整数の逆数を表示する。(GyakusuuW.java)
  5. 2のn乗を求める。nの値はコマンドラインから入力すること。(Power2.java)