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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 万大述 中级黑马   /  2013-6-26 09:47  /  1891 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

想捕捉异常,并能让用户不断输入一个年份,判断该年份是否闰年,可当输入字符时,即便输入正确时程序也不正常执行了。代码及截图如下:
            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 + "不是闰年!");
            }

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

11 个回复

倒序浏览
这个程序在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);

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
            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

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
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();

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
死循环!输入正确后,flag并没有设置为false,那么在while(flag)中还是为真,因此就这样死循环了。。。

调试下你看代码的运行轨迹就很清楚了。。

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
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 + "不是闰年!");
                }
            }
这样可以吗?

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
你的循环是死循环,不管你输入是否正确都无法跳出循环,你在try中加一句break来帮助你跳出循环。这样就可以执行后面代码。
回复 使用道具 举报
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;,让程序跳出输出循环就可以了
回复 使用道具 举报
对于楼主这类的问题,可以直接设个断点就很直观的看出来怎么回事了,你是不是可以把问题改为"已解决"了?
回复 使用道具 举报
谢谢各位啦!
回复 使用道具 举报
尝试了N次,无奈没找着设置为已解决的方法{:soso_e105:},望见谅~
回复 使用道具 举报
你进入你的帖子,在你的发的问题的你那一楼的最下方有个编辑,你点击就可以进去修改你的问题的状态了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马