トップ回答者
オーバーライドを利用したチャットボットの作成

質問
-
本日は、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;
}
}
}
回答
すべての返信
-
質問1については、もちろん手本の方が間違っている可能性が間違っている場合は正しい解決方法です。
が、今回の場合はおそらくgenkidesu2018さんが入力されたコードが間違っています。
質問2, 3, 4すべてに関わることですが、Visual StudioのC#コードエディタでは、既定では緑色で表示されるのは「コメント」です。つまり、全部緑になっているということは全部コメント扱いになっているということです。
で、なんでそうなっているかというと、冒頭の /* で始まっている部分ですね。C#では複数行コメントを /* */ のペアで開始終了を提示します。
しかし、genkidesu2018さんのコードでは、コメントの終わりを指示しようとしている箇所で、* / と、*と/の間に空白が混ざってしまっています。そのためここの部分がコメント終了と見做されず、ソースファイル末尾まで全部がコメント扱いになっているのです。コメントが終わっていないため、ファイルの終了よりも先にコメントの終了を入力してくれ、というエラーですね。
- 回答の候補に設定 Jitta 2018年12月19日 11:36
-
早々のご助言、有難うございます。
ご助言通り空白を埋めたら解決しました。
本当に有難うございます。
で、新たな問題ですが
問題、「CS0246」の表示が出ました。
で、検索したところ、幾つかの原因の中で、私には「スペル」の間違いの可能性が高いと自覚し、何度もチェックしましたが・・・間違いはありませんでした。
(*チェックの方法としては、「メモ」にコピーをして手本とのチェックをしました。)
~以下、表示が出た三点のワードです。
RandomResponder(Randomは、アセンブリ参照にて指定されますが、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をインスタンス化
}
-
-
本やサイトには合う合わないがありますので、
genkidesu2018様が選ばれた、今の本で問題ないと思います。
ただ本の通りに書き写すのではなく、各行が何をやっているのか理解することが重要です。
これだけの回答ですとアレなので。。。
私がプログラムを始めたばかりの頃(C#ではなくC言語ですが…)にお世話になったサイトを紹介しておきます。
「猫でもわかるプログラミング」C#についても記載がありますので、合うかどうか少し読んでみてもよいかもです。
なお、C#は「コンソール編」と「フォーム編」にわかれていますが、
最初は「コンソール編」から読み進めたほうがよさそうです。
-
何時も、適切なご助言有難うございます。。
本日は、技術的な質問ではないのですが・・・
御存知の通り私は今、VS2017 C#を勉強しておりますが、
偶然に以下の記事を目にしました。
「日経 xTECHは2018年10月に「プログラミング言語実態調査」をWebサイト上で実施した。その結果、現場で使われているプログラミング言語がはっきりと浮かび上がった。
利用言語の第1位はC/C++・・・
スキルを磨きたい言語の第1位は「Python」だった。回答者1000人中、実に670人がPythonを選んだ。」(抜粋)
で、端思ったのですが・・・
自分が今勉強している言語は、どの程度の「普遍性」を持っているのか?
疑問が湧いてきました。
無論、今の私のレベルは御指摘されるまでもなく自覚しております。(笑い)
今は兎も角、我武者羅に学習及びプログラム作成と思っているのですが、
又、「一事が万事」を身上としている私でありますが・・・
何か、モヤモヤして変なスランプに陥っております。
こんな私に、一言頂けると目下の幸いです。
宜しくお願いします。