黑马程序员技术交流社区

标题: 为什么“喂食代码”会报错?难道写的不对吗? [打印本页]

作者: 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)

机器人.jpg

作者: 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-30 10:43
首先  你的喂食代码怎么能放在说话的方法里面呢   其次   如果放在里面的话我给你喂食如果输入的不是数字怎 ...
  1. class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {



  5.             //聊天机器人

  6.             机器人 r1 = new 机器人();

  7.             r1.Name = "小米";

  8.             r1.Eat(5);

  9.          

  10.             机器人 r2 = new 机器人();

  11.             r2.Name = "红米";

  12.             r2.Eat(3);

  13.            

  14.             机器人 r;

  15.             Console.WriteLine("请选择机器人!1-小米,2-红米");

  16.             string input =Console.ReadLine();

  17.             if(input=="1")

  18.             {

  19.                 r = r1;           

  20.             }

  21.             else

  22.             {

  23.                 r = r2;

  24.             }

  25.             r.SayHello();

  26.            while(true)

  27.            {

  28.                string  str = Console.ReadLine();

  29.                r.Speak(str);

  30.            }

  31.            Console.ReadKey();                     

  32.         }

  33.     }

  34.     //聊天机器人

  35.     class 机器人

  36.     {

  37.         public string Name { get; set; }



  38.         public int FullLevel { get; set; }



  39.         public void SayHello()

  40.         {

  41.             Console.WriteLine("大家好!我叫{0}!", Name);

  42.         }

  43.         public  void Eat(int FoodCount)

  44.         {           

  45.             if(FullLevel > 100)

  46.             {

  47.                 Console.WriteLine("不能吃了,快撑死了!");

  48.                 return;

  49.             }

  50.              FullLevel=FullLevel+ FoodCount;

  51.         }

  52.         public void Speak(string str)

  53.         {

  54.             if(FullLevel<= 0)

  55.             {
  56.                 Console.WriteLine("饿死了,不说了!请给吃的!");
  57.                 FullLevel = Convert.ToInt32(Console.ReadLine());  //这里是喂食数量
  58.                 Eat(FullLevel);    //这里才是吃饭   你没加上
  59.                 return;               

  60.             }         

  61.             if(str.Contains("姓名") || str.Contains("名字"))

  62.             {

  63.                 this.SayHello();

  64.             }

  65.             else if (str.Contains("女朋友"))

  66.             {

  67.                 Console.WriteLine("年龄小,不考虑!");

  68.             }

  69.             else

  70.             {

  71.                 Console.WriteLine("太深奥,听不懂!");

  72.             }

  73.             FullLevel--;
  74. }
复制代码


大哥,是这样写吗?可是仍然有问题耶?喂食都是双倍的了!
作者: 许杰    时间: 2013-12-31 14:03
本帖最后由 许杰 于 2013-12-31 14:09 编辑
qly2046 发表于 2013-12-30 22:24
大哥,是这样写吗?可是仍然有问题耶?喂食都是双倍的了!

肯定是双倍的喂食了  
你的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