none
オーバーライドを利用したチャットボットの作成 RRS feed

  • 質問

  • 本日は、Vs 2017を用いて「オーバーライドを利用したチャットボットの作成」について、ご助言お願いします。

    △工程

    1、フォームアプリ用プロジェクト「Chatbot」を作成。

    2、プロジェクトメニューのクラスを選択し「CSharpchan.cs」という名前で

      クラス用ファイルを作成。

    3、コード記述。

    4、ビルド開始。

    ~結果、「CS1513」「CS1035」二つのエラーが出ました。

    質問1、「CS1513」のエラーは、「 」追加することで、解決しました。

        解決とは、「 」下にある赤い波線は、消えたということです。と、同時にビルド開始時表示された「CS1513」エラーが消えたと言う事です。

        で、疑問があります。

        手本には、「 」のみで、追加の「 」は無いのです。

        で、エラーは消えましたが、手本に無い「 」を追加することでの影響はないの

    でしょうか?

    質問2、「CS1035 ファイルの終わりがみつかりました。'*/*が必要です。」にて、

    1)'*/*」の「'」は(シングルクオーテーション 注ボード1列)で、間違いないか?

    もしくは、(バックコーテーション 注ボード2)なのか?

    2)*/*」の「*」は(アスタリスク 注ボード3)で、間違いないか?

    3)CS1035 ファイルの終わりがみつかりました。'*/*が必要です。」と、ありますが

    コードの何処に記述したらいいのか?

    質問3、記述したコードの字が、全部「緑」ですが、「青」とか「茶」色の字がありません

        が、何か変な感じなのですが?

    質問4、コード記述中、入力支援機能(インテリセンス)が、働きません。

        如何してでしょうか?

    以上、宜しくお願いします。

    追伸:要領得ない質問ですみません。

       私が記述した、コードを下記に添付します。

    namespace ChatbootFormsApp4
    {
        /*        
         * C#ちゃんの本体クラス
         * 
         * /       
        class CSharpchan
        {
        private string          name;       // オブジェクトの名前を保持するフィールド
        private RandomResponder res_random; // RandomResponderのインスタンスを保持する
        private RepeatResponder res_repeat; // RepeatResponderのインスタンスを保持する
        private Responder       responder;  // Responder型のフィールド

        pubic string Name                  // nameフィールドにアクセスするためのプロパティ

        {
        get{return name;}
        set{name = value;}
        }

        //コンストラクター
        public CSharpchan(string name)
        {
        this.name=name;
        res_random = new RandomResponder("Random"); // RandomResponderをインスタンス化

        res_repeat = new RepeatResponder("Repeat"); // RepeatResponderをインスタンス化
        }

        //応答メッセージを返すメソッド
        public string Dialogue(string input)
        {
        Ramdom rnd = new Random();     // Randomのインスタンス化
        int num = rnd.Next(0, 10);     // 0~9の範囲の値をランダムに生成
        if  (num <6)                   // 0~5ならRandomResponderをチョイス
        {
        this.responder = res_random;
        }
        else                           // 6~9なら RepeatResponderをチョイス
        {
        this.responder = res_repeat;
        }
        // チョイスしたオブジェクトのResponse()メソッドを実行し
        // 応援メッセージを戻り値として返す
        return this.responder.Response(input);
        }

        // チョイスしたオブジェクトの名前を返すメソッド
        public string GetName()
        {
        return responder.Name;
        }
      }
    }

    2018年12月4日 7:29

回答

  • 「プログラム」を理解していれば、どんな「言語」にも応用できます。
    (「手続き型言語」ならば)
    組み込み開発ならC/C++。ウェブアプリケーションならperl、ruby、phpあたりが使われているでしょう。雑多な情報に惑わされないことも大事。

    いや、これは本来の質問に対する回答やないでしょ。


    Jitta@わんくま同盟


    • 回答としてマーク genkidesu2018 2018年12月19日 9:30
    • 編集済み Jitta 2018年12月19日 11:36 返信
    2018年12月19日 1:03

すべての返信

  • 質問1については、もちろん手本の方が間違っている可能性が間違っている場合は正しい解決方法です。

    が、今回の場合はおそらくgenkidesu2018さんが入力されたコードが間違っています。

    質問2, 3, 4すべてに関わることですが、Visual StudioのC#コードエディタでは、既定では緑色で表示されるのは「コメント」です。つまり、全部緑になっているということは全部コメント扱いになっているということです。

    で、なんでそうなっているかというと、冒頭の /* で始まっている部分ですね。C#では複数行コメントを /* */ のペアで開始終了を提示します。

    しかし、genkidesu2018さんのコードでは、コメントの終わりを指示しようとしている箇所で、* / と、*と/の間に空白が混ざってしまっています。そのためここの部分がコメント終了と見做されず、ソースファイル末尾まで全部がコメント扱いになっているのです。コメントが終わっていないため、ファイルの終了よりも先にコメントの終了を入力してくれ、というエラーですね。

    • 回答の候補に設定 Jitta 2018年12月19日 11:36
    2018年12月4日 8:16
  • 早々のご助言、有難うございます。

    ご助言通り空白を埋めたら解決しました。

    本当に有難うございます。

    で、新たな問題ですが

    問題、「CS0246」の表示が出ました。

        で、検索したところ、幾つかの原因の中で、私には「スペル」の間違いの可能性が高いと自覚し、何度もチェックしましたが・・・間違いはありませんでした。

    (*チェックの方法としては、「メモ」にコピーをして手本とのチェックをしました。)

    ~以下、表示が出た三点のワードです。

    RandomResponderRandomは、アセンブリ参照にて指定されますが、Responderは、指定さ

            れません)

    RepeatResponder(初めから指定されません)

    Responder   (初めから指定されません)

    以上です。

    ご助言、宜しくお願いします。

    尚、以下にコードをコピーします。

    private string          name;       // オブジェクトの名前を保持するフィールド

        private RandomResponder res_random; // RandomResponderのインスタンスを保持する

        private RepeatResponder res_repeat; // RepeatResponderのインスタンスを保持する

        private Responder       responder;  // Responder型のフィールド

        public string Name                  // nameフィールドにアクセスするためのプロパティ

        {

        get{return name;}

        set{name = value;}

        }

        //コンストラクター

        public CSharpchan(string name)

        {

        this.name=name;

        res_random = new RandomResponder("Random"); // RandomResponderをインスタンス化

        res_repeat = new RepeatResponder("Repeat"); // RepeatResponderをインスタンス化

        }

    2018年12月5日 5:54
  • おそらく「VisualC#2017パーフェクトマスター」という本を頼りにされているかと思いますが、
    まずは本に記載されているコード全てを作成してはいかがでしょうか?
    以降のページ(「応答クラスのスーパークラス」「核心の対話処理その1」「核心の対話処理その2」)という章で、
    該当するクラスのコードが記載されています。

    また、大きなお世話かもしれませんが、
    本の内容をただコピーするだけでなく、各処理が何をしているのか理解することが重要かと思います。
    質問内容を見るに、もっと前の基本となる章を先に理解されたほうがよいのではないでしょうか。
    2018年12月5日 6:23
  • 早々のご助言、有難うございます。

    ご助言通り、”まずは本に記載されているコード全てを作成して”みます。

    又、何かありましたら宜しくお願いします。

    追伸①:全然、”大きなお世話”ではないです。

         全く、其の通りです。

         御迷惑をおかけして、すみません。

    追伸②:今の私は、ともかく実行して出てきた”問題”に対症しながら慣れて行こうと言うスタンスでやっております。

          ので、御迷惑をおかけしますが、宜しくお願いします。

    2018年12月5日 7:17
  • "負んぶに抱っこ"のようなメールで申し訳ありません。

    uemu様から見ての私の様な、レベルに合う本か、サイトをご紹介頂くと目下の幸いです。

    2018年12月7日 15:39
  • 本やサイトには合う合わないがありますので、
    genkidesu2018様が選ばれた、今の本で問題ないと思います。
    ただ本の通りに書き写すのではなく、各行が何をやっているのか理解することが重要です。

    これだけの回答ですとアレなので。。。
    私がプログラムを始めたばかりの頃(C#ではなくC言語ですが…)にお世話になったサイトを紹介しておきます。
    猫でもわかるプログラミング

    C#についても記載がありますので、合うかどうか少し読んでみてもよいかもです。

    なお、C#は「コンソール編」と「フォーム編」にわかれていますが、
    最初は「コンソール編」から読み進めたほうがよさそうです。

    2018年12月10日 2:56
  • 返信、有難うございます。

    少し、心が折れかかっていましたが・・・

    uemu様の返信で・・・回復しました。(笑い)

    頑張ります。

    サイトの紹介までして頂いて、感激です。(礼)

    本を昨日は、色々と検索しておりました。

    が、ご助言どおり今の本で頑張ります。

    失礼します。

    2018年12月10日 7:50
  • 何時も、適切なご助言有難うございます。。

    本日は、技術的な質問ではないのですが・・・

    御存知の通り私は今、VS2017 C#を勉強しておりますが、

    偶然に以下の記事を目にしました。

    日経 xTECH201810月に「プログラミング言語実態調査」をWebサイト上で実施した。その結果、現場で使われているプログラミング言語がはっきりと浮かび上がった。

    利用言語の第1位はC/C++・・・

    スキルを磨きたい言語の第1位は「Python」だった。回答者1000人中、実に670人がPythonを選んだ。」(抜粋)

    で、端思ったのですが・・・

    自分が今勉強している言語は、どの程度の「普遍性」を持っているのか?

    疑問が湧いてきました。

    無論、今の私のレベルは御指摘されるまでもなく自覚しております。(笑い)

    今は兎も角、我武者羅に学習及びプログラム作成と思っているのですが、

    又、「一事が万事」を身上としている私でありますが・・・

    何か、モヤモヤして変なスランプに陥っております。

    こんな私に、一言頂けると目下の幸いです。

    宜しくお願いします。

    2018年12月18日 11:37
  • 「プログラム」を理解していれば、どんな「言語」にも応用できます。
    (「手続き型言語」ならば)
    組み込み開発ならC/C++。ウェブアプリケーションならperl、ruby、phpあたりが使われているでしょう。雑多な情報に惑わされないことも大事。

    いや、これは本来の質問に対する回答やないでしょ。


    Jitta@わんくま同盟


    • 回答としてマーク genkidesu2018 2018年12月19日 9:30
    • 編集済み Jitta 2018年12月19日 11:36 返信
    2018年12月19日 1:03
  • ご助言、有難うございます。

    大変、力強いお言葉を頂きました。

    精進します。

    2018年12月19日 9:29