質問: 問題が "Switch文を用いてキーボードから入力された文字が川なら山、山なら川、海なら滝と表示するプログラムを作成せよ。" と言うものなのですが何もわからないので教えてください C#になります。
回答: C# ということなので、まず Visual Studio 2017 Community Edition をインストールしてください。 条件はありますが無料です。 間違っても Unity から始めたりメモ帳で始めたりしてはいけません。 それを勧めるサイトや書籍は色物と思ってください。 Visual Studio 2017 のインストール インストールが済んだら要件定義しましょう。 今回は単純なプログラムなので簡単です。 > > "Switch文を用いてキーボードから入力された文字が川なら山、山なら川、海なら滝と表示するプログラムを作成せよ。" > > > これに必要なのは、Switch 文、キーボードから文字入力を受け付けるメソッド、「山」「海」という入力を「海」「滝」に変換するメソッド、画面に出力するメソッドです。 C# で「文」というのは「式」と並ぶ処理の最小単位で、評価できるものつまり値のあるものを式というのに対し、評価できないものつまり値のないものを文と言います。 例えば "山" == "海" という構文は true または false と評価される式であり、if ("山" == "海") { } という構文は値を持たない文になります。 メソッドの場合、戻り値を返すメソッドは式で、戻り値を返さないメソッドは文です。 つまりこの場合は void Switch(引数) という戻り値のないメソッドを作れということになります。 Switch という名前は見ても処理内容がよくわからないし switch と紛らわしいので良い命名ではありませんが、必須事項なので採用せざるを得ません。 コンソールアプリを作ることにすれば、キーボードから文字入力を受け付けるメソッド、また文字列を画面に出力するメソッドは既に用意されているので、実装すべきは Switch メソッドと変換メソッドの二つです。 しかしこの中で Switch メソッドは何をするメソッドとも指示されていないので、これを変換メソッドにすることにしましょう。 本来であれば string Convert(string src) のように文字列を引数として文字列を返すメソッドがわかりやすいのですが、文という指示があって仕方がないので void Switch(string src, out string dst) と定義します。 さて、要件定義ができたので次はソリューションを作りましょう。 一つのアセンブリ(実行ファイルや DLL)を作るものをプロジェクトと言い、一つまたは複数のプロジェクトをまとめたものをソリューションと言います。 Ctrl+Shift+N で新しいプロジェクトダイアログを開き、インストール済み→Visual C#→Windows デスクトップからコンソールアプリ(.NET Framework)を選んで作成してください。 名前は ConsoleApp1 のままで構いません。 これでソリューションとプロジェクトができました。 次に Switch を実装するクラスを書きましょう。 Shift+Alt+C を押して新しい項目の追加ダイアログを開き、名前を Class1.cs から Convert.cs に変更して追加をクリックします。 次のようなコードが表示されれば成功です。 ``` using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { class Convert { } } ``` Convert クラスができましたので、これに Switch メソッドを実装していきます。 ``` using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { public class Convert { public static void Switch(string src, out string dst) { throw new NotImplementedException(); } } } ``` throw new NotImplementedException(); は NotImplementedException 例外をスローするものです。 呼び出すと「まだ未完成です」という意味の例外をスローすることでこのメソッドが未完成であることを開発者に知らせます。 ここまでできたら一度ソリューションを保存しましょう。 Ctrl+Shift+S を押してプロジェクトの保存ダイアログを出し、上書き保存ボタンを押してください。 保存したら次にテストを書きましょう。 メニューからファイル→追加→新しいプロジェクトを選択してインストール済み→Visual C#→テストから単体テストプロジェクト(.NET Framework)を選んで OK を押してください。 次のようなコードが表示されたら成功です。 ``` using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace UnitTestProject1 { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } } } ``` これを書き換えて Switch をテストしますが、その前にテストプロジェクトからメインプロジェクトを参照します。 まず Ctrol+w を押し、次に s を押してソリューションエクスプローラーを表示します。 その中の UnitTestProject1 を展開し、参照を右クリックして参照の追加で参照マネージャーを開きます。 左のペインからプロジェクトを選択し、ConsoleApp1 をチェックして OK を押します。 それではテストを作りましょう。 想定しない文字列が渡された時の挙動は指定されていないので、null を返すことにします。 ``` using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace UnitTestProject1 { [TestClass] public class UnitTest1 { [TestMethod] public void SwitchTest() { var pairs = new[] { new{S = "川", D = "山"}, new{S = "山", D = "川"}, new{S = "海", D = "滝"}, new{S = "どちらでもない", D = (string)null}, }; foreach (var pair in pairs) { ConsoleApp1.Convert.Switch(pair.S, out string dst); Assert.AreEqual(dst, pair.D); } } } } ``` メニューからテスト→ウィンドウ→テストエクスプローラーでテストエクスプローラーを表示し、すべてを実行してください。 テストはもちろん失敗します。 ここまでできたら後は簡単です。 Switch を実装し、テストが通るようにしてください。 それができたら Main にそれを呼び出す処理を書いて完成です。