黑马程序员技术交流社区

标题: 闰年判断的异常捕捉 [打印本页]

作者: 万大述    时间: 2013-6-26 09:47
标题: 闰年判断的异常捕捉
想捕捉异常,并能让用户不断输入一个年份,判断该年份是否闰年,可当输入字符时,即便输入正确时程序也不正常执行了。代码及截图如下:
            int year=2008;//赋默认值
            bool flag = true;
            do
            {
                try
                {
                    Console.WriteLine("请输入一个年份:");
                    year = Convert.ToInt32(Console.ReadLine());
                }
                catch
                {
                    Console.WriteLine("请输入整数!");
                    flag = true;
                }
            } while (flag);
            Console.WriteLine();
            if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) //判断是否闰年
            {
                Console.WriteLine(year + "是闰年!");
            }
            else
            {
                Console.WriteLine(year + "不是闰年!");
            }


作者: 菜鸟励志要逆袭    时间: 2013-6-26 10:44
这个程序在do-while循环中出不去。所以下面的if-else语句根本没机会运行。而且还有一个问题就是由于year会存储上一个你输入的正确年份。即使你输入字符时,他也会按着最后存储的数子执行if-else。
int year=2008;//赋默认值
            bool flag = true;
            do
            {
                try
                {
                    Console.WriteLine("请输入一个年份:");
                    year = Convert.ToInt32(Console.ReadLine());
                }
                catch
                {
                    Console.WriteLine("请输入整数!");
                    flag = true;
                }

                Console.WriteLine();
                if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) //判断是否闰年
                {
                    Console.WriteLine(year + "是闰年!");
                }
                else
                {
                    Console.WriteLine(year + "不是闰年!");
                }
            } while (flag);

作者: 王鹏程    时间: 2013-6-26 11:27
            int year = 2008;//赋默认值
            bool flag = true;
            do
            {
                try
                {
                    Console.WriteLine("请输入一个年份:");
                    year = Convert.ToInt32(Console.ReadLine());
                    flag = true;
                }
                catch
                {
                    Console.WriteLine("请输入整数!");
                    flag = false;
                }
            } while (flag == false);
            Console.WriteLine();
            if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) //判断是否闰年
            {
                Console.WriteLine(year + "是闰年!");
            }
            else
            {
                Console.WriteLine(year + "不是闰年!");
            }
运行结果如图:

QQ截图20130626112542.jpg (4.75 KB, 下载次数: 0)

QQ截图20130626112542.jpg

QQ截图20130626112613.jpg (13.88 KB, 下载次数: 0)

QQ截图20130626112613.jpg

作者: y96352    时间: 2013-6-26 12:51
do-while循环开始就出不来了  bool flag = true;这个可以改成 bool flag = false;
  int year;
            bool flag = false;
            do
            {
                try
                {
                    Console.WriteLine("请输入一个年份:");
                    year = Convert.ToInt32(Console.ReadLine());
                }
                catch
                {
                    Console.WriteLine("请输入整数!");
                    flag = true;
                }
            } while (flag);
            Console.WriteLine();
            if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) //判断是否闰年
            {
                Console.WriteLine(year + "是闰年!");
            }
            else
            {
                Console.WriteLine(year + "不是闰年!");
            }
console.readkey();
作者: 关关雎鸠    时间: 2013-6-26 12:56
死循环!输入正确后,flag并没有设置为false,那么在while(flag)中还是为真,因此就这样死循环了。。。

调试下你看代码的运行轨迹就很清楚了。。
作者: 浪子小雨    时间: 2013-6-26 23:20
int year = 2008;//赋默认值
            while (true)
            {
                try
                {
                    Console.WriteLine("请输入一个年份:");
                    year = Convert.ToInt32(Console.ReadLine());
                }
                catch
                {
                    Console.WriteLine("请输入整数!");
                    continue;
                }

                if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) //判断是否闰年
                {
                    Console.WriteLine(year + "是闰年!");
                }
                else
                {
                    Console.WriteLine(year + "不是闰年!");
                }
            }
这样可以吗?
作者: 孤独客    时间: 2013-6-26 23:45
你的循环是死循环,不管你输入是否正确都无法跳出循环,你在try中加一句break来帮助你跳出循环。这样就可以执行后面代码。
作者: sym544135698    时间: 2013-6-29 19:42
do-while循环中没有跳出模式,while的判断的条件为flag的话,try的{}里面也需要一个flag值
  1. int year=2008 ;//赋默认值
  2.             bool flag = true;
  3.             do
  4.             {
  5.                 try
  6.                 {
  7.                     Console.WriteLine("请输入一个年份:");
  8.                     year = Convert.ToInt32(Console.ReadLine());
  9.                     flag = false;
  10.                 }
  11.                 catch
  12.                 {
  13.                     Console.WriteLine("请输入整数!");
  14.                     flag = true;
  15.                 }
  16.             } while (flag);
  17.             Console.WriteLine();
  18.             if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) //判断是否闰年
  19.             {
  20.                 Console.WriteLine(year + "年是闰年!");
  21.             }
  22.             else
  23.             {
  24.                 Console.WriteLine(year + "年不是闰年!");
  25.             }

  26.             Console.ReadKey();
复制代码
所以只要加一个flag=false;,让程序跳出输出循环就可以了
作者: 月儿圆    时间: 2013-6-29 21:08
对于楼主这类的问题,可以直接设个断点就很直观的看出来怎么回事了,你是不是可以把问题改为"已解决"了?

作者: 万大述    时间: 2013-7-3 11:41
谢谢各位啦!
作者: 万大述    时间: 2013-7-3 11:49
尝试了N次,无奈没找着设置为已解决的方法{:soso_e105:},望见谅~
作者: sym544135698    时间: 2013-7-4 12:31
你进入你的帖子,在你的发的问题的你那一楼的最下方有个编辑,你点击就可以进去修改你的问题的状态了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2