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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 袁振龙 中级黑马   /  2013-4-14 16:05  /  1739 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 袁振龙 于 2013-4-14 20:57 编辑

   int sum=0;
            for (int i=0;i<5 ;i++ )
            {
                Console.WriteLine("请输入第{0}人的年龄:",i+1);
                try
                {
                    int age = Convert.ToInt32(Console.ReadLine());
                    if (age <0||age > 100)
                    {
                        Console.WriteLine("你输入的年龄不合法");
                       break;
                    }
                    sum += age;
                }
                catch
                {
                    Console.WriteLine("请输入合法的年龄");
                    break;
                }
            }
            Console.WriteLine("平均年龄是:{0}", sum / 5); Console.ReadKey();


            for (int i=0;i<5 ;i++ )
            {
               int sum=0;
                Console.WriteLine("请输入第{0}人的年龄:",i+1);
                try
                {
                    int age = Convert.ToInt32(Console.ReadLine());
                    if (age <0||age > 100)
                    {
                        Console.WriteLine("你输入的年龄不合法");
                       break;
                    }
                    sum += age;
                }
                catch
                {
                    Console.WriteLine("请输入合法的年龄");
                    break;
                }
            }
            Console.WriteLine("平均年龄是:{0}", sum / 5); Console.ReadKey();
为什么sum定义在for外面就正确输出,定义在for里面就出错?有什么区别吗?   还有就是为什么输入错误的东西,但是程序还是输出平均成绩?

评分

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

查看全部评分

4 个回复

倒序浏览
这涉及到变量作用域问题。
变量的作用域:变量只能在声明它的那个大括号内使用,在声明它的那个大括号外面就无法访问了。
你定义在for外面,都可访问到。而定义在for里面,只能在那个for循环里才能访问,出了那个for循环就访问不到了。
回复 使用道具 举报
第一个关于sum的问题,1楼已经给出很好解释了。   就是变量作用域问题。
第二个是因为
try { //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 }
catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行 }
不知道你为什么要用这。。  估计你理解错了吧。 你详细看看try  catch 用法吧。
如果你输入错误的话,而你的代码处理仅仅只是退出了循环而已。没有进行别的任何处理。
回复 使用道具 举报
1.楼上的同学已经说到了,变量的作用域只能在声明它的那个大括号内使用,定义在for循环里面,则每一次  i  改变,进行下一次循环的时候,都会将sum销毁,重新创建一个新的变量sum并赋值为0;所以,sum只在当前循环中有效。得出的结果,与想象中的也就有差别。
2.你对 int age = Convert.ToInt32(Console.ReadLine());进行了try{}catch{}操作,当用户输入的不是数字时,转换失败,程序直接跳到catch{},输出,"你的输入不合法",并结束for循环,执行求平均操作。如果要输入错误的时候就结束,请将break改为return 即可(return 可结束方法).
回复 使用道具 举报
第一个问题就是关于变量SUM的访问级别的问题,顶1楼已经给出了答案;
第二个问题就是关于输出平均年龄的了,这是因为你没有对Console.WriteLine("平均年龄是:{0}", sum / 5);语句进行限制,可以参考:

  1.    int sum=0;
  2.    bool fag = false;
  3.             for (int i=0;i<5 ;i++ )
  4.             {
  5.                 Console.WriteLine("请输入第{0}人的年龄:",i+1);
  6.                 try
  7.                 {
  8.                     int age = Convert.ToInt32(Console.ReadLine());
  9.                     if (age <0||age > 100)
  10.                     {
  11.                         Console.WriteLine("你输入的年龄不合法");
  12.                         fag = false;
  13.                        break;
  14.                     }
  15.                     sum += age;
  16.                     fag = true;
  17.                 }
  18.                 catch
  19.                 {
  20.                     Console.WriteLine("请输入合法的年龄");
  21.                     fag = false;
  22.                     break;
  23.                 }
  24.             }
  25.             if (fag )
  26.             {
  27.             Console.WriteLine("平均年龄是:{0}", sum / 5);
  28.             }
  29.             Console.ReadKey();
复制代码

评分

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

查看全部评分

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