continueを使って「処理をスキップする」プログラム

広告

今回は、C#の continue を使って、条件に合わない入力をスキップするプログラムを作ります。

前回は、while(true) と break を使って、0が入力されるまで加算するプログラムを作りました。

今回は、そこに continue を加えて、次のようなルールにします。

0が入力されたら終了する
正の数なら合計に加える
負の数なら合計に加えず、もう一度入力に戻る

continueとは何か

continue は、繰り返し処理の中で使う命令です。

意味は、今回の繰り返し処理をここで終わりにして、次の繰り返しへ進むです。

break と似ていますが、役割は違います。

break    繰り返しそのものを終了する
continue 今回だけスキップして、次の繰り返しへ進む

つまり、break は「もう終わり」、continue は「今回は飛ばす」です。

作りたいプログラム

今回作るプログラムは、次のような動きをします。

数値を入力してください
10
現在の合計は10です

数値を入力してください
-5
負の数は合計に加えません

数値を入力してください
20
現在の合計は30です

数値を入力してください
0
終了します
最終的な合計は30です

-5 は負の数なので、合計には加えません。

その後、プログラムは終了せず、もう一度入力に戻ります。

プロジェクト名について

今回のプロジェクト名は、次のようにしましょう。

namespace SumPositiveUntilZero

Sum は「合計する」、Positive は「正の数」、Until Zero は「0まで」という意味です。

つまり、SumPositiveUntilZero は、0が入力されるまで、正の数だけを合計するという意味になります。

サンプルコード

using System;

namespace SumPositiveUntilZero
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 合計を入れておく変数
            var total = 0;

            while (true)  // ずっと繰り返す
            {
                Console.WriteLine("数値を入力してください");

                // キーボードから入力された文字を受け取る
                var line = Console.ReadLine();

                // 入力された文字を整数に変換する
                var number = int.Parse(line);

                // 0が入力されたら、繰り返しを終了する
                if (number == 0)
                {
                    Console.WriteLine("終了します");
                    break;  // while文を抜ける
                }

                // 負の数が入力されたら、合計に加えず次の繰り返しへ進む
                if (number < 0)
                {
                    Console.WriteLine("負の数は合計に加えません");
                    Console.WriteLine();

                    continue;  // この下の処理を飛ばして、次の繰り返しへ進む
                }

                // ここに来るのは、正の数が入力されたときだけ
                total += number;

                // 現在の合計を表示する
                Console.WriteLine($"現在の合計は{total}です");
                Console.WriteLine();
            }

            // while文が終わった後に、最終的な合計を表示する
            Console.WriteLine($"最終的な合計は{total}です");
        }
    }
}

while(true)の意味

while(true) は、条件が常に true なので、基本的にはずっと繰り返します。

while (true)
{
    // ずっと繰り返す
}

そのため、while(true) を使うときは、どこかで繰り返しを止める処理が必要です。

今回のプログラムでは、0が入力されたときに break を使って終了しています。

if (number == 0)
{
    Console.WriteLine("終了します");
    break;
}

つまり、今回のプログラムは次のような考え方です。

基本的にはずっと入力を受け付ける
0が入力されたら終了する
負の数が入力されたらスキップする
正の数が入力されたら合計に加える

continueが実行される場所

今回、continue は次の場所にあります。

if (number < 0)
{
    Console.WriteLine("負の数は合計に加えません");
    Console.WriteLine();

    continue;
}

これは、入力された数値が負の数だった場合の処理です。

たとえば、-5 が入力されたとします。

すると、次の条件が成り立ちます。

number < 0

そのため、if 文の中に入ります。

そして、次のメッセージを表示します。

負の数は合計に加えません

その後、continue が実行されます。

continue が実行されると、その下にある処理は実行されません。

total += number;
Console.WriteLine($"現在の合計は{total}です");

つまり、負の数は合計に加えられません。

total += number の意味

次のコードは、入力された数値を合計に加えています。

total += number;

これは、次の書き方と同じ意味です。

total = total + number;

たとえば、現在の total が10で、number が20なら、次のようになります。

total = 10 + 20

その結果、total は30になります。

今回のプログラムでは、continue によって負の数はここまで来ません。

そのため、total += number; が実行されるのは、正の数が入力されたときだけです。

処理の流れ

今回の処理の流れは、次のようになります。

合計 total を0にする
↓
数値を入力する
↓
入力された数値が0か確認する
↓
0なら終了する
↓
入力された数値が負の数か確認する
↓
負の数なら合計に加えず、次の繰り返しへ進む
↓
正の数なら合計に加える
↓
現在の合計を表示する
↓
もう一度、数値を入力する

ポイントは、負の数が入力されたときです。

負の数が入力された場合は、continue によって、合計に加える処理を飛ばします。

breakとcontinueの違い

break と continue は、どちらも繰り返し処理の中でよく使われます。

ただし、意味は違います。

break
繰り返しを完全に終了する

continue
今回の繰り返しだけをスキップして、次の繰り返しへ進む

今回のプログラムでは、次のように使い分けています。

if (number == 0)
{
    break;
}

0が入力されたときは、もう入力を続ける必要がないので break します。

一方で、負の数が入力されたときは、プログラムを終了するわけではありません。

if (number < 0)
{
    continue;
}

負の数は合計に加えたくないだけなので、continue で今回だけスキップします。

continueを使わない場合

実は、今回のプログラムは continue を使わなくても書けます。

たとえば、次のように書くこともできます。

if (number >= 0)
{
    total += number;
    Console.WriteLine($"現在の合計は{total}です");
}
else
{
    Console.WriteLine("負の数は合計に加えません");
}

この書き方でも動きます。

ただし、条件が増えてくると、if 文の中が深くなり、読みにくくなることがあります。

そのようなときに continue を使うと、

この条件のときは、ここで処理を飛ばす

と書けるので、流れが分かりやすくなることがあります。

初学者がつまずきやすいポイント

continue を使うときは、continueより下の処理は実行されないことに注意しましょう。

今回であれば、負の数が入力されたとき、次の処理は実行されません。

total += number;
Console.WriteLine($"現在の合計は{total}です");

そのため、負の数は合計に加わりません。

また、while(true) の中で continue を使う場合は、終了条件である break を忘れないようにしましょう。

もし break がなければ、ずっと入力を繰り返すプログラムになってしまいます。

もう1つの注意点は、今回のコードでは、数値以外を入力するとエラーになることです。

たとえば、abc のような文字を入力すると、int.Parse で整数に変換できないため、エラーになります。

最初の学習では、まずは「数値だけを入力する」と決めて練習すれば大丈夫です。

まとめ

continue は、繰り返し処理の中で、今回の処理だけをスキップする命令です。

今回のプログラムでは、次の流れを作りました。

0なら break で終了
負の数なら continue でスキップ
正の数なら合計に加える

break は「繰り返しを終わる」、continue は「今回だけ飛ばす」と覚えると分かりやすいです。

while(true)breakcontinue を組み合わせると、入力を繰り返すプログラムを柔軟に作れるようになります。

まずは今回のように、0で終了、負の数はスキップ、正の数だけ合計というシンプルな例で慣れていきましょう。

訪問数 2 回, 今日の訪問数 2回

広告

C#

Posted by hidepon