演習 - 配列と foreach ループを作成する
この演習では、Starter プロジェクト コードを確認し、アプリケーションの更新を開始します。 最初のコーディング タスクは、学生の試験のスコアを保持する配列を作成することです。 アプリケーション データが配列で使用可能になったら、学生の成績を合計するために使用できる foreach ループの作業を開始します。 この演習で完了する詳細なタスクは次のとおりです。
コード レビュー: Program.cs ファイルの内容を確認します。
配列: 各学生の課題スコアを格納する配列を作成します。
イテレーション: Sophia の課題の成績を合計するために使用できる
foreachループを作成します。Sophia の課題の平均成績を計算して表示します。
検証テスト: この演習で開発したコードの検証テストを実行します。
重要
この演習を開始する前に、前のユニット「準備」のセットアップ手順を完了しておく必要があります。
Program.cs ファイルの内容を確認する
このタスクでは、このモジュールのスターター プロジェクトとして提供されるコードを確認します。 Program.cs ファイルには、更新する学生の採点アプリケーションの初期バージョンが含まれています。
Visual Studio Code で GuidedProject フォルダーが開かれていることを確認します。
「準備」ユニット (このモジュールの前のユニット) には、このガイド付きプロジェクト モジュールの「セットアップ」セクションが含まれています。 「セットアップ」セクションでは、初期コードをダウンロードし、Visual Studio Code でプロジェクト フォルダーを開くためのプロセスについて説明しています。 必要に応じて、戻ってセットアップ手順に従ってください。
Visual Studio Code EXPLORER ビューで、 Starter フォルダーを展開し、 Program.csを選択します。
Program.cs ファイルを選択すると、エクスプローラー ビューの右側にあるメインエディター領域でファイルの内容が開きます。
エクスプローラー ビューが開いていない場合は、Visual Studio Code ウィンドウの左端にあるアクティビティ バーを使用して開くことができます。 エクスプローラー ボタンは、アクティビティ バーの一番上のアイコンです。
ここで少し時間を取って、Program.cs ファイルのコードをレビューすることにしましょう。
コードの一番上の部分が、変数宣言のリストで始まっていることに注意してください。
// initialize variables - graded assignments int currentAssignments = 5; int sophia1 = 90; int sophia2 = 86; int sophia3 = 87; int sophia4 = 98; int sophia5 = 100; int andrew1 = 92; int andrew2 = 89; int andrew3 = 81; int andrew4 = 96; int andrew5 = 90; int emma1 = 90; int emma2 = 85; int emma3 = 87; int emma4 = 98; int emma5 = 68; int logan1 = 90; int logan2 = 95; int logan3 = 87; int logan4 = 88; int logan5 = 96;コード ファイルの一番上には、コメント行に続いて変数のリストがあります。これらの変数は、各学生の採点された課題のスコアを保持するために使用されます。 最初の変数
currentAssignmentsは、採点済みの試験の件数を保持するために使用されます。課題スコアの変数は、配列を作成して使用する絶好の機会を表します。
下にスクロールして、変数宣言コード行の 2 つのグループをレビューすることにしましょう。
int sophiaSum = 0; int andrewSum = 0; int emmaSum = 0; int loganSum = 0; decimal sophiaScore; decimal andrewScore; decimal emmaScore; decimal loganScore;変数の最初のグループは、試験スコアの合計を保持するために使用される整数です。
変数の 2 番目のグループは、計算された平均スコアを保持するために使用される 10 進数です。 整数の計算では計算値の小数部分が切り捨てられるため、コードではここで 10 進数を使用します。
学生ごとに一意の変数を使用していたことに注意してください。 これにより、更新されたアプリケーションのコード行数を削減する別の機会が得られる場合があります。
スターター コードは次にスコア計算を開始するようです。
下方向にもう少しスクロールし、少し時間を取って次のコードをレビューすることにしましょう。
sophiaSum = sophia1 + sophia2 + sophia3 + sophia4 + sophia5; andrewSum = andrew1 + andrew2 + andrew3 + andrew4 + andrew5; emmaSum = emma1 + emma2 + emma3 + emma4 + emma5; loganSum = logan1 + logan2 + logan3 + logan4 + logan5; sophiaScore = (decimal)sophiaSum / currentAssignments; andrewScore = (decimal)andrewSum / currentAssignments; emmaScore = (decimal)emmaSum / currentAssignments; loganScore = (decimal)loganSum / currentAssignments;数式の最初のグループは、各学生の課題スコアの合計を計算するために使用されます。
数式の 2 番目のグループでは、平均スコアを計算します。 除算で小数部分が確実に保持されるように、分子が 10 進数としてキャストされることに注意してください。
ここで少し時間を取って、最後のコード セクションをレビューすることにしましょう。
Console.WriteLine("Student\t\tGrade\n"); Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-"); Console.WriteLine("Andrew:\t\t" + andrewScore + "\tB+"); Console.WriteLine("Emma:\t\t" + emmaScore + "\tB"); Console.WriteLine("Logan:\t\t" + loganScore + "\tA-"); Console.WriteLine("Press the Enter key to continue"); Console.ReadLine();このセクションでは、教師のガイドラインに従って書式設定された出力を出力します。 最初の行は、列のタイトルを含むヘッダー行です。その後に、各学生の名前とスコアが続きます。
Console.ReadLine()ステートメントは、アプリケーション ユーザーが出力を確認できるようにアプリケーションを一時停止します。Visual Studio Code EXPLORER ビューで、[ スタート] を右クリックし、[ 統合ターミナルで開く] を選択します。
TERMINAL パネルを使用して、
dotnet buildやdotnet runなどの .NET コマンド ライン インターフェイス (CLI) コマンドを実行しています。dotnet buildコマンドによってコードがコンパイルされ、コード構文に関連したエラーと警告のメッセージが表示されます。重要
ターミナルのコマンド プロンプトが開かれており、プロジェクト ワークスペースのルートが示されていることを確認します。 ここでは、プロジェクト ワークスペースのルートは Starter フォルダーであり、そこに Starter.csproj および Program.cs ファイルが配置されています。 ターミナルで .NET CLI コマンドを実行すると、コマンドは現在のフォルダーの場所を使用してアクションを実行しようとします。 ファイルを含まないフォルダーの場所から
dotnet buildまたはdotnet runコマンドを実行しようとすると、コマンドによってエラー メッセージが生成されます。プロジェクト コードをビルドするには、ターミナルのコマンド プロンプトで、コマンド
dotnet buildを入力します。数秒後に、ビルドが成功し、警告が 0 個でエラーが 0 個であることを示すメッセージが表示されます。
Determining projects to restore... All projects are up-to-date for restore. Starter -> C:\Users\someuser\Desktop\GuidedProject\Starter\bin\Debug\net7.0\Starter.dll Build succeeded. 0 Warning(s) 0 Error(s).NET CLI コマンドを使用すると、Visual Studio Code でアプリケーションを簡単にビルドして実行できます。
ターミナルのコマンド プロンプトで、「 dotnet run 」と入力し、Enter キーを押します。
dotnet runコマンドは、アプリケーションをビルドするようにコンパイラに指示し、ビルド エラーがない限り、コンパイルされたコードを実行します。重要
Starter プロジェクトは .NET 8 をターゲットとしています (Starter.csproj ファイル内)。 .NET 8 がインストールされていない場合、
dotnet runコマンドではエラーが発生します。 .NET 8 SDK (推奨) をインストールするか、環境にインストールした .NET のバージョンに合わせて Starter.csproj ファイルのターゲット フレームワークを変更できます。アプリケーションによって次の出力が生成されたことを確認します。
Student Grade Sophia: 92.2 A- Andrew: 89.6 B+ Emma: 85.6 B Logan: 91.2 A- Press the Enter key to continueターミナル パネルで、Enter キーを押します。
原則的に、アプリケーションは、コンソールに "続行するには Enter キーを押してください" と書き込んだ後、一時停止されました。 この動作は、コンソール アプリケーションでユーザー入力を収集するために使用される
Console.ReadLine()ステートメントによって発生します。 Enter キーを押すと、アプリケーションの実行が停止されます。[ターミナル] パネルを閉じます。
これでコード レビューが完了します。 このアプリケーションは、配列、イテレーション、選択のステートメントを適用する絶好の機会のように見えます。
では、更新を開始しましょう。
課題スコアの配列を作成する
このタスクでは、個々のスコアを保持する変数を、各学生の採点済みの課題スコアを保持する配列に置き換えます。
Visual Studio Code エディターで、Program.cs ファイルの一番上までスクロールします。
currentAssignments変数の宣言に使用される行の下に、空白のコード行を作成します。Sophia の課題スコアに使用される整数配列を作成するには、新しいコード行で次のコードを入力します。
int[] sophiaScores = new int[5];このコードでは、配列の新しいインスタンスを作成していることを指定するために
new演算子が使用されていることに注意してください。int[]の角かっこのセットは、sophiaScoresが整数配列であることをコンパイラに伝えます。一方、int[5]の角かっこのセットは、配列の要素数を指定するために使用されます。配列値を宣言の一部として割り当てるためのオプションがあることを思い出してください。
注
配列要素の値が事前にわかっており、値が変更される可能性が低い場合は、配列を宣言するときに配列値を割り当てるのが理にかなっています。 好例として、曜日を保持するために使用される配列があります。 配列の値が不明であれば、当然、配列を宣言するときに値を指定することはできません。そのため、上記で入力した構文を使用して配列を宣言します。
宣言で Sophia の課題スコアを指定するには、
sophiaScoresの宣言を次のように更新します。int[] sophiaScores = new int[] { 90, 86, 87, 98, 100 };要素の数を指定するために使用されていた
5が削除され、代わりに 5 つの採点済み課題のスコアが含まれていることに注意してください。{}内にリストされているスコアが、Sophia の課題の個々のスコアと一致することを確認します。個々のスコアを保持するために使用される 5 つの変数は次のとおりです。
int sophia1 = 90; int sophia2 = 86; int sophia3 = 87; int sophia4 = 98; int sophia5 = 100;Sophia の個々のスコアを保持する変数を宣言するコード行を削除します。
今後は
sophiaScores配列を使用して Sophia のスコアにアクセスするため、これらの変数は必要なくなりました。Andrew の課題スコアに使用される整数配列を作成するには、次のコードを入力します。
int[] andrewScores = new int[] {92, 89, 81, 96, 90};他の学生の配列宣言を作成します。
必ず学生の名前を使用して配列に名前を付けてから、個々のスコアの値を配列宣言行の
{}にコピーしてください。個々のスコアを配列宣言に正確にコピーしたことを確認した後、Andrew、Emma、Logan の個々のスコアを保持するために使用されていた変数を削除します。
Program.cs ファイルの先頭にあるコードは、次のようになります。
// initialize variables - graded assignments int currentAssignments = 5; int[] sophiaScores = new int[] { 90, 86, 87, 98, 100 }; int[] andrewScores = new int[] { 92, 89, 81, 96, 90 }; int[] emmaScores = new int[] { 90, 85, 87, 98, 68 }; int[] loganScores = new int[] { 90, 95, 87, 88, 96 }; int sophiaSum = 0;以上で、スコア配列が宣言され、使用できるようになりました。
Sophia の成績を計算する foreach イテレーションを作成する
このタスクでは、計算の実行に使用される既存のコードを、Sophia の課題スコアを反復処理する foreach ステートメントに置き換えます。
foreach ループのコード ブロックを使用して Sophia のスコアの合計を計算し、Sophia の成績を計算して表示します。
変数の宣言に使用されるコード行と、スコア値の合計および平均の計算を実行するために使用されるコード行を見つけます。
コードは次のようなものです。
int sophiaSum = 0; int andrewSum = 0; int emmaSum = 0; int loganSum = 0; decimal sophiaScore; decimal andrewScore; decimal emmaScore; decimal loganScore; sophiaSum = sophia1 + sophia2 + sophia3 + sophia4 + sophia5; andrewSum = andrew1 + andrew2 + andrew3 + andrew4 + andrew5; emmaSum = emma1 + emma2 + emma3 + emma4 + emma5; loganSum = logan1 + logan2 + logan3 + logan4 + logan5; sophiaScore = (decimal)sophiaSum / currentAssignments; andrewScore = (decimal)andrewSum / currentAssignments; emmaScore = (decimal)emmaSum / currentAssignments; loganScore = (decimal)loganSum / currentAssignments;合計の計算を実行するために使用されるコード行を削除します。
クリーンアップが完了したら、
foreachループ内で合計を計算するコードを記述します。Andrew、Emma、Logan の
int変数とdecimal変数を宣言するコード行を削除します。注
Sophia の変数を宣言するコード行は残します。
Andrew、Emma、Logan の平均スコアを計算するために使用されるコード行を削除します。
注
Sophia の平均スコア計算を含むコード行は残します。
コードの一番下までスクロールし、Andrew、Emma、Logan の成績を報告するために使用されるコード行を削除します。
更新された Program.cs ファイルに次のコードが含まれていることを確認します。
注
コードが次に示すコードと一致するように、空白のコード行を追加または削除します。
// initialize variables - graded assignments int currentAssignments = 5; int[] sophiaScores = new int[] { 90, 86, 87, 98, 100 }; int[] andrewScores = new int[] { 92, 89, 81, 96, 90 }; int[] emmaScores = new int[] { 90, 85, 87, 98, 68 }; int[] loganScores = new int[] { 90, 95, 87, 88, 96 }; int sophiaSum = 0; decimal sophiaScore; sophiaScore = (decimal)sophiaSum / currentAssignments; Console.WriteLine("Student\t\tGrade\n"); Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-"); Console.WriteLine("Press the Enter key to continue"); Console.ReadLine();sophiaScoreの宣言に使用される行の後に、空白のコード行を作成します。Sophia のスコアの反復処理に使用する
foreachステートメントを作成するには、次のコードを入力します。foreach (int score in sophiaScores) { }このコードでは、
scoreステートメントの一部としてforeachという名前の整数変数がインスタンス化されていることに注意してください。scoreのコード ブロック内でforeachを使用して、sophiaScores配列の値にアクセスします。Sophia のスコアを合計する数式を作成するには、
foreachコード ブロックを次のように更新します。foreach (int score in sophiaScores) { // add the exam score to the sum sophiaSum += score; }このコードでは、
+=演算子を使用して、scoreループ内でsophiaSumの値をforeachに追加していることに注意してください。 多くの場合、開発者は、合計を計算するときにショートカットとして+=を使用します。 この数式は、次の数式と同じです。sophiaSum = sophiaSum + score;foreachループがsophiaScores配列のすべての値を反復処理すると、sophiaSumにはスコアの合計が含まれます。少し時間を取ってコードをレビューすることにしましょう。
コードは次のようになります。
// initialize variables - graded assignments int currentAssignments = 5; int[] sophiaScores = new int[] { 90, 86, 87, 98, 100 }; int[] andrewScores = new int[] { 92, 89, 81, 96, 90 }; int[] emmaScores = new int[] { 90, 85, 87, 98, 68 }; int[] loganScores = new int[] { 90, 95, 87, 88, 96 }; int sophiaSum = 0; decimal sophiaScore; foreach (int score in sophiaScores) { // add the exam score to the sum sophiaSum += score; } sophiaScore = (decimal)sophiaSum / currentAssignments; Console.WriteLine("Student\t\tGrade\n"); Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-"); Console.WriteLine("Press the Enter key to continue"); Console.ReadLine();この時点で、すべての学生のスコア配列を作成し、Sophia のスコアを反復処理する
foreachループ内でスコアの合計を計算しています。 計画されたすべての更新を完了するまでまだ時間がかかりますが、これは進行状況を確認するのによいタイミングです。[Visual Studio Code ファイル] メニューの [ 保存] をクリックします。
作業を確認
このタスクでは、アプリケーションを実行して、コード ロジックが想定どおりに動作していることを確認します。
Program.cs ファイルに変更内容を確実に保存します。
Visual Studio Code EXPLORER ビューで、[ スタート] を右クリックし、[ 統合ターミナルで開く] を選択します。
ターミナル パネルを使用して、アプリケーションをビルドおよび実行する .NET CLI コマンドを入力します。
ターミナルのコマンド プロンプトに、Starter フォルダーが現在のフォルダーの場所として表示されていることを確認します。
次のようなコマンド プロンプトが表示されます。
C:\Users\someuser\Desktop\GuidedProject\Starter>プロジェクト コードをビルドするには、ターミナルのコマンド プロンプトで、コマンド
dotnet buildを入力します。数秒後に、ビルドが成功し、警告が 0 個でエラーが 0 個であることを示すメッセージが表示されます。
Determining projects to restore... All projects are up-to-date for restore. Starter -> C:\Users\someuser\Desktop\GuidedProject\Starter\bin\Debug\net6.0\Starter.dll Build succeeded. 0 Warning(s) 0 Error(s)エラー メッセージまたは警告メッセージが表示された場合は、続行する前に修正する必要があります。
エラー メッセージと警告メッセージには、問題が検出された可能性があるコード行が一覧表示されます。
Build FAILEDエラー メッセージの例を次に示します。C:\Users\someuser\Desktop\GuidedProject\Starter\Program.cs(53,18): error CS1002: ; expected [C:\Users\someuser\Desktop\GuidedProject\Starter\Starter.csproj]このメッセージは、検出されたエラーの種類と、それが検出された場所を示しています。 この場合、メッセージは Program.cs ファイルに
error CS1002: ; expectedエラーが含まれていることを示しています。; expectedは、開発者がステートメントの末尾に;を含めるのを忘れたことを示唆しています。 メッセージのProgram.cs(53,18)部分は、エラーがコード行 53 の左から 18 文字の位置にあることを示しています。このような構文エラーがあると、ビルド タスクは正常に終了できません (ビルド失敗)。 ビルド メッセージの中には、"エラー" ではなく "警告" を示すものもあります。これは、何らかの問題があることを意味しますが、それでもプログラムを実行してみることはできます (ビルド成功)。
問題を修正し、更新内容を保存したら、
dotnet buildコマンドをもう一度実行できます。 警告とエラーが 0 になるまで、コードの更新と保存を続けます。注
自分で問題を解決できない場合は、セットアップ中に完了したダウンロードの一部として Final フォルダーに含まれている Program.cs コードを調べることができます。 Final フォルダー内の Program.cs コードは、このモジュールのすべての演習の最終的な結果を表しています。そのため、まだ作成していないコードが含まれており、 ガイド付きプロジェクトでこの時点までに開発した Program.cs コードとは大きく異なる可能性があります。 ただし、Final 内の Program.cs コードを調べてみることで、コード内の問題を特定し、必要に応じて修正することができます。 回避できる場合は、Final フォルダーのコードをガイドとして使用しないようにしてください。 失敗から学ぶこと、またすべての開発者はエラーの検出と修正に時間を費やしていることを忘れないでください。
ターミナルのコマンド プロンプトで、「 dotnet run 」と入力し、Enter キーを押します。
dotnet runコマンドは、アプリケーションをビルドするようコンパイラに指示し、エラーが検出されない限り、コンパイルされたコードを実行します。コードによって次の出力が生成されることを確認します。
Student Grade Sophia: 92.2 A- Press the Enter key to continue実行中のアプリケーションを停止するには、ターミナル パネルで Enter キーを押します。
[ターミナル] パネルを閉じます。
これで、foreach ループを使用して配列の要素を反復処理し、配列の内容に基づいて計算を実行するアプリケーションがビルドされました。 必要なアプリの更新が大きく進んでいます。