几个容易犯的错误(一)
2004-06-03 16:37
218 查看
几个容易犯的错误(一)
一. 递增循环和递减循环
先看一个例子:
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上发文章,写的不好请大家见谅!希望没有浪费大家时间.
一. 递增循环和递减循环
先看一个例子:
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上发文章,写的不好请大家见谅!希望没有浪费大家时间.
相关文章推荐
- php初学者容易犯的几个错误
- SEO过程中容易犯的几个错误
- Exchange 2007 容易理解错误的几个地方
- 生活中时常容易犯的错误 看你中了几个!
- 使用DataGrid容易范的几个错误。
- 使用c/c++指针 初学者容易犯的几个错误
- 项目中用hibernate容易出现错误的几个地方小记一下
- php初学者容易犯的几个错误
- 做竞品分析时,几个容易犯的错误
- c++新手容易犯的几个错误
- C++初学者容易遇到的几个错误
- Python新手们容易犯的几个错误总结
- eclipse搭建Springmvc工程中容易出现的几个错误
- 在ASP.NET中容易犯的几个错误
- golang新手们容易犯的3个错误总结
- 编程时常犯的几个错误、应注意的事项以及技巧
- 面对几个错误的解决关键
- c语言文件操作流容易犯的错误
- jquery 容易被忽略的几个方法,会了你就是高手了
- 项目中的几个错误以及解决方案