程序员错误

先汇总一下错误的分类吧
1
全角问题

2 =
==的问题

3
空格问题

4
拼写问题

5
疏忽,忘记做该做的事情

6
新东西,不是很熟悉



下面是明细,呵呵呵。


1
老紫竹
(java2000_net)
我最难忘的一次,是自作聪明的在一个for循环后面加上了一个分号,而且是在大量的代码重构之后,运行时偶尔发生这个错误。

大概用了我近1周的时间。


从那之后,我的代码的大括号,就都放在代码行的后面了!

1.         for(int i=0;i<=10;i++);   

2.         {   

3.           //   

4.         }  

for(int i=0;i<=10;i++);

{

  //

}

 

1.         for(int i=0;i<=10;i++);{   

2.           //   

3.         }  

for(int i=0;i<=10;i++);{

  //

}



编辑器格式化代码时,可以有很大的帮助。
说说大家曾经常犯的低级错误吧,也好让其它朋友有个心理准备,想拿块豆腐砸自己脑袋的冲动少几次。



2 jsp
页面莫名的报空指针,而且有时出有时不出。最后发现是jsp代码里混了个全角的空格,排版比较乱的时候看不出来。然后那空格被当变量名的一部分了,偏偏那变量还不常用。悲剧啊(()
)

3
当年用vc,貌似写个类似于jTable的东西,在我的机器上一切都好,在老板(小公司,cto也是老板之一)的机器上一跑就死。。。。。。。。然后发现,我的机器分辨率640×480,老板的是800×600的,结果数组溢出。。。。。。。



4
写了2preparestatement,一顿addbatch,然而最后只写了一个preparestatement.executeBatch();找了n长时间才看到问题所在。


5
三层架构里面的业务逻辑层比如:


1.         public bool Add(hLink.Model.FavoriteInfo model) {   

2.           return dal.Add(model) > 0;   

3.         }  

public bool Add(hLink.Model.FavoriteInfo model) {

  return dal.Add(model) > 0;

}


写成了


1.         public bool Add(hLink.Model.FavoriteInfo model) {  

2.           return Add(model) > 0;   

3.         }  

public bool Add(hLink.Model.FavoriteInfo model) {

  return Add(model) > 0;

}


还好碰到了一次,以后报stackoverflow...异常就知道什么错了,呵呵、

6 struct CXTEST_DAT
{
...
WORD wLen;
...
}
int TestData(..., DWORD dwLen);
使用时:

CXTEST_DAT stData;
TestData(..., stData.wLen);
自动扩展为DWORD后,长度总是不对


7
我也经常犯低级错误,但我觉得并不可笑,每次发现自己犯低级错误后,自己的印象也更加深刻,重复犯错的机率就小了很多。


比如,我第一次使用Java枚举时是这样写:


1.         /** 

2.          * SQLCommandType SQL命令类型枚举 

3.          * @author CodingMouse 

4.          * @version 1.0.0.1 

5.          */  

6.         public enum SQLCommandType {  

7.                   

8.             /** 

9.              * SQL查询数据命令 

10.          */  

11.         SELECT,  

12.         /** 

13.          * SQL插入数据命令 

14.          */  

15.         INSERT,  

16.         /**  

17.          * SQL修改数据命令  

18.          */  

19.         UPDATE,  

20.         /** 

21.          * SQL删除数据命令 

22.          */  

23.         DELETE  

24.           

25.     }  

/**

 * SQLCommandType SQL命令类型枚举

 * @author CodingMouse

 * @version 1.0.0.1

 */

public enum SQLCommandType {

       

    /**

     * SQL查询数据命令

     */

    SELECT,

    /**

     * SQL插入数据命令

     */

    INSERT,

    /**

     * SQL修改数据命令

     */

    UPDATE,

    /**

     * SQL删除数据命令

     */

    DELETE

   

}



当在方法中switch传入的枚举参数值时:


1.         switch(枚举变量) {  

2.             case SQLCommandType.SELECT  

3.                 // 中间的逻辑处理  

4.                  break;  

5.             case SQLCommandType.INSERT  

6.                 ......  

7.         }  

switch(枚举变量) {

    case SQLCommandType.SELECT

        // 中间的逻辑处理

         break;

    case SQLCommandType.INSERT

        ......

}



语法老报错,却不知道怎么回事,明明Java中的switch分支是支持枚举的啊?
后来摆渡了一下才知道原来switch分支中case枚举时是不需要加枚举类型前缀的



8 oracle
,写sql 语句时候 怎么老是提示错误 ,语句老长 ,调试了一天 ,眼睛看花了 ,结果一看 掉了个冒号!!

老紫竹的家


9
又一次 装了个防火墙 运行myeclipse的时候 报错,说端口有问题 ,我还以为是被占用 或者tomcat的问题 弄了半天 百度 Google 都无果,猛然发现是被防火墙拦截了


10
struts.xml ------>sturts.xml



11
C言语时

if(i=1)

{
}
本来我是想判断真假
结果
......


12
在修改配置文件的时候,就因为一个空格,而找了半天的错误


