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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhangcheng5468 中级黑马   /  2013-8-14 15:34  /  1814 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zhangcheng5468 于 2013-8-15 09:09 编辑

无论是html页面跑偏、js程序不执行、.net后台逻辑代码崩溃,我们会碰到各种各样的错误,对于一个老程序员来说这不算什么,但是对于新手着实是一个头疼的问题。请大家一块动手,制作一个咱们自己的程序错误查询字典,帮助新手同时也是我们以后的参考,随时添加随时欢迎。
要求:
1、有源代码
2、带截图
3、有解决方法
4、在这个易出错点的注意事项
奖励:越详细,奖励越大{:soso_e129:}

2 个回复

倒序浏览
本帖最后由 xt654005440 于 2013-8-14 18:55 编辑

呵呵,这个帖子不错呢,赞楼主一个。
下面是我最开始看视频后写的四则运算程序:

namespace 计算器
{
    public class Count      //定义Count类
    {
        //private double x;
        //private double y;
        public double X { set; get; }
        public double Y { set; get; }

    }
    public class Plus : Count   //定义  Plus类,并继承Count
    {
        public double plus()
        {
            return X+Y;

        }
    }
    public class Minus : Count   //定义  Minus类,并继承Count
    {
        public double minus()
        {
            return X - Y;

        }
    }
    public class Multiply : Count   //定义  Multiply 类,并继承Count
    {
        public double multiply()
        {
            return X * Y;

        }
    }
    public class Division : Count  //定义   Division  类,并继承Count
    {
        public double division()
        {
            return X / Y;

        }
    }
    public class Square : Count   //定义    Square  类,并继承Count
    {
        public double square()
        {
            return X * X;

        }
    }
    public class Jcheng : Count   //定义     Jcheng  类,并继承Count
    {
        public double jcheng()
        {
            double s = 1;
            while (X > 1)
            {
                s = s * X;
                X--;
            }
            return s;

        }
    }
    class Program
    {
        static void Main(string[] args)
        {

        start:
            
            Console.WriteLine("请问你想进行哪种运算:\n1、加法运算 \n2、减法运算 \n3、乘法运算 \n4、除法运算 \n5、平方运算 \n6、阶乘运算 \n0、结束 \n");
            Console.WriteLine("***********************************************************************");
            switch (Convert.ToInt32(Console.ReadLine()))      //输入数据,选择哪种运算
            {
                case 1:
                    Console.WriteLine("加法运算:");
                    Plus plus = new Plus();
                    plus.X = Convert.ToDouble(Console.ReadLine());
                    plus.Y = Convert.ToDouble(Console.ReadLine());
                    Console.WriteLine("运算结果为: " + plus.plus());
                    break;

                case 2:
                    Console.WriteLine("减法法运算:");
                    Minus minus = new Minus();
                    minus.X = Convert.ToDouble(Console.ReadLine());
                    minus.Y = Convert.ToDouble(Console.ReadLine());
                    Console.WriteLine("运算结果为: " + minus.minus());
                    break;

                case 3:
                    Console.WriteLine("乘法运算:");
                    Multiply multiply = new Multiply();
                    multiply.X = Convert.ToDouble(Console.ReadLine());
                    multiply.Y = Convert.ToDouble(Console.ReadLine());
                    Console.WriteLine("运算结果为: " + multiply.multiply());
                    break;

                case 4:
                    Console.WriteLine("除法运算:");
                    Division division = new Division();
                    division.X = Convert.ToDouble(Console.ReadLine());
                    division.Y = Convert.ToDouble(Console.ReadLine());
                    Console.WriteLine("运算结果为: " + division.division());
                    break;

                case 5:
                    Console.WriteLine("平方运算:");
                    Square square = new Square();
                    square.X = Convert.ToDouble(Console.ReadLine());

                    Console.WriteLine("运算结果为: " + square.square());
                    break;

                case 6:
                    Console.WriteLine("阶乘运算:");
                    Jcheng jcheng = new Jcheng();
                    jcheng.X = Convert.ToDouble(Console.ReadLine());

                    Console.WriteLine("运算结果为: " + jcheng.jcheng());
                    break;
                case 0: goto end;

                default: Console.WriteLine("你的输入有误!\t");
                    break;
            }
            Console.WriteLine();
            goto start;            //执行goto语句,跳转到start标签处

        end:              //执行goto语句,跳转到end标签处
            Console.WriteLine("结束计算,欢迎下次使用~!");
            Console.ReadKey();
            
        }
    }
}

