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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ?﹪滾妳媽丶 中级黑马   /  2014-3-24 13:07  /  1301 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ?﹪滾妳媽丶 于 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的异常。
我在这里有个疑问,我输入字符串的时候这两个异常就会一起显来出来,能不能让输入不是数字的异常只显示不是数字的异常而不是两个一起显示。
     请大家帮我解答下,要有两个异常的啊,别修改了只有一个异常。。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

3 个回复

倒序浏览
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。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
典型的基础知识不牢固啊,你这样写,执行第一个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();
        }

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

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

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

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