黑马程序员技术交流社区

标题: 求平均年龄的问题? [打印本页]

作者: 陈培茹    时间: 2013-4-14 20:20
标题: 求平均年龄的问题?
  1. int age=0;
  2.             int sum = 0;
  3.             int i=0;
  4.             double average;
  5.             bool flag=false ;
  6.             while (flag == false && i<5)
  7.             {
  8.                 try
  9.                 {
  10.                     Console.WriteLine("请输º?入年龄?");
  11.                     age = Convert.ToInt32(Console.ReadLine());
  12.                     if (age < 0)
  13.                     {
  14.                         Console.WriteLine("年龄必须大于0");

  15.                         break;
  16.                     }
  17.                     if (age > 100)
  18.                     {
  19.                         Console.WriteLine("年龄必须在1—100之间");

  20.                         break;
  21.                     }
  22.                     else
  23.                     {
  24.                         sum = sum + age;
  25.                         i++;
  26.                         flag = false;
  27.                     }
  28.                 }
  29.                 catch
  30.                 {
  31.                     Console.WriteLine("请输入数字!");
  32.                     break;
  33.                 }

  34.             }
  35.             average =sum/5.0;
  36.             Console.WriteLine("5个人的平均¨年龄为:{0}",average );
  37.             Console.ReadKey();
  38. 当不是输入数字时,不再求平均年龄该怎么修改??

复制代码

作者: 刘胜寒    时间: 2013-4-14 20:36
不是数字的时候你就抛出异常吗
作者: 殇_心。    时间: 2013-4-14 21:13
你看下我改的代码。 我这边没安装vc编译器,c#编译不了。不知道你try catch什么。
int age=0;

            int sum = 0;

            int i=0;

            double average;

            bool flag=false ;

            while (flag == false && i<5)

            {

                try

                {

                    Console.WriteLine("请输º?入年龄?");

                    age = Convert.ToInt32(Console.ReadLine());

                    if (age < 0)

                    {

                        Console.WriteLine("年龄必须大于0");


                       continue;

                    }

                    if (age > 100)

                    {

                        Console.WriteLine("年龄必须在1—100之间");


                        continue;

                    }

                    else

                    {

                        sum = sum + age;

                        i++;

                        flag = false;

                    }

                }

                catch

                {

                    Console.WriteLine("请输入数字!");

                    break;

                }


            }

            average =sum/5.0;

            Console.WriteLine("5个人的平均¨年龄为:{0}",average );

            Console.ReadKey();
作者: zerochen46    时间: 2013-4-14 21:17
用int.TryParse(string str,out int i)判断是否能将字符串转为数字,如果转换成功函数会返回true,否则返回false
作者: ↖落葉下♀媃媚    时间: 2013-4-14 21:30
int age=0;

            int sum = 0;
            int i=0;
         
            while (i<5)

            {

                try

                {

                    Console.WriteLine("请输入年龄?");

                    age = Convert.ToInt32(Console.ReadLine());

                    if (age < 0 || age>100)

                    {

                        Console.WriteLine("年龄必须在0-100之间");



                       

                    }

                  

                    else

                    {

                        sum = sum + age;

                        i++;
                       
                    }

                }

                catch

                {

                    Console.WriteLine("请输入数字!");

                  

               }



            }

            
            Console.WriteLine("5个人的平均年龄为:{0}",sum/5 );
            Console.ReadKey();

这样应该可以了,你试试
              

作者: 陈培茹    时间: 2013-4-14 21:39
刘胜寒 发表于 2013-4-14 20:36
不是数字的时候你就抛出异常吗

我的意思是不是数字或不在1——100之内就不用在控制台输出平均年龄:P
作者: 陈培茹    时间: 2013-4-14 21:41
殇_心。 发表于 2013-4-14 21:13
你看下我改的代码。 我这边没安装vc编译器,c#编译不了。不知道你try catch什么。
int age=0;

我的意思是不是数字或不在1——100之内就不用在控制台输出平均年龄。嘿嘿,谢谢你:)
作者: 陈培茹    时间: 2013-4-14 21:44
↖落葉下♀媃媚 发表于 2013-4-14 21:30
int age=0;

            int sum = 0;

谢谢!试过了,很好:hug:
作者: 陈培茹    时间: 2013-4-14 21:45
zerochen46 发表于 2013-4-14 21:17
用int.TryParse(string str,out int i)判断是否能将字符串转为数字,如果转换成功函数会返回true,否则返回 ...

