はじめに
環境構築編:あらためてJavaを学習する(その0)
変数編:あらためてJavaを学習する(その1)変数
今回はプログラミングを行う上で用いる条件分岐や繰り返し処理についての備忘録!
条件分岐
繰り返し処理
条件式
boolean型を返す式のことであり、条件分岐や繰り返し処理は条件式の結果がtrueかfalseかで処理を実行するか決める。
if文
「もし〇〇だったらこの処理を行う」の記述。
一文で終わる場合は{ } は省略可能。
if ( 条件式 ) {
処理;
}
// 省略形式
if ( 条件式 ) 処理;
if ~ else文
「もし〇〇だったらこの処理を行い、違う場合はこの処理を行う」の記述。
なお、こちらも短文の場合は省略が可能(条件演算子
または3項演算子
と呼ばれる)。
if ( 条件式 ) {
処理;
} else {
処理;
}
// 3項演算子での省略形
条件式 ? 条件がtrueの場合の処理 : 条件がfalseの場合の処理;
if ~ else if ~ else文
「もし〇〇だったらこの処理を行い、もし▲▲だったらこの処理を行い、違ったらこの処理を行う」の記述。
if ( 条件式1 ) {
処理;
} else if ( 条件式2 ) {
処理;
} else {
処理;
}
switch文
条件式が複数ある場合はswitch文を使うと記述がスッキリする。
処理にbreak
を指定するとswitch文から抜ける。
case文の代わりにdefalut
を記述すると、case文で指定した値以外もしくはbreak指定でswitch処理から抜けていない場合の処理を行う。
昔は式の部分に指定できた型がbyte
,char
,short
,int
,enum(列挙型)
だけであったが、今はString
も指定できる。
switch ( 式 ) {
case 値1 :
処理;
break;
case 値2 :
処理;
break;
case 値3 :
処理;
// break文が無いので、defalutの処理も行われる
default :
処理;
}
※SE12からはswich式が利用できるようになり、矢印caseラベルが利用できるようになりました。(breakが不要になりました)
また、SE13にてcaseラベルでは、breakではなくyieldを利用することを推奨しています。
気になる方は下記URLをご参照ください。
https://docs.oracle.com/javase/jp/13/language/switch-expressions.html
for文
〜回まで繰り返し処理を行いたい。といった場合に記述する。
「何回繰り返したのか」を数えるカウントために、整数型 (int型)の変数を用意。この変数をカウンタ変数
という。
for( カウンタ変数の宣言と初期化; 条件式; カウンタ変数の加算) {
処理;
}
拡張for文
配列の繰り返し処理を行う際に利用できる。
for(配列のデータ型 変数名 : 配列の変数名) {
処理;
}
while文
条件に見合うまで繰り返し処理を行いたい場合に利用する。
条件に合わなければ繰り返し処理は行われない。
while( 条件式 ) {
処理;
}
do-while文
while文と違い、一度処理を行い、その後に条件と合致するか確認を行う。
合致すれば繰り返し処理を行い、合致しなければ処理を行わない。
do {
処理;
}while( 条件式 );
break
とcontinue
記述 | 説明 |
---|---|
break | 繰り返し処理などのブロックから抜ける |
continue | continue以降の処理は行わず、繰り返し処理の頭へ強制的に戻る |
for( データ型 カウンタ変数 = 値; 条件式; カウンタ変数の加算;{
for( データ型 カウンタ変数 = 値; 条件式; カウンタ変数の加算;{
break; // 上のfor文から抜ける
}
break; // 最初のfor文から抜ける
}
for( データ型 カウンタ変数1 = 値; 条件式; カウンタ変数1の加算;{
for( データ型 カウンタ変数2 = 値; 条件式; カウンタ変数2の加算;{
if( 条件式 ) {
continue; // 以降の処理を行わずに2つめのfor文の先頭に戻る
}
処理;
}
}
無限ループ
while文などの条件式にtrueを指定することで無限ループが実現する。
while(true){
処理;
}
ちなみに極端な例だが…下記のコードも無限ループになる。
for(int i = 1; i < 10; i++) {
while(true){
if( i == 3 ){
break;
}
}
}
カウンタ変数iが3になりbreak処理を行うが、break処理で抜けるのはwhile文からの処理であり、for文からは抜けない。つまり次のfor文に処理が移り、カウンタ変数iは4になるため無限ループに再度突入する。
実際に実行して試した場合は無限ループのため処理が終わらないので強制終了で止める。
止め方はキーボードの ctrlボタン + c
繰り返し処理からの抜け方
breakで指定の繰り返し処理からも抜けたい場合は、条件式の部分にtrue/falseを判定する変数(フラグ)を用意するか、ラベル
を利用する。
変数を利用する場合
boolean flag = true;
while(flag){
for( int i = 1; i < 5; i++) {
if(i == 3) {
flag = false;
break;
}
}
}
ラベルを利用する場合
ラベル
はコード中の場所を示す印。
ラベルの記述方法は、ラベル名:
ラベル名は任意で付けられるが、予約語などの命名規約に注意。
breakの後にラベル名を指定することで、ラベル名を付けた処理から抜けられる。
LOOP: while(true) {
for(int i = 1; i < 5; i++) {
if(i == 3) {
break LOOP;
}
}
}
サンプルコード
- 条件分岐
- 繰り返し処理
- 2つの組み合わせ
public class Sample4 {
public static void main(String[] args) {
int num = 1;
// 条件分岐(if)
if(num == 1) {
System.out.println("numは1");
}else if(num == 2 ) {
System.out.println("numは2");
}else {
System.out.println("numは2より大きい");
}
// 条件分岐(switch)
switch(num) {
case 1:
System.out.println("numは1");
break;
case 2:
System.out.println("numは2");
break;
default:
System.out.println("numは2より大きい");
}
// 繰り返し処理(for)
for(int i = 1; i < 5; i++) {
System.out.print(i + "回目,");
}
System.out.println();
// 繰り返し処理+条件分岐(for)
for(int i = 1; i < 5; i++) {
if(i < 4) {
System.out.print(i + "回目,");
}else {
System.out.println(i + "回目");
}
}
// 繰り返し処理(拡張for)+条件分岐(switch)
String[] progs = {"Java","PHP","Ruby","JavaScript","fugafuga"};
String url;
for(String prog: progs) {
switch(prog) {
case "Java":
url= "https://www.java.com/ja/";
break;
case "PHP":
url= "https://www.php.net";
break;
case "Ruby":
url= "https://www.ruby-lang.org/ja/";
break;
case "JavaScript":
url= "https://developer.mozilla.org/ja/docs/Web/JavaScript";
break;
default:
url= "???";
}
System.out.println("["+ prog + "] " + url);
}
// while文
int count = 0;
while(count < 3) {
System.out.print(count);
count++;
}
// do~while文
do {
System.out.print(count);
}while(count < 3);
}
}
実行結果
numは1
numは1
1回目,2回目,3回目,4回目,
1回目,2回目,3回目,4回目
[Java] https://www.java.com/ja/
[PHP] https://www.php.net
[Ruby] https://www.ruby-lang.org/ja/
[JavaScript] https://developer.mozilla.org/ja/docs/Web/JavaScript
[fugafuga] ???
0123