4. Javaとフローチャート

ここでは、具体的にJavaとフローチャートの対応関係について書きます。ソースコードとフローチャートと順番に書くことで、ソースコードの処理の流れを明確にします。

4.1. 三項の条件演算子

三項の条件演算子の構文

条件 ? 式1 : 式2 ;

三項の条件演算子の例

MyJava.java

public class MyJava{
  public static void main(String args[]){
    int i = 10;
    String str = (i >= 60 ? "合格" : "不合格");
    System.out.print(str); //=> 不合格
  }
}

三項の条件演算子フローチャート

_images/sanko.gif

4.2. if...else文

if..elseの構文

if (条件式1) {
    命令文1;
}
else if (条件式2) {
    命令文2;
}
else {
    命令文3;
}

if..elseのフローチャート

_images/ifelse.gif

if..elseの例

MyJava02.java

public class MyJava02{
	public static void main(String args[]){
		int age = 16;
		String result;
		if (age >= 70 ){
		    result ="心の欲する所に従って矩を踰えず";
		}
		else if (age >= 60 ){
		    result ="耳順う";
		}
		else if (age >= 50 ){
		    result ="天命を知る";
		}
		else if (age >= 40 ){
		    result ="惑わず";
		}
		else if (age >= 30 ){
		    result ="立つ";
		}
		else if (age >= 15){
		    result ="学に志す";
		}
		else{
		    result ="無し";
		}
		System.out.print(result); //=> 学に志す
	}
}

if..elseの例のフローチャート

_images/rongo.gif

4.3. switch文

switch文の構文

switch () {
    case 値1:
        命令文1;
        break;
    case値2:
        命令文2;
        break;
    default:
        命令文3;
        break;
}

switch文のフローチャート

_images/switch.gif

switch文の例

MyJava03.java

public class MyJava03{
	public static void main(String args[]){
		int month = 2;
		String result="";
		switch(month){
			case 1: result = "January"; break;
			case 2: result = "February"; break;
			case 3: result = "March"; break;
			case 4: result = "April"; break;
			case 5: result = "May"; break;
			case 6: result = "June"; break;
			case 7: result = "July"; break;
			case 8: result = "August"; break;
			case 9: result = "September"; break;
			case 10: result = "October"; break;
			case 11: result = "November"; break;
			case 12: result = "December"; break;
			default: assert false; break;
		}
		System.out.print(result);//=>February
	}
}

switch文例のフローチャート

_images/switch_ex.gif

4.4. for文

for文の構文

for (初期化式; 条件式; 再初期化式) {
    命令文;
}

for文のフローチャート

_images/for.gif

1~10の合計を求めるfor文の例

MyJava04.java

public class MyJava04{
	public static void main(String args[]){
		int sum = 0;
		for(int i=1 ; i<=10 ; i++){
		    sum += i;
		}
		System.out.print(sum);//=>55
	}
}

for文例のフローチャート

_images/for_ex.gif

4.5. for-each文

for-eachのループ文の説明


for-each文の構文

for (要素の型 反復子変数名:コレクション名){
    System.out.print (反復子変数名);
}

1~10の合計を求める。for-each文の例

MyJava05.java

public class MyJava05{
	public static void main(String args[]){
		int[] nums = {1,2,3,4,5,6,7,8,9,10};
		int sum = 0;
		for(int num : nums){
			sum += num;
		}
		System.out.print(sum);//=>55
	}
}

for-each文のフローチャート

_images/for_each.gif

4.6. while文

while文の構文

while (継続条件式) {
    命令文;
}

while文のフローチャート

_images/while.gif

1~10の合計を求める。while文の例

MyJava06.java

public class MyJava06{
	public static void main(String args[]){
		int i = 1;
		int sum = 0;
		while(i<=10){
			sum += i;
			i++;
		}
		System.out.print(sum);//=>55
	}
}

while文例のフローチャート

_images/while_ex.gif

4.7. do..while文

do-while文の構文

do {
    命令文;
} while (継続条件式);

do-while文のフローチャート

_images/do_while.gif

1~10の合計を求める。do-while文の例

MyJava07.java

public class MyJava07{
	public static void main(String args[]){
		int i = 1;
		int sum = 0;
		do{
			sum += i;
			i++;
		}while(i<=10);
		System.out.print(sum);//=>55
	}
}

do-while文のフローチャート

_images/do_while_ex.gif

4.8. continue文

continueの構文

制御文{
        continue;
        その後の処理;
}

continue文はfor、while、do while制御文のその後の処理をスキップさせます。


continue文の例

MyJava0801.java

public class MyJava0801{
    public static void main(String args[]){
        int sum = 0;
        for (int i = 1; i <= 10; i++) {
            if (i == 3) {
                continue; //このループの残りの処理をスキップし、次のループ処理を行う
            }
            sum += i;
        }
        System.out.print(sum);//=>52
    }
}

continue文のフローチャート

_images/bat_for_continue_ex.gif

4.9. break文

breakの構文

制御文{
        break;
}

break文はswitch、for、while、do while制御文を終了さます。


break文の例

MyJava0802.java

public class MyJava0802{
	public static void main(String args[]){
		int sum = 0;
		for (int i = 1; i <= 10; i++) {
			sum += i;
			if (sum >= 30) {
				break; // ループを脱出する。
			}
		}
		System.out.print(sum);//=>36
	}
}

break文のフローチャート

_images/bat_for_break_ex.gif

4.10. ラベル付きcontinue文

ラベル付continueの構文

ラベル:制御文{
        continue ラベル;
        その後の処理;
}

「continue ラベル」文はラベル付for、while、do while制御文のその後の処理をスキップさせます。


ラベル付きのものは、主に多重ループを抜ける処理をスマートの書くために使います。

C言語ではこの機能がないため、同様の処理をgoto文を使って記述することになります。goto文はコーディング規約で禁止されていることが多いので、使うのが悩ましいところです。

ラベル付きcontinue文の例

MyJava0901.java

public class MyJava0901{
	public static void main(String args[]){
		int sum = 0;
		MYLABEL : for (int i = 1; i <= 10; i++) {
			for(int j=1; j<=10; j++){
				if (i == 3) {
					//このループの残りをスキップしMYLABEL:forに戻る。
					continue MYLABEL; 
				}
				sum += i * j ;
			}
		}
		System.out.print(sum);//>2860
	}
}

ラベル付きcontinue文のフローチャート

_images/bat_for_double_continue_ex.gif

4.11. ラベル付きbreak

ラベル付breakの構文

ラベル:制御文{
        break ラベル;
}

「break ラベル」文はラベル付switch、for、while、do while制御文を終了さます。


ラベル付きのものは、主に多重ループを抜ける処理をスマートの書くために使います。

C言語ではこの機能がないため、同様の処理をgoto文を使って記述することになります。goto文はコーディング規約で禁止されていることが多いので、使うのが悩ましいところです。

ラベル付きbreak文の例

MyJava0902.java

public class MyJava0902{
	public static void main(String args[]){
		int sum = 0;
		MYLABEL : for (int i = 1; i <= 10; i++) {
			for(int j=1; j<=10; j++){
				sum += i * j ;
				if (sum > 15) {
					break MYLABEL; // MYLABEL:forのループを脱出する。
				}
			}
		}
		System.out.print(sum);//>21
	}
}

ラベル付きbreak文のフローチャート

_images/bat_for_double_break_ex.gif

4.12. goto文

goto文は予約語ではあるが、現在未定義となっています。