恩恩,还要继续学习{:2_31:}
作者: 殇_心。    时间: 2013-4-14 21:45
这个意思哦。
那你就设置一个变量来监控呗。
比如  bool  biaoji = true;
if( 输入的不是数字或者数字不在1或者100之间)  biaoji = false;
然后 if( biaoji )  

     算年龄的代码。

作者: 陈鹏举    时间: 2013-4-14 22:32
看到你的代码给你几点建议相互学习,1没有必要定义bool类型的变量,用不到2如果用户输入的数字小于0或者大于100那么直接continue继续循环,而不是break,当程序进入到catch中也continue。这样就能保证用户输入的一定是一个合法的五个数
作者: HM朱百青    时间: 2013-4-14 22:42
针对你这段代码  只要改一个地方就行了   把break改为continue   break是跳出当前循环,所以当你输入有误的时候,就会直接跳出循环,而continue则是终端正在进行的这次循环,而跳入到下一次的循环
作者: 张大海    时间: 2013-4-14 22:52
我想应该是你看视频没留心,没搞清楚bool类型的变量flag的作用,flag是用来限制Console.WriteLine("5个人的平均¨年龄为:{0}",average );语句
  1. int age = 0;
  2.             int sum = 0;
  3.             int i = 0;
  4.             double average;
  5.             bool flag = false;
  6.             while (i < 5)
  7.             {
  8.                 try
  9.                 {
  10.                     Console.WriteLine("请输第{0}个人的年龄:", i + 1);
  11.                     age = Convert.ToInt32(Console.ReadLine());
  12.                     if (age < 0)
  13.                     {
  14.                         Console.WriteLine("年龄必须大于0");
  15.                         flag = false;

  16.                         break;
  17.                     }
  18.                     else if (age > 100)
  19.                     {
  20.                         Console.WriteLine("年龄必须在1—100之间");
  21.                         flag = false;
  22.                         break;
  23.                     }
  24.                     else
  25.                     {
  26.                         sum = sum + age;
  27.                         i++;
  28.                         flag = true;
  29.                     }
  30.                 }
  31.                 catch
  32.                 {
  33.                     Console.WriteLine("请输入1~100的数字!");
  34.                     flag = false;
  35.                     break;
  36.                 }

  37.             }
  38.             average = sum / 5.0;
  39.             if (flag)
  40.             {
  41.                 Console.WriteLine("5个人的平均¨年龄为:{0}", average);
  42.             }
  43.             Console.ReadKey();
复制代码
的,
作者: 刘胜寒    时间: 2013-4-15 09:13
陈培茹 发表于 2013-4-14 21:39
我的意思是不是数字或不在1——100之内就不用在控制台输出平均年龄

我理解错了.....这一个可以用if去判断一下....
作者: 陈培茹    时间: 2013-4-15 10:14
殇_心。 发表于 2013-4-14 21:45
这个意思哦。
那你就设置一个变量来监控呗。
比如  bool  biaoji = true;

恩恩,谢谢啦
作者: 陈培茹    时间: 2013-4-15 10:16
刘胜寒 发表于 2013-4-15 09:13
我理解错了.....这一个可以用if去判断一下....

恩恩,谢谢啦!嘿嘿
作者: 陈培茹    时间: 2013-4-15 10:17
陈鹏举 发表于 2013-4-14 22:32
看到你的代码给你几点建议相互学习,1没有必要定义bool类型的变量,用不到2如果用户输入的数字小于0或者大 ...

恩恩,之前还没有学到cntinue.现在明白了。谢谢:loveliness:
作者: 陈培茹    时间: 2013-4-15 10:19
HM朱百青 发表于 2013-4-14 22:42
针对你这段代码  只要改一个地方就行了   把break改为continue   break是跳出当前循环,所以当你输入有误的 ...

恩恩,谢谢啦。我学习的进度有些慢。之前还没学到continue。现在已经明白了
作者: 陈培茹    时间: 2013-4-15 10:20
张大海 发表于 2013-4-14 22:52
我想应该是你看视频没留心,没搞清楚bool类型的变量flag的作用,flag是用来限制Console.WriteLine("5个人的 ...

恩恩,谢谢你的详解,和建议:loveliness:
作者: 杨硕    时间: 2013-4-15 19:26
把break改成continue




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