黑马程序员技术交流社区
标题: 为什么“喂食代码”会报错?难道写的不对吗? [打印本页]
作者: qly2046 时间: 2013-12-17 16:21
标题: 为什么“喂食代码”会报错?难道写的不对吗?
本帖最后由 qly2046 于 2013-12-30 11:44 编辑
class Program
{
static void Main(string[] args)
{
//聊天机器人
机器人 r1 = new 机器人();
r1.Name = "小米";
r1.Eat(5);
机器人 r2 = new 机器人();
r2.Name = "红米";
r2.Eat(3);
机器人 r;
Console.WriteLine("请选择机器人!1-小米,2-红米");
stringinput=Console.ReadLine();
if(input=="1")
{
r = r1;
}
else
{
r = r2;
}
r.SayHello();
while(true)
{
stringstr = Console.ReadLine();
r.Speak(str);
}
Console.ReadKey();
}
}
//聊天机器人
class 机器人
{
public string Name { get; set; }
public int FullLevel { get; set; }
public void SayHello()
{
Console.WriteLine("大家好!我叫{0}!", Name);
}
public void Eat(int FoodCount)
{
if(FullLevel > 100)
{
Console.WriteLine("不能吃了,快撑死了!");
return;
}
FullLevel=FullLevel+ FoodCount;
}
public void Speak(stringstr)
{
if(FullLevel<= 0)
{
Console.WriteLine("饿死了,不说了!请给吃的!");
FullLevel = Convert.ToInt32(Console.ReadLine());//就是这句喂食代码出错了!大家可以复制运行一下
return;
}
if(str.Contains("姓名") || str.Contains("名字"))
{
this.SayHello();
}
elseif (str.Contains("女朋友"))
{
Console.WriteLine("年龄小,不考虑!");
}
else
{
Console.WriteLine("太深奥,听不懂!");
}
FullLevel--;
}
}
作者: 如远行客 时间: 2013-12-19 17:45
本帖最后由 如远行客 于 2013-12-19 18:40 编辑
你这段代码太粗糙了,也不把哪里出错写出来。
我不知道你为什么把fullLever定义成public,这个字段应该是不能让外界访问的.
你在Speak方法里面的那个判断fullLever时,如果需要喂食,等待用户输入,然后直接给fullLever赋值,那你上面定义的机器人吃饭的方法有什么用呢???应该是在用户输入结束后调用上面机器人吃饭的方法,使它的fullLever重新大于0。这样才能继续聊天。
作者: V_John 时间: 2013-12-19 17:49
把报错信息贴出来,大家好解决啊!
作者: qly2046 时间: 2013-12-20 15:35
-
机器人.jpg
(65.05 KB, 下载次数: 13)
作者: 275253707 时间: 2013-12-29 23:01
你运行代码里后面那句Console.ReadKey(); 没有用处。。。另外就是你把这句FullLevel = Convert.ToInt32(Console.ReadLine());代码写在讲话饿死后应该是想要再它饿死后给它喂食的吧。。。但是你那里没有任何给它输入喂食的提示,就直接将输入的字符串转换为数字,如果是数字的话就没问题,如果不是数字,那肯定会报错啊。你可以给那里的转化加个提示和try catch。
作者: haxyek 时间: 2013-12-30 00:38
有没有发现
Eat 函数写了没调用
喂食的时候,应该传入参数到Eat()吧?
还有就是贴错误信息的时候,写出来信息,别说哪里错了。。也让我看看错哪里了,截图太小。
作者: 许杰 时间: 2013-12-30 10:43
本帖最后由 许杰 于 2013-12-30 10:45 编辑
首先 你的喂食代码怎么能放在说话的方法里面呢 其次 如果放在里面的话我给你喂食如果输入的不是数字怎么办 肯定会报错的 应该机上一个try-catch或者就是int.TryParse 然后反复判断是否输入正确 才行
最后你喂食都没有吧食物吃下去 只让看 那不就会一直饿着啊 修改后的代码 给你参考下
bool flag=true;
while (flag)
{
try
{
FullLevel = Convert.ToInt32(Console.ReadLine()); //这里是喂食数量
Eat(FullLevel); //这里才是吃饭 你没加上
flag = false; //跳出while
}
catch
{
Console.WriteLine("你就不能认真点吗?输入数字会死啊!"); //如果输入的不是数字提醒 继续在while里判断输入
}
}
作者: qly2046 时间: 2013-12-30 22:24
大哥,是这样写吗?可是仍然有问题耶?喂食都是双倍的了!
作者: 许杰 时间: 2013-12-31 14:03
本帖最后由 许杰 于 2013-12-31 14:09 编辑
肯定是双倍的喂食了
你的Eat方法里面的喂食时这样的:FullLevel = FullLevel + FoodCount;
这个FullLevel和FoodCount其实是一个值,所以就会出现双倍喂食了
应该在输入喂食的数量单独定义一个变量的存储才对 或者把这一段代码改成下面的:
***********************************************************************************************
Console.WriteLine("饿死了,不说了!请给吃的!");
FullLevel = Convert.ToInt32(Console.ReadLine()); //这里是喂食数量
Eat(FullLevel); //这里才是吃饭 你没加上
***********************************************************************************************
***********************************************************************************************
Console.WriteLine("饿死了,不说了!请给吃的!");
Eat(Convert.ToInt32(Console.ReadLine())); ***********************************************************************************************
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |