演習 - do と while の反復ステートメントを区別する課題アクティビティを完了する

完了

コードの課題は、学習した内容を確実に理解し、先に進む前にある程度の自信を得るのに役立ちます。

do と while の反復ステートメントの違いを調べる

これまで見てきたように、C# では、forforeachdo-whilewhile の 4 種類の反復ステートメントがサポートされています。 Microsoft の言語リファレンス ドキュメントでは、これらのステートメントについて次のように説明しています。

  • for ステートメント: 指定したブール式 ("条件") が true と評価される間、本体を実行します。
  • foreach ステートメント: コレクションの要素を列挙し、コレクションの各要素に対して本体を実行します。
  • do-while ステートメント: 条件に応じて本体を 1 回以上実行します。
  • while ステートメント: 条件に応じて本体を 0 回以上実行します。

forforeach の反復は、互いに、そして do-whilewhile の反復から明確に区別されているように見えます。 しかし、do-whilewhile のステートメントの定義は非常に似ているように見えます。 do-whilewhile のどちらを選択するかの判断は、より恣意的に、場合によっては少し紛らわしくも見えます。 いくつかの課題プロジェクトが、明確な区別に役立つ場合があります。

この課題では、3 つの個別のコーディング プロジェクトの条件が提示されます。 各プロジェクトでは、do-while または while のステートメントを使用して反復コード ブロックを実装する必要があります。 do-whilewhile のステートメントを選択するには、指定した条件を評価する必要があります。 最初に選んだものが期待どおりに機能しない場合は、開始後に切り替えることができます。

Note

コーディング プロジェクトの条件は、do-whilewhile のステートメントの選択に役立ちます。 評価されるブール式について知っていること、または知らないことが、do-whilewhile のステートメントの選択に役立つ場合があります。 この課題の演習では、プロジェクトの条件に、ブール式の構築に使用される情報が含まれます。

この課題におけるユーザー入力を管理する

Console.ReadLine() ステートメントを使用してユーザー入力を取得する場合は、入力変数に null 許容型文字列 (string? で指定) を使用し、ユーザーが入力した値を評価するのが一般的です。 次のコード サンプルでは、null 許容型の文字列を使用してユーザーによる入力を取得します。 ユーザーが指定した値が null である間、反復は続行されます。

string? readResult;
Console.WriteLine("Enter a string:");
do
{
    readResult = Console.ReadLine();
} while (readResult == null);

while ステートメントによって評価されるブール式を使用して、ユーザーによる入力が指定した要件を満たしていることを確認できます。 たとえば、プロンプトで少なくとも 3 文字を含む文字列の入力をユーザーに求める場合は、次のコードを使用できます。

string? readResult;
bool validEntry = false;
Console.WriteLine("Enter a string containing at least three characters:");
do
{
    readResult = Console.ReadLine();
    if (readResult != null)
    {
        if (readResult.Length >= 3)
        {
            validEntry = true;
        }
        else
        {
            Console.WriteLine("Your input is invalid, please try again.");
        }
    }
} while (validEntry == false);

Console.ReadLine() 入力を数値として使用する場合は、文字列値を数値型に変換する必要があります。

文字列値を整数に変換するには int.TryParse() メソッドが使用できます。 このメソッドは、評価される文字列と、値が割り当てられる整数変数の名前の 2 つのパラメーターを使用します。 このメソッドは、ブール値を返します。 int.TryParse() メソッドを使用するサンプル コードを次に示します。

// capture user input in a string variable named readResult

int numericValue = 0;
bool validNumber = false;

validNumber = int.TryParse(readResult, out numericValue);

readResult に割り当てられた文字列値が有効な整数を表す場合、その値が numericValue という名前の整数変数に割り当てられ、validNumber という名前のブール変数に true が割り当てられます。 readResult に割り当てられた値が有効な整数を表さない場合は、validNumber には値 false が割り当てられます。 たとえば、readResult が "7" と等しい場合、値 7numericValue に割り当てられます。

コード プロジェクト 1 - 整数入力を検証するコードを記述する

最初のコーディング プロジェクトで実装する必要がある条件を次に示します。

  • 解答に、do-while または while の反復を含んでいる必要があります。

  • 反復ブロックの前: 解答が Console.WriteLine() ステートメントを使用して、5 から 10 の整数値をユーザーに求めるダイアログを表示する必要があります。

  • 反復ブロック内:

    • 解答が Console.ReadLine() ステートメントを使用してユーザーから入力を取得する必要があります。
    • 解答で、入力が整数の有効な表現であることを確認できる必要があります。
    • 整数値が 5 から 10 の間でない場合、そのコードが Console.WriteLine() ステートメントを使用して、5 から 10 の整数値をユーザーに求めるダイアログを表示する必要があります。
    • 反復を終了する前に、整数値が 5 から 10 の間であることを解答で確認できる必要があります。
  • 反復コード ブロックの下 (後): 解答が Console.WriteLine() ステートメントを使用して、入力値が受け入れられたことをユーザーに通知する必要があります。

  1. Visual Studio Code で空の Program.cs ファイルが開かれていることを確認します。

    必要であれば、Visual Studio Code を開き、次の手順のようにしてエディターで Program.cs ファイルを準備します。

    1. [ファイル] メニューの [フォルダーを開く] を選択します。

    2. [フォルダーを開く] ダイアログを使って CsharpProjects フォルダーに移動して開きます。

    3. Visual Studio Code のエクスプローラー パネルで、Program.cs を選びます。

    4. Visual Studio Code の [選択] メニューで、[すべて選択] を選択してから Delete キーを押します。

  2. コード プロジェクト 1 の各条件を実装するコードを記述します。

  3. アプリケーションを実行し、そのコードが指定した要件に基づいてユーザー入力を検証することを確認します。

    たとえば、アプリケーションを実行するときに、"two" や "2" などの入力値を拒否する必要がありますが、"7" の入力値は受け入れる必要があります。

    上記の例では、コンソール出力は次のようになります。

    Enter an integer value between 5 and 10
    two
    Sorry, you entered an invalid number, please try again
    2
    You entered 2. Please enter a number between 5 and 10.
    7
    Your input value (7) has been accepted.
    

