条件に応じて処理を変える。

そしてその判断を決して間違えない。

これもコンピュータの特徴といってよいでしょう。

ここでは、条件分岐の方法を学びます。

以下のプログラムを作成しなさい。

(チームで、ホワイトボードを使い、方針を決めてからプログラミングを始めること)

なお、乱数を発生させるには、Math.random()を使うこと。

例えば、次のようにすれば0から100までの整数値が取得できる。

int score = (int) (Math.random() * 101);

1.if文

テストの点数が80点以上かどうかを判定したい。

0から100までの乱数を発生させ、その値を点数として表示し、80点以上なら「合格です」と表示し、80点未満なら何も表示しないプログラムを作成しなさい。

なお、IDEのコードテンプレート機能はできるだけ使用すること。(以降同様)

(出力例1:合格ケース)

点数:91
合格です

(出力例2:不合格ケース)

点数:36

2.if..else if文①

テストの点数ごとに評価をしたい。

0から100点までの乱数を発生させ、点数に応じて

「19点以下です」

「点数は20点以上49点以下です」

「点数は50点以上79点以下です」

「点数は80点以上です」

と表示するプログラムを作成しなさい。

3.if..else if文②

BMIとは Body Mass Index の略であり次の計算式で求められる。

BMI = [体重(kg)]÷[身長(m)の2乗] ※身長の単位がメートルであることに注意!

あなたの身長と体重からBMIの判定をするプログラムを作成しなさい。(サバ読み可)

日本肥満学会の定めた基準では

18.5未満が「低体重(やせ型)」

18.5以上25未満が「普通体重」

25以上が「肥満」と分類される。

日本肥満学会

(出力例)

普通体重です

4.switch文

おみくじプログラムを作成したい。

おみくじのルール:0から100までの乱数を発生させ、その値を9で割り

余りが0のとき:「大吉です」

余りが1または2のとき:「中吉です」

余りが3または4または5のとき:「小吉です」

余りが6または7のとき:「凶です」

余りが8のとき:「大凶です」

と表示させるプログラムを作成しなさい。

ただし、条件分岐にはswitch文を使うこと。

5.三項演算子

意思決定システムを作りたい。

あなたが今、意思決定を迫られていることに関して、あなたに代わって意思決定してくれるシステムである。

乱数を発生させて、ちょうど2分の1の確率で「YES」、2分の1の確率で「NO」と表示するプログラムを作成しなさい。

なお、三項演算子を使用すること。

(出力例1)

YES

(出力例2)

NO

6.論理演算子

うるう年の判定ができるプログラムを作成したい。

任意の年を設定し、その年がうるう年か否かを表示するプログラムを作成しなさい。

なお、うるう年とは、1年を366日とする年のことである。

また、うるう年の判定は以下の記述を参考にすること。

  1. 4の倍数の年は閏年とする
  2. ただし100の倍数の年は閏年にしない
  3. なお特別に400の倍数の年は閏年にする※

論理演算子を使用すること。

(出力例1)

西暦2100年はうるう年ではありません。

(出力例2)

西暦2400年はうるう年です。

※これはグレゴリオ暦では1太陽年を365.2425日として暦を作っているためである。

このデータを基礎にすれば閏年のない暦の400年間は実際より97日(=0.2425×400)短くなってしまうので、それを先のやり方で補正している。

「寄り道の多い数学」(大沢 健夫著)より

 

7.結果の予想①

以下のプログラムを実行したら何が出力されるか?また、それはなぜか説明しなさい。

package p04;

public class Q07 {

    public static void main(String[] args) {
        double num1 = 0.1;
        double num2 = 0.2;
        double num3 = num1 + num2;
        if (num3 == 0.3) {
            System.out.println("The same");
        } else {
            System.out.println("Not the same");
        }
        num1 *= 10;
        num2 *= 10;
        num3 = num1 + num2;
        if (num3 == 3) {
            System.out.println("The same");
        } else {
            System.out.println("Not the same");
        }
    }
}

8.結果の予想②

以下のプログラムを実行したら何が出力されるか?また、それはなぜか説明しなさい。

package p04;

public class Q08 {

    public static void main(String[] args) {
        char bloodType = 'A';
        switch (bloodType) {
            case 'A':
                System.out.println("慎重な性格");
            case 'B':
                System.out.println("大胆な性格");
            case 'O':
                System.out.println("おおらかな性格");
        }
    }
}

9.結果の予想③

以下のプログラムはある新入社員が作成した上記2.のプログラムの内容である。

論理エラーを見つけ、指摘し、修正しなさい。

なお、デバッガを使いscoreの値を直接書き換えることを試してみること。

package p04;

public class Q09 {

    public static void main(String[] args) {
        int score = (int) (Math.random() * 101);
        System.out.println(score);
        if (score <= 49) {
            System.out.println("点数は20点以上49点以下です");
        } else if (score <= 19) {
            System.out.println("19点以下です");
        } else if (score <= 79) {
            System.out.println("点数は50点以上79点以下です");
        } else {
            System.out.println("点数は80点以上です");
        }
    }
}

10.オリジナル問題作成

将来の後輩のために良い問題が出来たら教えてください。

以上。

JavaSEの問題集トップページに戻る