Java

本类阅读TOP10

·使用MyEclipse开发Struts框架的Hello World!(录像1)
·hibernate配置笔记
·AOP编程入门--Java篇
·linux下Tomcat 5.0.20 与 Apache 2 安装/集成/配置
·在win2003下整合了整合Tomcat5.5+ apache_2.0.53+ mod_jk_2.0.47.dll
·构建Linux下IDE环境--Eclipse篇
·Jsp 连接 mySQL、Oracle 数据库备忘(Windows平台)
·ASP、JSP、PHP 三种技术比较
·Tomcat5.5.9的安装配置
·AWT GUI 设计笔记(二)

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
几个容易犯的错误(一)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

几个容易犯的错误()

一.   递增循环和递减循环

先看一个例子:

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上发文章,写的不好请大家见谅!希望没有浪费大家时间.




相关文章

相关软件