Presentation is loading. Please wait.

Presentation is loading. Please wait.

アルゴリズムとプログラミング (Algorithms and Programming)

Similar presentations


Presentation on theme: "アルゴリズムとプログラミング (Algorithms and Programming)"— Presentation transcript:

1 アルゴリズムとプログラミング (Algorithms and Programming)
第3回:条件分岐と繰り返し (前回補足)文字型に関して 条件分岐  if() ~ else  switch ~ case 繰り返し for(;;) do ~ while() while()~ 講義資料等:

2 条件分岐(1) if() - else (もし、()ならば~、そうでないなら~) 例) 関係演算子 式が真(True)となる条件 ==
右辺と左辺が等しい != 右辺と左辺が等しくない > 左辺が右辺より大きい < 左辺が右辺より小さい >= 左辺は右辺より大きいか等しい <= 左辺は右辺より小さいか等しい 条件式 例) if ( i == 1 ) {    iが1と等しかったときの処理; } else {    そうでないときの処理; 中カッコで囲んで 複数の文を記述

3 if-else文の注意点 { }を省略すると、直後の1行のみが実行の対象となる。(1行のみでもなるべく中カッコを使った方がわかりやすい)
インデントは文法的には無意味だが、見やすさ、わかりやすさのためには大変重要!! コメント文とインデントを効果的に活用しよう 例)実行結果は? i = 1 ; if ( i > 1 ) System.out.println( i ); System.out.println( 2 * i );

