几个容易犯的错误(一)

原创 2004年06月03日 16:37:00

几个容易犯的错误()<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

一.   递增循环和递减循环

先看一个例子:

import java.util.*;

import java.io.*;

public class TestClass {

        public static void main(String[] args) {

                Vector vItems = new Vector();

                vItems.add("aa1");

                vItems.add("aa2");

                vItems.add("bb3");

                vItems.add("bb4");

                //现在想删除掉所有含有bb字符的元素

                for(int i=0;i<vItems.size();i++){

                        if(vItems.elementAt(i).toString().indexOf("bb")!=-1){

                                vItems.remove(i);

                        }

                }               

                for(int i= 0;i<vItems.size();i++){

                        System.out.println(vItems.elementAt(i).toString());

                }       

        }

}

看看结果中居然还有bb4,仔细分析一下,当删除bb3的时候,I=2,然后vItems.remove(2);再进行下一次循环,I=I+1=3,注意此时的vItems.size()=3(由于删除了一个元素,所以size变小了),所以循环终止,导致bb4没有被删除.

 

那如何才可以彻底删除呢?

我们把删除的循环改一下:

for(int i=vItems.size()-1;i>=0;i--){

if(vItems.elementAt(i).toString().indexOf("bb")!=-1){

                vItems.remove(i);

        }

}

再执行一下,发现这次结果正确.原因就是当删除后面的元素时,前面的顺序并没有改变,循环遍历了所有元素.而第一个例子中,删除前面的元素,后面的元素的位置都发生了改变,所以有遗漏.

稍微总结一下:

在循环 for(int i=0;i<x;i++),尽量保持x的值不变,否则容易产生遗漏,或者出现死循环.

如果x在循环体中发生改变则可以尝试for(int i=x;i>=0;i--).

这个问题在Java中还是比较出现还是比较常见的:比如循环删除一个Panel上的所有组件等.

第一次在CSDN上发文章,写的不好请大家见谅!希望没有浪费大家时间.

冯仑《企业领导最容易犯的十大错误》 .

冯仑这样的企业家是从中国经济蛮荒时代过来的人,是先懂江湖,后懂业务的典范。这样的人经历了从混沌到清晰,从传统到现代的历程,对很多问题更能一眼看到本质,而不是那么多空洞的理论和理想主义。这一点,是我们这...
  • yefighter
  • yefighter
  • 2013年01月25日 13:49
  • 1410

前端中容易犯低级错误的地方

由于自己基础比较薄弱,也可以说知识的深度不够,在写前端代码的时候,往往会出现这样那样的低级问题,以及低级错误,在这里我总结出来了,还是那句话,大神可以绕道了     1.关于页面中js文件和css...
  • ZYGG5521
  • ZYGG5521
  • 2015年08月22日 17:01
  • 668

Java程序最容易犯的21种错误

  • GOALSTAR
  • GOALSTAR
  • 2007年06月06日 19:10
  • 883

程序员容易犯的十大错误

1.面向编译器写代码,而不是面向用户 当人们使用编译器创建自己的app时,在把自己的想法诉诸于机器代码的过程中,常常会将那些可以使得编程更为简单却又冗长的语法遗忘于脑后。 无论你使用的是单字母的标识符...
  • u012701023
  • u012701023
  • 2015年07月13日 23:31
  • 809

一个C/C++程序员最容易犯的错误!

首先让我们看一段代码:void GetCtrlRectViaParent( LPRECT lprc, HWND hwndDlg, UINT idCtrl ){    POINT pt;    HWND...
  • baofeng
  • baofeng
  • 2007年01月20日 12:44
  • 708

Python 易犯错误

修改函数默认参数def fun(x=[],y=False): y=True x.append('hello') return x,yif __name__ == '__main...
  • qq_17612199
  • qq_17612199
  • 2016年04月23日 16:21
  • 228

PHP 程序员10条最容易犯的错误

1.不对html实体转义 一个基本的常识:所有不可信任的输入(特别是用户从form中提交的数据) ,输出之前都要转意。echo $_GET['usename'] ; 这个例子有可能输出...
  • z15818264727
  • z15818264727
  • 2016年07月21日 17:40
  • 455

程序员总出BUG,这9个容易犯的错误编程你避免了吗?

为什么程序出故障?虽然自世界上第一位女程序员艾达·洛夫莱斯(Ada Lovelace)在上世纪第一次看到通用计算的潜力以来我们已取得了很大进展,但是我们编写的软件还是错误百出。这些年来,尽管我们开发出...
  • Bg70PVnyBv1
  • Bg70PVnyBv1
  • 2017年12月06日 00:00
  • 83

Java初学者常犯的错误

不含包层次的HelloWorld.javapublic class HelloWorld{ public static void main(String[] args) { System.out.pr...
  • daichanglin
  • daichanglin
  • 2007年03月13日 11:22
  • 551

c++ 继承机制易犯的错误

继承作为面向对象的基本特征之一,其使用率极高。不管是为了实现软件的基本功能,还是再程序的重构的过程中,我们总是会用到继承机制。正是因为其用途极为广泛,而且使用简单,大众程序员对其真正的内部实现机制的探...
  • liujiayu2
  • liujiayu2
  • 2015年12月01日 18:24
  • 278
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:几个容易犯的错误(一)
举报原因:
原因补充:

(最多只允许输入30个字)