課題 (03:ベーシック)

作業について

今回の課題は以下のパッケージに作成してください。

パッケージの名前
j1.lesson03

作成するクラスの名前は問題ごとに指示があります。下記を参照してください

課題の提出方法については下記を参照してください。

また、別のコンピューター上に移動する際には、下記を参考にプログラムを持ち帰ってください。

問題

1. elseの効果 (考察課題)

作成するファイルの名前
GradingError.txt

ファイルの作成方法については下記を参照してください。

0点から100点までの得点を入力して、範囲外なら「範囲外の得点です」、60点未満なら「不合格です」、60点以上なら「合格です」、80点以上ならさらに「すばらしい成績ですね」、と表示するプログラムを書きましたが、正しく動作しません。

package j1.lesson03;

import javax.swing.JOptionPane;

public class GradingError {

    public static void main(String[] args) {
        new GradingError().start();
    }

    void start() {
        String input = JOptionPane.showInputDialog("得点は?");
        int score = Integer.parseInt(input);
        if (score < 0 || score > 100) {
            JOptionPane.showMessageDialog(null, "範囲外の得点です");
        }
        if (score < 60) {
            JOptionPane.showMessageDialog(null, "不合格です");
        }
        if (score < 80) {
            JOptionPane.showMessageDialog(null, "合格です");
        }
        else {
            JOptionPane.showMessageDialog(null, "合格です");
            JOptionPane.showMessageDialog(null, "すばらしい成績ですね");
        }
    }
}

以下の問題に答えて下さい。

  1. どんな入力をすると正しく動作しないでしょうか、1つ挙げて下さい
  2. なぜそのような表示になるのでしょうか
  3. どのように修正すれば正しい動作になるでしょうか

2. Javaのクイズ

作成するクラスの名前
JavaQuiz

Javaを題材にした4択のクイズを出題するプログラムを作成してください。

なお、解答は1から4までの整数を入力する形式とし、正解の場合には「正解です」、不正解の場合には「不正解です」、選択肢にない場合には「無効な値です」と表示されるようにしてください。

問題が思いつかない場合には、下記のような問題を出題してください (正解は自分で確認してください)。

以下のうち、変数の名前に使えるものはどれでしょうか?
(1) void
(2) goto
(3) $
(4) #

3. 3つの中から最大のものを判定するプログラム。

作成するクラスの名前
Max3

Alice, Bob, Charleyの3人でゲームを行いました。3人の得点で一番高かった人を判定するプログラムを書きましたが、正しく動作しません。一番得点が高い人を表示するようにプログラムを修正してください。

package j1.lesson03;

import javax.swing.JOptionPane;

public class Max3 {

    public static void main(String[] args) {
        new Max3().start();
    }

    void start() {
        String inputAlice = JOptionPane.showInputDialog("Aliceの得点は?");
        String inputBob = JOptionPane.showInputDialog("Bobの得点は?");
        String inputCharley = JOptionPane.showInputDialog("Charleyの得点は?");
        int alice = Integer.parseInt(inputAlice);
        int bob = Integer.parseInt(inputBob);
        int charley = Integer.parseInt(inputCharley);
        if (alice > bob) {
            JOptionPane.showMessageDialog(null, "Aliceが一番");
        }
        else if (bob > charley) {
            JOptionPane.showMessageDialog(null, "Bobが一番");
        }
        else {
            JOptionPane.showMessageDialog(null, "Charleyが一番");
        }
    }
}

なお、同点の人がいる場合については考えないで構いません。余力があれば同点も検出して表示できるようにしてください。

ヒント

「a > b > c」のようには書けないがこれは「a > b かつ b > c」と同じ。

4. 疑似乱数

作成するクラスの名前
Random

コンピュータの世界には「疑似乱数」という考え方があります。乱数とは「次の値が予測できない数値」のことですが、コンピュータで完全に予測できない数列を生成するのは困難なので、「疑似」乱数というように呼ばれています。この課題では、疑似乱数を利用したゲームを作ります。

Javaで疑似乱数を生成する場合には Math.random() というものを使います。これは次のように、実数リテラルの代わりに使えます。

double random = Math.random();

上記のように書いた場合、変数randomには0.0以上1.0未満の実数が代入されます。また、この値はほぼ一様に分布することになっているので、次のように書くと「1/3の確率で~」といったような処理を実現できます。

double random = Math.random() * 3;
if (random < 1.0) {
}
else if (random < 2.0) {
}
else {
}

最初に3倍しているのは、生成した疑似乱数を0.0以上3.0未満の範囲に調整するためです。すると、

  • 「0.0以上1.0未満」、
  • 「1.0以上2.0未満」、
  • 「2.0以上3.0未満」、

はそれぞれほぼ同じ確率(1/3)になります。

この疑似乱数を利用したゲームを考え、プログラムを作成してください。ゲームが思いつかない場合には、コンピュータとじゃんけんで勝負するようなゲームを作成してください。