条件分岐は,if
もしくは switch
を用います.
文法は,C言語と同じです.典型的な例を次に示します.
if(条件式1){
// 条件式1が成り立ったときに実行される文.
}
else if(条件式2){
// 条件式2が成り立ったときに実行される文.
}
else{
// 条件式1も条件式2も成り立たなかったときに実行される文.
}
C言語の場合,条件式は int
型で表現しましたが,Java言語の場合,
Boolean
型となります.
Boolean
型は,true
もしくは false
の2値で表される型です.
C言語のようにプログラムを書くと,Boolean
型になりますので,あまり気をつけなくとも良いようになっています.
if(value = 10){
// この場合,if文の条件が Integer 型になるため,コンパイルエラーになる.
}
if(value == 10){
// こう書くと,value == 10 の結果は Boolean になるため,Javaのif文として成り立つ.
// 厳密に書けば,(value == 10) == true という条件であるが,
// 冗長であるため,value == 10 と書くほうが望ましい.
}
整数型である Integer
型の値が正負のどちらかであるかを if
文を使って判定しましょう.
以下のプログラムの.....
部分を埋めて完成させてください.
public class PositiveChecker{
public static void main(String[] args){
Integer value = 5;
if(.....){
System.out.printf("与えられた数値は正の値です: %d%n", value);
}
else if(.....){
System.out.printf("与えられた数値は0です: %d%n", value);
}
else{
System.out.printf("与えられた数値は負の値です: %d%n", value);
}
}
}
完成すれば,value
の値をいろいろと変更して,実行してみましょう.
その際,全ての分岐が網羅するには,value
をどのような値にして,何度変更すれば良いかを考えてみましょう.
$ java PositiveChecker
与えられた数値は正の値です: 5
$ java PositiveChecker
与えられた数値は負の値です: -9
$ java PositiveChecker
与えられた数値は0です: 0
3回変更すれば,条件分岐を網羅できます.
value
を0にする.value
を正の値(例:1, 2, 3, …, 2,147,483,647 (Integer
の最大値))のいずれかの値にする.value
を負の値(例:-1, -2, -3, …, -2,147,483,648 (Integer
の最小値))のいずれかの値にする. ....
if(value > 0){
System.out.printf("与えられた数値は正の値です: %d%n", value);
}
else if(value == 0){
System.out.printf("与えられた数値は0です: %d%n", value);
}
....
繰り返しは,for
もしくは while
を利用します.文法はC言語と同じです.
典型的な例を次に示します.
// 初期化式,継続条件式,反復式をセミコロン(;)で区切る.
for(Integer i = 0; i < 10; i++){
// iが0から9までこの文を繰り返す.
}
// for(初期化式; 継続条件式; 反復式)
Integer loop = 0;
// 継続条件式を while に指定する.
while(loop < 10){
// loopが0から9までこの文を繰り返す.
loop++;
}
// while(継続条件式)
ループ制御には,Integer
型を利用することが多いです.if
文と同じく,繰り返し文の継続条件はBoolean
型で表現されます.
また,for
文の初期化式で変数宣言が行えるようになっています.
ループを途中で抜けるには,break
,そして,
ループを途中で中断し,次の繰り返しに移行するには continue
を使うのも
C言語と同じです.
for
文を使って,1以上,100未満の奇数の値を出力しましょう.
public class OddPrinter {
public static void main(String[] args) {
// for文を使って繰り返し.
}
}
$ java OddPrinter
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99
完成すれば,1以上,100未満の偶数値を出力する EvenPrinter
を作成してください.
/**
* 例題2 http://ksuap.github.io/materials/2018/lesson01/grammar/#例題-1
* for 文を使って,1以上,100未満の奇数の値を出力しましょう.
*
* @author Haruaki Tamada
*/
public class OddPrinter{
public static void main(String[] args){
// 正攻法
for(Integer i = 1; i < 100; i++){
// iを割った余りが1であれば,奇数.
if(i % 2 == 1){
System.out.print(i);
System.out.print(" ");
}
}
System.out.println();
// 解2: 2づつ増加させる方法.
for(Integer i = 1; i < 100; i += 2){
System.out.print(i);
System.out.print(" ");
}
System.out.println();
}
}
OddPrinter
,EvenPrinter
それぞれで,20個の数値を出力するごとに改行してください.
$ java EvenPrinter
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40
42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80
82 84 86 88 90 92 94 96 98
/**
* 例題2改 http://ksuap.github.io/2018spring/lesson01/grammar/#例題-改1
* OddPrinter,EvenPrinter それぞれで,20個の数値を出力するごとに改行してください.
*
* @author Haruaki Tamada
*/
public class EvenPrinter2{
public static void main(String[] args){
// 正攻法:出力した回数を数え,20個出力したら改行する.
Integer printedCount = 0;
for(Integer i = 1; i < 100; i++){
// iを割った余りが1であれば,偶数.
if(i % 2 == 0){
System.out.printf("%2d ", i);
printedCount++;
if(printedCount == 20){
System.out.println();
printedCount = 0;
}
}
}
System.out.println();
// 解2: 改行する位置は決まっているので,3つのループで実現する.
for(Integer i = 2; i <= 40; i += 2){
System.out.printf("%2d ", i);
}
System.out.println();
for(Integer i = 42; i <= 80; i += 2){
System.out.printf("%2d ", i);
}
System.out.println();
for(Integer i = 82; i < 100; i += 2){
System.out.printf("%2d ", i);
}
System.out.println();
}
}