A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

黄宁川

初级黑马

  • 黑马币:0

  • 帖子:5

  • 精华:0

照着视频练习飞行棋游戏中出现了问题,我对照视频和老师的代码一致怎么我的就出现问题了,请老黑帮忙看下,我ReadInt用的图2的代码,调试出现问题VS提示有可能出现无限循环或无限递归,我看视频中老师的代码是图1的但是我的就会出现问题。飞行棋其他功能都正常就这个ReadInt有问题,一下午时间没搞懂,请指教!

图2.jpg (44.07 KB, 下载次数: 118)

图2.jpg

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

9 个回复

倒序浏览
你定义了一个方法最后用来调用该方法。
图2你所写的的代码:static int ReadInt(int a int b )
              {
                         int i = ReadInt (int.MaxValue int Min.Value);
                         return i ;
                     }
你下面的代码已定义最大值和最小值两个参数,并返回。与你上面定义的int a ,int b相矛盾,无法运行。除去int a,int b 两个参数。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
错,谁的错丶 发表于 2012-5-1 22:01
你定义了一个方法最后用来调用该方法。
图2你所写的的代码:static int ReadInt(int a int b )
          ...

如果去掉int a , int b 的话就出现第一张图的问题,我再发下去掉后出现问题的包含错误列表的截图

3.jpg (46.36 KB, 下载次数: 108)

3.jpg

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
你第一个函数调用的是函数本身,所以会出现无限循环的问题,应调用第二个函数,而且函数的参数也有问题。
  1. static int ReadInt()
  2.         {
  3.             int i, minVal = 1, maxVal = 6;
  4.             return i = RdadIn(minVal, maxVal);
  5.         }


  6.         static int RdadIn(int min, int max)
  7.         {
  8.             while (true)
  9.             {
  10.                 try
  11.                 {
  12.                     int number = Convert.ToInt32(Console.ReadLine());
  13.                     if (number < min || number > max)
  14.                     {
  15.                         Console.WriteLine("只能输入{0}-{1}之间的数字,请重新输入:", min, max);
  16.                         continue;
  17.                     }
  18.                     return number;
  19.                 }
  20.                 catch
  21.                 {
  22.                     Console.WriteLine("只能输入数字,请重新输入:");
  23.                 }
  24.             }
  25.         }
复制代码
因为你想读入的是满足一个范围的数字,所以你要给出这个范围的最大值和最小值

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
你的方法重载有问题!注意看方法名!

未命名.jpg (3.31 KB, 下载次数: 82)

未命名.jpg

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
stratic int ReadInt (int a ,int b)
{
  int i = ReadInt (int.MaxValue int Min.Value);
                         return i ;
}
这个方法出现了无限递归,方法无法跳出,成了递归
ReadInt你想写的应该是调用RdaIn这个方法吧

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
方法名写错了,应该是该是:ReadIn(a,b);

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
郑森 发表于 2012-5-2 13:46
方法名写错了,应该是该是:ReadIn(a,b);

:'( 谢谢,非常感谢!我总是找不到原因,前面几个朋友的方法试了都出现报错,从昨天到现在郁闷的不得了。看到你的提示恍然大悟,谢谢!!!
回复 使用道具 举报
方法名应该是readin(a,b)传的参数在方法中又被引用了所以造成了无限递归了

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
黄宁川 发表于 2012-5-1 22:17
如果去掉int a , int b 的话就出现第一张图的问题,我再发下去掉后出现问题的包含错误列表的截图 ...

不好意思,最近几天没上论坛,刚看到,也把你这个问题简单做了一遍,代码如下:
namespace 输入最大数与最小数之间的数
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请输入一个数字!");
            int i = 0;
            i = readInt(2, 10);
            Console.ForegroundColor = ConsoleColor.Blue;// 蓝色
            Console.WriteLine("您输入了数字"+ i);
            Console.ReadKey();
        }
        public static int readInt()
        {
            int i = readInt(int.MaxValue, int.MinValue);
            return i;
        }
        public static int readInt(int min, int max)
        {
            while (true)
            {
                try
                {
                    int number = Convert.ToInt32(Console.ReadLine());
                    if (number < min || number > max)
                    {
                        Console.WriteLine("只能输入{0}-{1}之间的数字,请重新输入!", min, max);
                        continue;
                    }
                    return number;
                }
                catch
                {
                    Console.WriteLine("只能输入数字,请重新输入!");
                }
            }
        }
    }
}
你最后运行时你看看传参数了没。比如: i = readInt(2, 10);

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马