コード プロジェクト 2 - 文字列入力を検証するコードを記述する

2 番目のコーディング プロジェクトで実装する必要がある条件を次に示します。

  • 解答に、do-while または while の反復を含んでいる必要があります。

  • 反復ブロックの前: 解答が Console.WriteLine() ステートメントを使用して、管理者、マネージャー、またはユーザーの 3 つのロール名のいずれかをユーザーに求める必要があります。

  • 反復ブロック内:

    • 解答が Console.ReadLine() ステートメントを使用してユーザーから入力を取得する必要があります。
    • 入力した値が 3 つのロール オプションのいずれかと一致していることを、解答で確認できる必要があります。
    • 解答では、入力値に対して Trim() メソッドを使い、先頭と末尾の空白文字を無視する必要があります。
    • 解答が、大文字と小文字の区別を無視する ToLower() メソッドを入力値に対して使用する必要があります。
    • 入力された値がいずれかのロール オプションと一致しない場合、そのコードが Console.WriteLine() ステートメントを使用して、ユーザーに有効なエントリを求める必要があります。
  • 反復コード ブロックの下 (後): 解答が Console.WriteLine() ステートメントを使用して、入力値が受け入れられたことをユーザーに通知する必要があります。

  1. Visual Studio Code のエディター パネルですべてのコードをコメント アウトします

    1. コード エディターですべてのコード行を選択します
    2. [編集] メニューの [ブロック コメントの切り替え] を選択します。
  2. コード プロジェクト 2 の各条件を実装するコードを記述します。

  3. アプリケーションを実行し、そのコードが指定した要件に基づいてユーザー入力を検証することを確認します。

    たとえば、アプリケーションを実行するときに、"Admin" などの入力値を拒否する必要がありますが、"administrator" の入力値は受け入れる必要があります。

    この例のコンソール出力は、次のようになります。

    Enter your role name (Administrator, Manager, or User)
    Admin
    The role name that you entered, "Admin" is not valid. Enter your role name (Administrator, Manager, or User)
       Administrator
    Your input value (Administrator) has been accepted.
    

コード プロジェクト 3 - 文字列配列の内容を処理するコードを記述する

3 番目のコーディング プロジェクトで実装する必要がある条件を次に示します。

  • 解答が、コーディング ロジックへの入力を表す次の文字列配列を使用する必要があります。

    string[] myStrings = new string[2] { "I like pizza. I like roast chicken. I like salad", "I like all three of the menu choices" };
    
  • 解答が、文字列内のピリオド文字の位置を保持するために使用できる periodLocation という名前の整数変数を宣言する必要があります。

  • 解答に、配列内の各文字列要素を処理するために使用できる外側の foreach または for ループを含んでいる必要があります。 ループ内で処理する文字列変数には、myString という名前を付ける必要があります。

  • 外側のループで、解答が String クラスの IndexOf() メソッドを使用して、myString 変数内の最初のピリオド文字の位置を取得する必要があります。 メソッド呼び出しは、myString.IndexOf(".") のようになります。 文字列にピリオド文字がない場合は、値 -1 が返されます。

  • 解答に、myString 変数の処理に使用できる内部の do-while または while ループを含んでいる必要があります。

  • 内部ループで、解答が処理される各文字列に含まれる各文を抽出して表示する (コンソールに書き込む) 必要があります。

  • 内部ループで、解答がピリオド文字を表示してはいけません。

  • 内部ループで、解答が Remove()Substring()TrimStart() のメソッドを使用して文字列情報を処理する必要があります。

  1. Visual Studio Code のエディター パネルですべてのコードをコメント アウトします

    1. コード エディターですべてのコード行を選択します
    2. [編集] メニューの [ブロック コメントの切り替え] を選択します。
  2. コード プロジェクト 3 に一覧表示されている各条件を実装するコードを記述します。

  3. アプリケーションを実行し、出力が要件を満たしていることを確認します。

    コード ロジックが正しく機能する場合、出力は次のようになります。

    I like pizza
    I like roast chicken
    I like salad
    I like all three of the menu choices
    

行き詰まって解答を見る必要がある場合でも、無事完了した場合でも、この課題の解答プロジェクトを引き続きご覧ください。