練習問題

本日の残りの時間で,次に挙げる練習問題を順に作成してください.

1. Big & Small

0から1までの Double 型の乱数を発生させ,その値が0.5より小さければ Small,0.5以上であれば Big と出力するプログラムを作成してください. 0以上1未満の Double 型の乱数は,次のコードで得られます.

public class BigAndSmall{
    public static void main(String[] args){
        Double value = Math.random();
        // valueには0から1の乱数が代入されている.
        System.out.printf("value: %f: ", value);

        // ここに判定のプログラムを書いていく.
    }
}

実行すると,そのときの value の値と Big もしくは Small の文字列が出力されます.

乱数発生方法

0以上1未満の Double 型の乱数は,次の1行で得られます.

Double value = Math.random();

出力例

以下の出力例と同じ結果は出ませんが,条件に示したように,value の値が0.5より小さいか,以上かで判定できているかを確認してください.

$ java BigAndSmall
value: 0.327039: Small
$ java BigAndSmall
value: 0.582704: Big
$ java BigAndSmall
value: 0.239037: Small
$ java BigAndSmall
value: 0.304460: Small

2. 四則演算

2つの変数の四則演算+剰余を求めるプログラムを作成しましょう.

  1. クラス名は,Operators とする.
  2. main メソッドを用意する.
  3. main メソッド内で Integer 型の変数 value1value2 を宣言する.初期値は適当に与える.
  4. value1value2 の和算(+)の結果を出力する.
  5. value1value2 の減算(-)の結果を出力する.
  6. value1value2 の乗算(*)の結果を出力する.
  7. value1value2 の除算(/)の結果を出力する.
  8. value1value2 の剰余(%)の結果を出力する.
  9. 以上の出力には,計算式も含めること.
    • 出力には,System.out.printlnSystem.out.printSystem.out.printf のいずれかを利用すること.

変数の宣言は,C言語と同じように,型 変数名;の順に書きます. 変数への値代入もC言語と同じように=を利用します. また,Javaでも,変数は利用する前に宣言しなければいけません.

出力例

$ java Operators
2+4=6
2-4=-2
2*4=8
2/4=0
2%4=2

value1value2 に代入する値を変更すると,結果も変わることを確認しましょう.

ヒント

  • % という文字を System.out.printf で表示するには %% としましょう.

3. うるう年の判定

与えられた年がうるう年であるか否かを判定しましょう. うるう年は,次のように判定します.

  • 西暦で表される年が 4 で割り切れたらうるう年である.
  • ただし,そのうち,100で割り切れる年はうるう年ではない.
  • ただし,さらに,400で割り切れる年はうるう年である.

次のようなフローチャートになります.

うるう年判定のフローチャート

public class LeapYear{
    public static void main(String[] args){
        Integer year = 2016;
        Boolean leapYear = false;
        // ここに判定処理を書いていく.
 
        if(leapYear){ // leapYearがtrueの場合.
            System.out.printf("%d年はうるう年です.%n", year);
        }
        else{
            System.out.printf("%d年はうるう年ではありません.%n", year);
        }
    }
}

完成すれば,year の値を変更して実行結果を確認してください. なお,2000, 2004, 2016年はうるう年,2100,2015, 1900年はうるう年ではありません.

条件文の AND, OR, NOT

  • 2つの条件の両方を満たしたときに処理を行いたい場合は,次のように,AND(&&)で2つの条件式を結ぶ.

if(条件式1 && 条件式2){ // 条件式1, 条件式2の両方を満たした時に実行される. }

* 2つの条件のどちらか一方を満たしたときに処理を行いたい場合は,次のように,OR(`||`)で2つの条件式を結ぶ.
    * ```java
if(条件式1 || 条件式2){
    // 条件式1,条件式2のどちらかを満たすときに実行される.
}
  • ある条件を満たさないときに処理を行いたい場合は,次のように,条件式の前に NOT(!)をつける.

if(!条件式1){ // 条件式1を満たさないとき(falseの場合)に実行される. }


### 出力例

以下のように,判定する年を変更して実行結果を確認してみましょう.
以下の例では省略していますが,`year` に代入する値を変更するたびにコンパイルしてください.

```sh
$ java LeapYear
2016年はうるう年です.
$ java LeapYear
2000年はうるう年です.
$ java LeapYear
2004年はうるう年です.
$ java LeapYear
2100年はうるう年ではありません.
$ java LeapYear
2015年はうるう年ではありません.
$ java LeapYear
1900年はうるう年ではありません.

4. 総和を求める.

ループを用いて,1から10までの総和(10を含む)を求めましょう.次の手順で作成していきましょう.

  1. クラス名をGrandTotal とする.
  2. main メソッドを用意する.
  3. main メソッド内で Integer 型の変数 result を宣言する.
    • result は初期値として0を代入しておく.
  4. main メソッド内で Integer 型のループ制御変数 i を宣言する.
  5. ループ制御変数 i を用いて1から10までループを作成する.
  6. 繰り返しごとに,resulti の値を加算していく.
  7. ループ終了後,result の値を出力する.

ループはC言語と同じように書けます. forwhile のどちらも利用できますので,試してみましょう.

完成すれば,範囲を変更して,総和を求めましょう.

出力例

$ java GrandTotal
1から10までの総和は55です.
$ java GrandTotal
1から100までの総和は5050です.
$ java GrandTotal
1から1000までの総和は500500です.

5. 九九を表示する.

出力例のように,九九を表示するプログラムを作成しましょう. クラス名を Multiplication とします.

出力するとき,System.out.printf のフォーマット記述子に%d ではなく,%2dとすると,1桁の数字でも2桁として出力してくれます. なお,%02dとすると,足りない桁は0で埋めてくれます.

出力例

$ java Multiplication
   1  2  3  4  5  6  7  8  9
1  1  2  3  4  5  6  7  8  9 
2  2  4  6  8 10 12 14 16 18 
3  3  6  9 12 15 18 21 24 27 
4  4  8 12 16 20 24 28 32 36 
5  5 10 15 20 25 30 35 40 45 
6  6 12 18 24 30 36 42 48 54 
7  7 14 21 28 35 42 49 56 63 
8  8 16 24 32 40 48 56 64 72 
9  9 18 27 36 45 54 63 72 81 

6. 斜線の描画

繰り返しを利用し,出力例の模様を出力してください. クラス名は BackSlashPrinter としてください.

出力例

$ java BackSlashPrinter
X.........
.X........
..X.......
...X......
....X.....
.....X....
......X...
.......X..
........X.
.........X

7. Xの描画

繰り返しを利用し,出力例の模様を出力してください. クラス名は XPrinter としてください.

出力例

$ java XPrinter
X........X
.X......X.
..X....X..
...X..X...
....XX....
....XX....
...X..X...
..X....X..
.X......X.
X........X