老紫竹的家
13
在维护公司一个比较老的项目的时候,自作聪明地写了这么一个类(主要是为了共用数据库连接)
public class DataQuery{
//
静态的connection

private static Connection con=ConnectionFactory.getConnection();

private Collection <User> getUsers(int groupId){
Statement st=null;
ResultSet rs=null;
try{
st=con.createStatement();
String SQL="......";
......
}catch(Exception e){
e.printStackTrace();
}
}

//
其他查询方法,共用一个connection......
}

因为这个项目已经运行了5年了,Struts1.1的时候就做的这个项目,
紫竹的家实在没有办法在里面配连接池,于是自作聪明在里面做了这种事

后果很显然啊

要么是connection太多,要么是某个地方把connection关了导致其他方法抛空指针

还好,出问题的时候拿过来跟了一把马上意识到了这个愚蠢的问题

唉。。。



14
以前犯过一个错误,while()中==写成=

因为开始的时候写的是正确的,后来不知道怎么不小心误操作删掉一个等号,结果程序死活不对了。当时是在一个嵌入式平台上,开发环境很垃圾,所以还老以为是编译环境的bug


昨天写程序调出了nbug,一个是在finally加返回语句了,程序输出的正好有别的异常,所以没往这考虑。搞了半个下午才发现问题。

还有指针的问题是最让人头疼的了。




15
用中文输入法输入全角的分号,结果编译不通过,还查不出原因


老紫竹的家
16 select * from a where a.id
in(.....)


17
10分钟写JAVA代码,写好后再写javascript代码

错误:

for(
int
i = 0 ; i < xxx.length; i++){
}
正确:

for(
var
i = 0 ; i < xxx.length; i++){
}
老紫竹备注:这个错误太长见了,我也经常如此



18
我的第一个错误是,UPDATE 是后面没有加条件,结果,所有数据全部,UPdate了,呵呵,老板猛劈!!!



19
有此写存储过程传进来的参数USERId, 有张涉及到的表有字段
userId
存储过程有一个条件为
update *** where userId = USERID;
把数据库干翻了,后悔得要死。

不区分大小写啊
!


20
把表单里面的input标签的类型写成了submit,本来这是正常的,但是我的目的是想在input类型中触发某一个方法,然后在页面上显示相应的数据,并不是想提交整个表单,结果我一点input中的按钮,页面始终没有反应,新数据就是不能够显示,搞了整整两天才发现这个简单的问题!



21 for (int i = 0,len = arr.size(); i < len; i++) {
temp = arr.get(0);
}
。。。循环下来都取的第一个元素。。。



22
linux内核的时候缓冲区长度定义为128字节,后来改了方案,
老紫竹的家需要512字节的缓冲区,忘了改定义,结果一赋值缓冲区溢出,内核崩溃,查了几个月才查出是什么原因


23
SQL存储过程的时候拼接字符串的长度给的太小,导致多条件查询的时候总是出现bad results。。。



24 VB
的代码

FOR I=1 to N
Next
忘记给I加一了


老紫竹的家
25
操作注册表是造成了溢出,把堆破坏了,造成了之后的代码,只要申请newmalloc就出错,查了半天才查出来。
主要是写注册表的函数的参数是传出参数,返回指超出了定义的长度。

还有就是c下,segment错误, 数组越界,很难查,都是运行时出错, 访问了不能访问或无效的地址。



26
嵌套循环用同一个变量


1.         int i=0;  

2.         while(i<10){  

3.           for(i=0;i<5;i++){  

4.             ....  

5.           }  

6.         }  

int i=0;

while(i<10){

  for(i=0;i<5;i++){

    ....

  }

}




27
印象最深刻的就是c#的一个循环
if后面忘加{}


调了一个下午

28
引用窗体类指针是直接定义头文件用 没有在App中存放 造成指针不一样,调不出相应成员VC



29


1.         Sring date  = request.getParameter("date");   

2.             

3.          if(!"".equals("date")){   

4.              .....   

5.          }   

6.             

7.          ........   

Sring date  = request.getParameter("date");

 

 if(!"".equals("date")){

     .....

 }

 

 ........



最低级的错误......
老紫竹备注:我也犯过多次,习惯的就把双引号加上去了

30
循环变量搞错了
for( int i=0; i!=5; ++i )
{
for( int
j=0 j!=5; ++i )
{


31
记得初学Delphi 的时候,把程序代码保存在了一个中文命名的目录下,按F9 编译加运行,
始终运行失败,到处找人帮忙看,整个项目组高手都找遍了,都觉得奇怪,折腾了好久,都解决不了,各种方法都用尽了,
就是不能正常运行,后来把程序重新抄了一遍,换了个文件夹,问题解决了。
从那以后再也不敢把程序放在中文文件夹了,这事过去五六年了还记得。


老紫竹的家
32
打包的时候不修改数据库配置文件,然用户在测试数据库上
33
昨晚写条件语句时把If()的括号输成了全角的格式。偏偏那个IF括号还是嵌套的,盛怒之下卸掉了所有中文输入法,今天又重新装上


34
一次用了ImageButton,结果又用js进行的提交,照成了冗余数据,后来才知道ImageButton是会submit~

35
数据库时的case语句
case when then
后面总是忘了写end

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值