練習問題
本日の残りの時間で,次に挙げる練習問題を順に作成してください.
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. うるう年の判定
与えられた年がうるう年であるか否かを判定しましょう. うるう年は,次のように判定します.
- 西暦で表される年が 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つの条件式を結ぶ.
if(条件式1 || 条件式2){
// 条件式1,条件式2のどちらかを満たすときに実行される.
}
- ある条件を満たさないときに処理を行いたい場合は,次のように,条件式の前に NOT(
!
)をつける.
if(!条件式1){
// 条件式1を満たさないとき(falseの場合)に実行される.
}
出力例
以下のように,判定する年を変更して実行結果を確認してみましょう.
以下の例では省略していますが, year
に代入する値を変更するたびにコンパイルしてください.
$ java LeapYear
2016年はうるう年です.
$ java LeapYear
2000年はうるう年です.
$ java LeapYear
2004年はうるう年です.
$ java LeapYear
2100年はうるう年ではありません.
$ java LeapYear
2015年はうるう年ではありません.
$ java LeapYear
1900年はうるう年ではありません.
3. 総和を求める.
ループを用いて,1から10までの総和(10を含む)を求めましょう.次の手順で作成していきましょう.
- クラス名を
GrandTotal
とする. main
メソッドを用意する.main
メソッド内でInteger
型の変数result
を宣言する.result
は初期値として0を代入しておく.
main
メソッド内でInteger
型のループ制御変数i
を宣言する.- ループ制御変数
i
を用いて1から10までループを作成する. - 繰り返しごとに,
result
にi
の値を加算していく. - ループ終了後,
result
の値を出力する.
ループはC言語と同じように書けます. for
,while
のどちらも利用できますので,試してみましょう.
完成すれば,範囲を変更して,総和を求めましょう.
出力例
$ java GrandTotal
1から10までの総和は55です.
$ java GrandTotal
1から100までの総和は5050です.
$ java GrandTotal
1から1000までの総和は500500です.
4. 九九を表示する.
出力例のように,九九を表示するプログラムを作成しましょう.
クラス名を 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
5. Xの描画
繰り返しを利用し,出力例の模様を出力してください.
クラス名は XPrinter
としてください.
出力例
$ java XPrinter
X........X
.X......X.
..X....X..
...X..X...
....XX....
....XX....
...X..X...
..X....X..
.X......X.
X........X