黑马程序员——.NET笔记10 面向对象版聊天机器人
来源:互联网 发布:sql left join where 编辑:程序博客网 时间:2024/06/04 18:25
---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
面向对象版聊天机器人练习
机器人有名字、FullLevel
可以SayHi、Eat(int foodCount)、Speak
异常处理:喂太多撑死
有两个机器人,一开始通过1、2数字选择
看视频讲解前写的代码:
using System;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { Android x1 = new Android(); Android x2 = new Android(); x1.Name = "小Q"; x2.Name = "小I"; Console.WriteLine("聊天机器人{0}和{1}诞生!\n输入1选择{0},输入2选择{1},然后你可以跟它对话了。",x1.Name,x2.Name); string s = Console.ReadLine(); if (s=="1") { while (true) { x1.Speak(); } } else //输入2或其它字符 { while (true) { x2.Speak(); } } } } class Android { private string name; public string Name { get{ return name; } set{ this.name = value; } } private int FullLevel=5; public void SayHi() { Console.WriteLine("你好,我叫{0}",Name); } public void Eat(int foodCount) { if (FullLevel>100) { Console.WriteLine("我吃饱了。"); } else { FullLevel=FullLevel+foodCount; } } public void Speak() { string str = Console.ReadLine(); if (FullLevel>0 && FullLevel<3) { Console.WriteLine("我很饿,给点吃的吧。(喂食方式,输入:喂食)"); } else if (str!="喂食" && FullLevel<0) { Console.WriteLine("饿死了,不说了。"); return; } else if (str.Contains("名字")||str.Contains("叫什么")) { this.SayHi(); } else if (str.Contains("女朋友")) { Console.WriteLine("机器人不需要女朋友。"); } else if (str=="喂食") { this.Eat(10); Console.WriteLine("体力正在恢复……"); } else { Console.WriteLine("不懂你在说什么……"); } FullLevel--; } }}听完讲解后修改部分:
类似于Python中,变量名 与 变量(值) 之间的对应关系是一种绑定 ,代码中用“=”对变量名进行赋值,实际上是变量名绑定到另一个变量,原变量并未改变
上面的理解有误,C#中存在值类型与引用类型,值类型会传递时会传递拷贝副本,引用类型传递引用
C#的值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。数组的元素,不管是引用类型还是值类型,都存储在托管堆上。引用类型在栈中存储一个引用,其实际的存储位置位于托管堆。为了方便,本文简称引用类型部署在托管推上。值类型总是分配在它声明的地方:作为字段时,跟随其所属的变量(实例)存储;作为局部变量时,存储在栈上。值类型在内存管理方面具有更好的效率,并且不支持多态,适合用作存储数据的载体;引用类型支持多态,适合用于定义应用程序的行为。
选择机器人的代码可简化:
Android x; if (s=="1") { x = x1; } else //输入2或其它字符 { x = x2; } while (true) { x.Speak(); }
按讲解前想过到的思路可如下实现:
static void Main(string[] args) { Android x1 = new Android(); Android x2 = new Android(); x1.Name = "小Q"; x2.Name = "小I"; Console.WriteLine("聊天机器人{0}和{1}诞生!\n输入1选择{0},输入2选择{1},然后你可以跟它对话了。",x1.Name,x2.Name); string s = Console.ReadLine(); int c = 0; Android[] x=new Android[2]{x1,x2}; if (s!="1") { c = 1; } while (true) { x[c].Speak(); } }
漏了吃太多撑死的处理,在Eat()方法中增加一个else if(){}
else if (FullLevel > 120) { Console.WriteLine("撑死了,不吃了。"); FullLevel = 120; }
如果要在Speak()中“撑死”,即退出while循环或退出程序该怎么处理?不改动Main()的情况下。
.
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net
- 黑马程序员——.NET笔记10 面向对象版聊天机器人
- 黑马程序员_c#面向对象基础:聊天机器人
- 黑马程序员——.NET笔记7 面向对象 类
- 黑马程序员——面向对象笔记
- 黑马程序员------入学资格------面向对象版对话机器人
- 黑马程序员——.NET笔记9 面向对象(第二季教程)
- 黑马程序员—面向对象
- 黑马程序员—面向对象
- 黑马程序员—面向对象
- 黑马程序员《.NET 面向对象》
- 黑马程序员:聊天机器人练习
- 黑马程序员——面向对象学习笔记回忆
- 黑马程序员——面向对象之继承学习笔记
- 【黑马程序员】 java笔记——面向对象
- 黑马程序员——学习笔记05.java面向对象
- 黑马程序员笔记——Java面向对象之封装
- 黑马程序员笔记——Java面向对象之继承
- 黑马程序员笔记——Java面向对象之多态
- Java基础 (二)(面向对象)
- Mysql 的主从复制,最多支持多少个数据库同步
- 修改一行SQL代码 性能提升了100倍
- 黑马程序员——.NET笔记9 面向对象(第二季教程)
- 阿里巴巴一道算法题
- 黑马程序员——.NET笔记10 面向对象版聊天机器人
- hadoop在CentOS上的安装部署
- LeetCode 17: Letter Combinations of a Phone Number
- arm-linux-gcc
- Windows和Linux下的Sleep()函数小结
- 黑马程序员————高新技术————类加载器
- POJ-3345 Bribing FIPA(Tree dp + 背包)
- who命令的编写——登录与注销__who, whoami, who am i
- hdu 3486 Interviewe 二分+RMQ