0
0

More than 3 years have passed since last update.

初心者から始めるJava、入れ子・break・continue

Last updated at Posted at 2020-03-08

はじめに

この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては、
間違えたものが中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの。
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。

環境

言語:Java11、JDK13.0.2
動作環境:Windows10

入れ子

マトリョーシカ人形を見たことがあるだろうか。サイズが違う相似の物体をたくさん重ねたものだ。ここで扱う入れ子は制御構造のネスト(入れ子)である。
if for whileの文が。処理の中にまた制御構造を内包する状態になっており、二重ループ・三重ループなど階層的な処理を行うのに向いている。

break

break自体はswitch文のときに触れたが、入れ子の後で説明するなら「今処理しているネスト(入れ子)を中断し、上位のループに入る」動きになる。仮に無限ループに入っていたとしても、break文の条件を満たせば抜けることが出来る。
以下、参考の黒本からの引用

breakの使用例
int num = 0;
while(true){
  num++;
if(num == 3){
  break;
}
System.out.println(num);
}

continue

continuebreakとよく間違えるのだが、continueした場合はcontinue以下の繰り返し処理を丸ごとスキップして更新文に移行する
continueの実例は後日追記。思いついたコードがどれもコンパイルエラーでうまくいかなかった。特に練習が必要だ。

実践

失敗例を見てみよう。

nestingTwo.java
class nestingTwo
{
    public static void main(String[] args)
    {
        int forLoop = 0;
        int whileLoop = 0;
        //合計回数は9回のはず

            for(; forLoop < 3; forLoop++){
                while(whileLoop < 3){
                    whileLoop++;    
                }
            }
        System.out.println("処理は終了しました。");
        System.out.println("最終結果は、for文が" + forLoop + "回、While文が" + whileLoop + "回でした。"); 
        }

    }



/* 処理は終了しました。
   最終結果は、for文が3回、While文が3回、合計で3回、でした。 */

whileLoopはforの入れ子内で一度3になった後は条件を満たしており、forが一度回っただけでそれ以降の変更がなされていない。
forの回数×whileの回数 にするため、今回はこうした。

after
(省略)
        int totalCounter = 0;
        //合計回数は9回のはず
        int whileLoopTemporary =0;

            for(; forLoop < 3; forLoop++){
                while(whileLoop < 3){
                    whileLoop++;    
                    totalCounter++;
                    whileLoopTemporary = whileLoop;
                }
                whileLoop = 0;
            }
        System.out.println("処理は終了しました。");
        System.out.println("最終結果は、for文が" + forLoop + "回、While文が" + whileLoopTemporary + "回、合計で" + totalCounter + "回、でした。"); 
        }

    }

while内でたまった回転数を逃がすwhileLoopTemporaryを作り代入し、後からfor文内で0に初期化している。
もっとスマートな方法があるはず。

終わりに

ラベルという、ラベルを張った処理へ制御を移す機構もあるようだが、ここでは割愛。どこかで見たgo toと同じものだろうか。

参考

出来るだけ自分で変数や式を書いてコンパイルしているので、完全に引用する場合はその旨記述する。

やさしいJava 第7版
Java SE11 Silver 問題集(通称黒本)

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0