黑马程序员技术交流社区

标题: 关于C#加强的一道练习题!! [打印本页]

作者: ?﹪滾妳媽丶    时间: 2014-3-24 13:07
标题: 关于C#加强的一道练习题!!
本帖最后由 ?﹪滾妳媽丶 于 2014-3-25 10:28 编辑

Console.WriteLine("欢迎乘坐08号计程车,本车按1元/1公里计费");
            Console.WriteLine("请问您要乘坐多少公里");
            int jieshou = 0;
            try
            {
                jieshou = int.Parse(Console.ReadLine());
            }
            catch
            {
                Console.WriteLine("输入错误");
            }
            try
            {
                war3 jie = new war3(jieshou);
                jie.xianshi();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.ReadKey();
        }
    }
    class war3
    {
        private int gongli;
        private double jiage;
        public war3(int Gongli)
        {
            gongli = Gongli;
            if (gongli <= 0)
            {
                throw new Exception("你的车是倒着走的?");
            }
            if (gongli > 0 && gongli <= 100)
            {
                jiage = gongli * 1;
            }
            else if (gongli > 100 && gongli <= 200)
            {
                jiage = (gongli * 1) * 0.95;
            }
            else if (gongli > 200 && gongli <= 300)
            {
                jiage = (gongli * 1) * 0.9;
            }
            else if (gongli > 300)
            {
                jiage = (gongli * 1) * 0.8;
            }
        }
        public void xianshi()
        {
            Console.WriteLine("行驶{0}公里--价格为{1}", gongli, jiage);
        }
    }
这里面有两个异常,一个输入不是数字的异常,一个练习制作小于0或等0的异常。
我在这里有个疑问,我输入字符串的时候这两个异常就会一起显来出来,能不能让输入不是数字的异常只显示不是数字的异常而不是两个一起显示。
     请大家帮我解答下,要有两个异常的啊,别修改了只有一个异常。。
作者: cmcm2014    时间: 2014-3-24 13:41
class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("欢迎乘坐08号计程车,本车按1元/1公里计费");
            Console.WriteLine("请问您要乘坐多少公里");
            int jieshou = 0;
            try
            {
                jieshou = int.Parse(Console.ReadLine());
                try
                {
                    war3 jie = new war3(jieshou);
                    jie.xianshi();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
            catch
            {
                Console.WriteLine("输入错误");
            }
            Console.ReadKey();
        }
    }


    class war3
    {
        private int gongli;
        private double jiage;
        public war3(int Gongli)
        {
            gongli = Gongli;
            if (gongli <= 0)
            {
                throw new Exception("你的车是倒着走的?");
            }
            if (gongli > 0 && gongli <= 100)
            {
                jiage = gongli * 1;
            }
            else if (gongli > 100 && gongli <= 200)
            {
                jiage = (gongli * 1) * 0.95;
            }
            else if (gongli > 200 && gongli <= 300)
            {
                jiage = (gongli * 1) * 0.9;
            }
            else if (gongli > 300)
            {
                jiage = (gongli * 1) * 0.8;
            }
        }
        public void xianshi()
        {
            Console.WriteLine("行驶{0}公里--价格为{1}", gongli, jiage);
        }
    }
以上代码解决楼主问题
给楼主一点建议:try catch虽然能很好的处理异常,但是不是说越多的trycatch就越好,你既然已经知道这块会有问题,那么就应该事先处理此处可能存在的异常,而不是交你trycatch。
作者: Doublekill    时间: 2014-3-24 13:43
典型的基础知识不牢固啊,你这样写,执行第一个try,不管对和错,还要执行第二个try。建议这么写:
static void Main(string[] args)
        {

            Console.WriteLine("欢迎乘坐08号计程车,本车按1元/1公里计费");
            Console.WriteLine("请问您要乘坐多少公里");
            int jieshou = 0;
            while (true)
            {
                try
                {
                    jieshou = int.Parse(Console.ReadLine());
                    war3 jie = new war3(jieshou);
                    jie.xianshi();
                    break;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
            Console.ReadKey();
        }

作者: lmm    时间: 2014-3-24 13:43
使用一个try...catch代码体就行, 将特殊异常类型放在前面, 普通异常类型放在后面.
            try
            {
                jieshou = int.Parse(Console.ReadLine());
                war3 jie = new war3(jieshou);
                jie.xianshi();
            }
            catch (FormatException e)
            {
                Console.WriteLine("输入错误");
                Console.ReadKey();
                return;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.ReadKey();
        }




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