Javaプログラムは、mainメソッドの中を上から下に向かって順番に実行していきます。しかしそれでは単純な処理しかできないため、
制御文を使います。制御文には「条件分岐」するものと「ループ」するものがあります。
条件分岐は、条件によって文やブロックを実行するかスキップするかを決めることができます。
条件分岐を実行するために使われるのは「if〜else文」「switch文」「break文」です。
if | 条件が成立すると実行がifブロックの中へ進む 成立しない場合は実行せずに } の次へ進む |
if 〜 else | 条件が成立すると実行がifブロックの中へ進み、
条件が成立しなければ、ifブロックをスキップしてelseブロックへ進む。どちらか片方だけが実行される。
|
if 〜 else if 〜 else .... if 〜 else |
1つめの条件が成立すると ifブロックを実行し、以降のブロックはスキップされる。 この条件が成立しないと ifブロックはスキップされ、2つめの ifブロックを実行する。条件が成立すると、このelse if ブロック内を実行し以降のブロックはスキップされる。
どの条件も成立しないときは、ifブロック、else ifブロックもスキップし、最後のelseブロックだけが実行される。
|
《 if 〜 else 文のサンプルプログラム》
class Myifelse{
public static void main(String args[]){
int kazu = 10; // int型変数kazuに10を代入
// if文
if (kazu < 20){
system.out.println( kazu + " は 20より小さい");
}
// if 〜 else 文
if (kazu <= 5){
system.out.println( kazu + " は 5 以下である");
}else {
system.out.println( kazu + " は 5 より大きい");
}
// if 〜 else if 〜 else 文
if (kazu == 8){
system.out.println( kazu + " は 8 である");
} else if (kazu == 9){
system.out.println( kazu + " は 9 である");
} else if (kazu == 10){
system.out.println( kazu + " は 10 と等しい");
} else{
system.out.println( kazu + " は 8,9,10 以外である");
}
}
}
|
《実行結果》
- 式の値によって処理を何通りかに分けたい場合switchを使います。「どのキーが押されたか?」などの判定によく使われます。
- switch の中には、byte、short、int、char 型になる式を書きます。
- 「case 定数:」のところで式の値と定数が一致するかを調べます。
- breakは、現在いるブロックの残り部分を飛ばしてそのブロックを抜ける命令です。
《基本形》
switch(式){
case 定数1:文1;
文1;
break;
case 定数2:文2;
文2;
break;
default: 文d;
文d;
}
|
- 式の値が定数1と一致すると文1を実行します。break文に出会うとswitchブロックから抜けます。
- 定数1に一致せず定数2に一致すると、文2を実行します。break文に出会うとswitchブロックから抜けます。
- どの定数にも一致しないと、defaultに移り、文dを実行してswitchブロックを抜けます。
《switch とbreak のサンプルプログラム》
class Myswitch{
public static void main(String args[]){
char key = 'y';
switch(key){
case 'y':System.out.println("key は 'y' です");
break;
case 'Y':System.out.println("key は 'Y' です");
break;
case 'n':System.out.println("key は 'n' です");
break;
case 'N':System.out.println("key は 'N' です");
break;
default:System.out.println("key は 'Y,y,N,n'以外です");
}
}
}
|
《実行結果》
「for文」はループする回数が決まっている繰り返しの命令です。
繰り返した回数(ループカウンタ)を記憶しておくint型変数を使います。
for (カウンタの初期化;条件;カウンタ操作)
文;
文;
.....
}
|
《for文 のサンプルプログラム》
class Myfor{
public static void main(String args[]){
double hairetu[] = {0.0,0.1,0.2,0.3,0.4}; //(1)
for (int i=0; i<5; i++){ //(2)
system.out.println("hairetu[" + i + "] → " + hairetu[i]); //(3)
}
}
}
《実行結果》
|
《プログラムの解説》
- 実数型の配列変数(hairetu)に5個のデータを代入
- 5回繰り返すための条件。i の値は繰り返すごとに1つ増える
- hairetu の i 番目の値を表示する。
while(条件){
文;
文;
......
}
|
while文も、for文と同じように繰り返しを行いますが回数を指定するとは限りません。条件が成立する間ブロックの中を実行します。ブロックの中に条件が成立しなくなる文を書いておかないと無限ループになってしまいます。
《 while文 のサンプルプログラム》
class Mywhile{
public static void main(String args[]){
//配列の初期化
int hairetu[] = {1,2,3,4,5};
//配列の添え字初期化
int i = 0;
//while文を使って値が3以下の配列要素を探す
while(hairetu[i] <= 3){
System.out.println("hairetu[" + i + "] → " + hairetu[i]);
i++;
}
}
}
《実行結果》
|
do{
文;
文;
.....
}while(条件);
|
while文が条件を判定してからブロックを実行するのに対し、do-while文はブロックを実行してから条件を判定します。
違う点は、while文は1度もブロックを実行しない場合がありますが、do-while文は必ず一度は実行することです。
《do-while文 のサンプルプログラム》
class Mydowhile{
public static void main(String args[]){
int hairetu[] = {1,2,3,4,5};
int i = 0;
do{ //1回目は必ずループに入る
System.out.println("hairetu[" + i + "] → " + hairetu[i]);
i++;
}while(hairetu[i] <= 3);//条件を判定
}
}
《実行結果》
|
continue文はループの中で使われ、それ以降の文を実行せずに次の繰り返しに入ります。
while文とdo-while文のときには条件の判定に、for文のときはカウント操作に移ります。
ループが入れ子になっているときには、現在のループの先頭に移動します。
《continue文 のサンプルプログラム》
class Mycontinue{
public static void main(String args[]){
int hairetu[] = {1,2,3,4,5};
for (int i=0; i<5; i++){
if(i==3){
continue;
}
System.out.println("hairetu[" + i + "] → " + hairetu[i]);
}
}
}
《実行結果》
※このサンプルでは、hairetu[3]に代入された値「4」が表示されていません。
|