黑马程序员技术交流社区

标题: 定义变量问题! [打印本页]

作者: 袁振龙    时间: 2013-4-14 16:05
标题: 定义变量问题!
本帖最后由 袁振龙 于 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里面就出错?有什么区别吗?   还有就是为什么输入错误的东西,但是程序还是输出平均成绩?
作者: 梁思思    时间: 2013-4-14 16:10
这涉及到变量作用域问题。
变量的作用域:变量只能在声明它的那个大括号内使用,在声明它的那个大括号外面就无法访问了。
你定义在for外面,都可访问到。而定义在for里面,只能在那个for循环里才能访问,出了那个for循环就访问不到了。
作者: 殇_心。    时间: 2013-4-14 16:32
第一个关于sum的问题,1楼已经给出很好解释了。   就是变量作用域问题。
第二个是因为
try { //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 }
catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行 }
不知道你为什么要用这。。  估计你理解错了吧。 你详细看看try  catch 用法吧。
如果你输入错误的话,而你的代码处理仅仅只是退出了循环而已。没有进行别的任何处理。
作者: 曾玉锋    时间: 2013-4-14 16:52
1.楼上的同学已经说到了,变量的作用域只能在声明它的那个大括号内使用,定义在for循环里面,则每一次  i  改变,进行下一次循环的时候,都会将sum销毁,重新创建一个新的变量sum并赋值为0;所以,sum只在当前循环中有效。得出的结果,与想象中的也就有差别。
2.你对 int age = Convert.ToInt32(Console.ReadLine());进行了try{}catch{}操作,当用户输入的不是数字时,转换失败,程序直接跳到catch{},输出,"你的输入不合法",并结束for循环,执行求平均操作。如果要输入错误的时候就结束,请将break改为return 即可(return 可结束方法).
作者: 张大海    时间: 2013-4-14 17:01
第一个问题就是关于变量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();
复制代码





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