質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.32%

  • C#

    7714questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C#のSwitch文になります。

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 283

shbtk6is

score 3

問題が
"Switch文を用いてキーボードから入力された文字が川なら山、山なら川、海なら滝と表示するプログラムを作成せよ。"
と言うものなのですが何もわからないので教えてください

C#になります。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2018/10/13 13:52

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 3

checkベストアンサー

+10

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 にそれを呼び出す処理を書いて完成です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/13 08:28

    おれもやる!

    キャンセル

+7

何もわからない

とりあえず、C#に入門しましょう。

https://www.amazon.co.jp/s/search-alias=aps&field-keywords=C%23

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

「C# switch」でぐぐってでてきたのを一通り読んでみよう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/12 23:58

    ありがとうございます。
    ただあまりそれでうまく作れなかったので教えていただけませんか?

    キャンセル

  • 2018/10/13 00:03

    うまく作れなかったとはどういうふうに作れなかった?
    で、なにを教えるの?

    キャンセル

同じタグがついた質問を見る

  • C#

    7714questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。