正常情况下,运行着段代码没什么问题,但是基于我个人习惯哈,在要选择分支的时候老是手抖多敲或者敲进不是数字的键,这时候麻烦来了!!
这里我老爱敲回车,在程序里不就以\n形式表现么,结果看下面:

  看,正是上面标示的switch处的出现漏洞,即是若输入非法整数系统直接卡壳报错,那么我们就想办法在这里进行控制一下,让只有合法的输入才有效!

这里我用Tryparse方法做了改进,规避这个问题,代码如下:
            int i=0;        //定义变量
            string s=Console.ReadLine();   //输入
            if (int.TryParse(s, out i))    //转换并判断数据合法与否
            {
                Console.WriteLine();
            }
            else
            {
                Console.WriteLine("转换失败,你输入的为非法整数!");
            }
            switch (i)       //选择分支
这里使用if (int.TryParse(s, out i)) ,先对输入进行一个判断,合法这进入分支结构,不合法及时反馈消息,再看我敲回车后的情形:
呵呵不在出现那种报错了~

再次支持版主这个整理,V5{:soso_e120:}
回复 使用道具 举报
常见的异常类型:
SystemException:提供系统异常和应用程序异常之间的区别。
ArgumentException:当方法提供的任意一个参数无效时,引发此异常。
ArithmeticException:此异常表示由于算术运算导致的错误。
DataException:如果在使用ADO.NET组件时生成错误,引发此异常。
FormatException:当参数的格式不符合被调用方法的参数规范时,引发此异常。
IOException:当出现I/O错误是,引发此异常。
IndexOutOfRangeException:当试图使用数组边界外的索引来访问数组的元素时,引发此异常。
ArgumentNullException:在将空引用传递给无效参数的方法时,引发此异常。
OverflowException:当算数运算的结果大而无法由目标类型表示时,引发此异常。
DivideByZeroException:当试图用某个数除以零时,引发此异常。
ApplicationException:在应用程序执行过程中检测到有应用程序定义的异常。
TargetException:当试图调用无效目标时,引发此异常。
ArrayIndexOutOfBoundsException:数组小于或大于实际的数组大小。
NullPointerException:尝试访问Null对象成员。
ClassNotFoundException:不能加载所需的类。
InputMismatchException:欲得到的数据类型与实际输入数据类型不匹配。
IllegalArgumentException:方法接受到非法参数。

异常类常用属性:
Message:提供引发异常的详细信息。
Source:此属性表示导致异常发生的应用程序或对象的名称。(异常源)
StackTrace:此属性提供在堆栈上所调用方法的详细信息,并首先显示最近调用的方法。
InnerException:对内部异常的引用,如果此异常基于前一个异常,则内部异常指最初发生的异常。


异常截图出来 ...要不是自己激活的抛出功能..就是系统自带的反射出来的异常..这个参考上面解释就差不多有解决.
就说常见碰上的:

类型不对异常:  这个一定报错在 赋值上..如果赋值报错..一定想清楚 左边是什么类型...把右边的类型一定要转成右边一样的类型.解决;
数组越界:这个属于数组[i]  i 下标 i<0 或者 i超过长度  这时候就用断点  循环次数 如果越界 长度-1皆可.
sql连接报错: 数据库操作..无外乎  连接字符串拼接错..找不到用户.或密码错误..记住一点..凡是DAL(数据访问类.不是转类型错误.那一定就是SQL调用错误!);
没找到对象实例:重点来了..经常碰上NEW过 却报这个错的..那么...把鼠标圈中报错的对象 按F12跳到定义...回到初始位置.加断点.看NEW的位置是否有执行过.
至于 其他的很少碰到...忘了..一般都是错误名+百度就能解决...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马