4 論理演算子 if ( i > 0 && i <= 10 ) { iが0より大きくかつ10以下の場合の処理; } else {
演算名 演算結果が真となる条件 & 論理積 左辺と右辺の両方が真 | 論理和 左辺と右辺のどちらか、または両方が真 ^ 排他的論理和 左辺と右辺のどちらか一つだけが真 ! 否定 真偽の反転 && &と同じだが左辺がfalseなら右辺の評価は行わない || |と同じだが左辺がtrueなら右辺の評価は行わない if ( i > 0 && i <= 10 ) {    iが0より大きくかつ10以下の場合の処理; } else {    そうでないときの処理;

5 (~の条件を満たした上でさらに、もし、~だったら..)
if文のネスト(入れ子) (~の条件を満たした上でさらに、もし、~だったら..) if ( m > 0 && m <= 12 ) {    if ( d > 0 && d <=31 ) { System.out.println( “m= “ + m + “d= “ + d ); } else { System.out.println( “dの値が不正です” ); System.out.println( “mの値が不正です” );

6 複数の条件で条件分岐 ( else if ) (~ではなく、もし、~だったら..)
if ( m > 0 && m <= 9 ) {    System.out.println( “m=0“ + m ); } else if ( m > 9 && m <=12 ){    System.out.println( “m=“ + m ); else { System.out.println( “mの値が不正です“ );

7 m=5のときの動作 m=05 if ( m > 0 && m <= 9 ) {
True m=5 if ( m > 0 && m <= 9 ) {    System.out.println( “m=0“ + m ); } else if ( m > 9 && m <=12 ){    System.out.println( “m=“ + m ); else { System.out.println( “mの値が不正です“ ); 実行結果 m=05

8 m=10のときの動作 m=10 if ( m > 0 && m <= 9 ) {
False m=10 if ( m > 0 && m <= 9 ) {    System.out.println( “m=0“ + m ); } else if ( m > 9 && m <=12 ){    System.out.println( “m=“ + m ); else { System.out.println( “mの値が不正です“ ); True 実行結果 m=10

9 m=15のときの動作 mの値が不正です False if ( m > 0 && m <= 9 ) {
   System.out.println( “m=0“ + m ); } else if ( m > 9 && m <=12 ){    System.out.println( “m=“ + m ); else { System.out.println( “mの値が不正です“ ); False 実行結果 mの値が不正です

10 if else の省略表記(条件演算子?:) class Sample1804 {
Sample1804.java class Sample1804 { public static void main(String[] args) { int i = 200 ; int j = (i > 100) ? 1 : 0 ; System.out.println(j); } int j ; if( i > 100) j = 1 ; else j = 0 ;

11 値で条件分岐 switch() case switch ( 条件式 ) { case ラベル1: 処理1 case ラベル2: 処理2
... default: 処理 } 条件式とcaseラベルを上から順に比較していき、一致したところで処理の実行に入る 一旦実行に入ったら、caseラベルとの比較は行われず、上から順に文が実行されるのみ caseラベルは単にエントリーポイントを決めるだけ 処理から抜けるにはbreak文の挿入が必要 caseのどれとも一致しない場合はdefault:文が実行される(省略可)

12 switch caseのサンプル:i=3の場合
class Sample1805 { public static void main(String[] args) { int i = 3 ; switch( i ) { case 1: System.out.println( “one” ); break; case 2: case 3: System.out.println( “two or three” ); default: System.out.println( “Out of range” ); break; } i=3 iとの比較の結果、値が異なる!→次のcaseへ 値が異なる!→次のcaseへ移る 値が一致!→対応する処理を実行する switchの外へ抜ける

13 i = 2の場合 class Sample1805 { public static void main(String[] args) {
int i = 2 ; switch( i ) { case 1: System.out.println( “one” ); break; case 2: case 3: System.out.println( “two or three” ); default: System.out.println( “Out of range” ); break; } i=2 iとの比較の結果、値が異なる!→次のcaseへ 値が一致!→ここから文の実行を開始する ラベルとの比較は行われず、文が逐次実行される switchの外へ抜ける

14 i = 1の場合 class Sample1805 { public static void main(String[] args) {
int i = 1 ; switch( i ) { case 1: System.out.println( “one” ); break; case 2: case 3: System.out.println( “two or three” ); default: System.out.println( “Out of range” ); break; } i=1 値が一致!→ここから文の実行を開始する switchの外へ抜ける

15 switch case文の動作と注意点 caseラベルの値が上から順番に評価され、不一致なら次のラベルの評価へ飛ぶ.一致すれば実行開始.
breakを入れないと、ラベルが不一致でも、次の文が実行される break文の後ろにもセミコロン ; が必要! caseのどれにも当てはまらない場合はdefaultが実行される。(省略可) caseで指定できる値 数値リテラル 文字リテラル 変数や、文字列リテラルは不可

16 繰り返し(1) for文 class Sample1901 {
 繰り返したい内容; } class Sample1901 { public static void main(String[] args) { int i ; System.out.println(“ループに入ります”); for( i = 0 ; i < 10 ; i++ ){ System.out.println(“まわっています ” + i ); } System.out.println(“ループ終了しました!”);

17 public static void main(String[] args) { int i ;
class Sample1901 { public static void main(String[] args) { int i ; System.out.println(“ループに入ります”); for( i = 0 ; i < 2 ; i++ ){ System.out.println(“まわっています ” + i ); } System.out.println(“ループ終了しました!”); True 実行結果 変数の値 ループに入ります i = 1 i = 0 i =  まわっています 0

18 public static void main(String[] args) { int i ;
class Sample1901 { public static void main(String[] args) { int i ; System.out.println(“ループに入ります”); for( i = 0 ; i < 2 ; i++ ){ System.out.println(“まわっています ” + i ); } System.out.println(“ループ終了しました!”); False 実行結果 変数の値 ループに入ります i = 1 i = 2 まわっています 0 まわっています 1 ループ終了しました!

19 for文の中だけで見える変数を宣言 class Sample1902 {
public static void main(String[] args) { System.out.println(“ループに入ります”); for( int i = 0 ; i < 10 ; i++ ){ System.out.println(“まわっています ” + i ); } System.out.println(“ループ終了しました!”); for文の外では変数iの値は参照・変更不可

20 for文のネスト class Sample1903 { public static void main(String[] args) {
ファイル名:Sample1903.java class Sample1903 { public static void main(String[] args) { System.out.println(“ループに入ります”); for( int i = 0 ; i < 3 ; i++ ){ for( int j = 0 ; j < 2 ; j++ ){ System.out.println(“まわっています ” + “i=“ + i + “ j=“ + j ); } System.out.println(“ループ終了しました!”);

21 繰り返し(2) while文, do while文
繰り返し処理の内容 } do { 繰り返し処理の内容 }while(条件式); セミコロンを忘れない!! 条件式を評価するタイミング:    処理を実行する前か、一度実行した後か クイズ:for文はどちらに近いか?

22 while文の例 class Sample2001 { public static void main(String[] args) {
int i = 0; System.out.println(“ループに入ります”); while( i < 10 ){ System.out.println(“i=” + i ); i++; } System.out.println(“ループ終了しました!”);

23 do while文の例 class Sample2002 {
public static void main(String[] args) { int i = 0; System.out.println(“ループに入ります”); do { System.out.println(“i=” + i ); i++; } while( i < 10 ); System.out.println(“ループ終了しました!”); } 条件によらず必ず1度は実行される

24 (for, while, do whileループ中で使用可)
途中で強制的にループを抜ける (for, while, do whileループ中で使用可) break文:  breakが含まれているループの外へ強制脱出 continue文:  ループブロック内で、continueより後ろに残っている文の実行を中止(ループからは脱出しない)

25 break文のサンプル class Sample2003 {
public static void main(String[] args) { int i = 0; System.out.println(“ループに入ります”); while( i < 10 ){ System.out.println(“i=” + i ); if( i == 5 ) break; i++; } System.out.println(“ループ終了しました!”); ループの外へ

26 continue文のサンプル class Sample2004 {
public static void main(String[] args) { System.out.println(“ループに入ります”); for(int i = 0;i < 3; i++) { for(int j = 0;j < 3; j++) { if( j == 1 ) continue ; System.out.println(“i=” + i + “ j=“ + j ); } System.out.println(“ループ終了しました!”); continue文の実行により、forループの残りの 文がスキップされる。ループからは出ない。

27 まとめ 条件分岐 繰り返し if-else switch case 関係演算子、論理演算子 for while do while
break, continue


Download ppt "アルゴリズムとプログラミング (Algorithms and Programming)"

Similar presentations


Ads by Google