たなかのJava日記

どんなことをやったか(学んだか)、どこで詰まったか(わからなかったか)、どこで工夫したかの記録です。

Day10,繰り返し

■時間
4時間

■行ったこと
1,プロになるJava(p.161~187)
3,コンピュータはなぜ動くのか(第2章)

■コメント
Java書籍の迷路を作るコードが難しく、時間をかけましたが理解が出来ませんでした。
文法の理解だけでは全体の把握は難しいことを知ることができたのが一番の収穫です。

■課題
・前値インクリメントと後置インクリメントの説明
・参照型について
JDKJVMの説明、位置づけ


------------
以下メモ

■for文について

【問題】for文を使用して1から10を出力してください

【回答例1】
for (int n = 1; n <= 10; n++) {
    System.out.println(n);
}

【回答例2】
for (int n = 0; n < 10; n++) {
    System.out.println(n + 1);
}

【回答例3】
for (int n = 1; n < 11; n++) {
    System.out.println(n + 1);
}

【解説】
3つの回答例があり、どれも正解ですが、回答例1が望ましいです。
理由としては、やりたいことに出てくる数字がそのままコードに出てくるほうが理解が容易になるためです。ミスを減らせます。

■continueについて

【例1】
        for (int i = 0; i < 5; i++) {
            if (i == 2) {
                System.out.println("skip");
                continue;
            }
            System.out.println(i);
        }

        System.out.println();

【例2】
        for (int i = 0; i < 5; i++) {
            if (i == 2) {
                System.out.println("skip");
            } else {
                System.out.println(i);
            }
        }

【解説】
例1のcontinue文は、例2のようにelse句を使うif文に置き換えることができます。
しかし、出力結果は同じでも読み取り方が異なります。
例1では、if文の中に入れていたので、「skip」を表示することは特別な場合であることが読み取れます。
例2では、変数iの表示が主な処理で、たまに「skip」と表示しています。

■for文とswitchの組み合わせ

・0から9まで表示。ただし3と5は表示を飛ばす

【回答例1】
        for (int i = 0; i <= 9; i++) {
            if (i == 3 || i == 5) {
                continue;
            }
            System.out.println(i);
        }

        System.out.println();

【回答例2】
        //switchの使用
        for (int i = 0; i <= 9; i++) {
            switch (i) {
                case 3, 5 : continue;
            }
            System.out.println(i);
        }

【回答例3】
        //switchで->の使用
        //->の使用はcontinueを{}で囲む
        for (int i = 0; i <= 9; i++) {
            switch (i) {
                case 3, 5 -> {
                    continue;
                }
            }
            System.out.println(i);
        }

■内側のループ回数が変わる場合のアイデア

【回答例1】
        for (int i = 1; i <= 5; i++) {
            for (int j = 0; j < i; j++) {
                System.out.print("★");
            }
            System.out.println();
        }

【回答例2】
        for (int i = 1; i <= 5; i++) {
            System.out.print("★".repeat(i));
            System.out.println();
        }

【解説】
回答例2ではメソッドにしたことでループが隠されて忘れることができ、可読性の向上や処理の把握が期待できます。