`
MyGodness
  • 浏览: 11789 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

一个写程序时容易忽略的错误

 
阅读更多

有这样一个场景。

一个List中存放有一些数字,需要删除其中所有是1的元素。

很多人可能顺手就写了。

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

   if(list.get(i)==1){

    list.remove(i);   

  }

}


实际上这是错误的,我们忽略了删除过程中list的变化,导致最终有一部分1没有被删除。

 

正解应该是这样的:

for(int i=0;i<list.size();i++){
   if(list.get(i)==1){
      list.remove(i);
      i--;
   }
}

或
for(i=list.size()-1;i>=0;i--)
  if(list.get(i)==1)
    list.remove(i);

 类似的情况,我们程序员可能由于“惯性”并没有注意到,在不经意间,我们犯下错误

5
5
分享到:
评论
10 楼 MyGodness 2011-09-01  
shuangpan.zhang 写道
很有道理,前段在做开发中遇到相同的情况,当时我做的编码。由于惯性 直接就coding了。

我们在编码中应该更多的去思考,不能不知所谓的写程序。
我同事说过一句话,80%的时间应该用于思考,20%的时间用于编码。
这话我觉得很有道理。不经历思考,很难进步!
9 楼 shuangpan.zhang 2011-09-01  
很有道理,前段在做开发中遇到相同的情况,当时我做的编码。由于惯性 直接就coding了。
8 楼 qiushi4958 2011-09-01  
<input type="submit" value="删除"/>

前几天写代码就碰到个这个问题,倒着操作一切就没问题了
7 楼 qiushi4958 2011-09-01  
[img][/img][url][/url][flash=200,200][/flash]
6 楼 MyGodness 2011-09-01  
athrunwang 写道
这个问题确实需要小心,不过用迭代器就避免这个问题了,呵呵。

如果能意识到这个问题,会主动想到用迭代了。
这种情况说的就是那些经验不足的,又没注意到此情况的程序员
5 楼 athrunwang 2011-09-01  
这个问题确实需要小心,不过用迭代器就避免这个问题了,呵呵。
4 楼 MyGodness 2011-08-31  
yoyo83773 写道
我个人不犯这个错

哈哈,不犯当然更好。
3 楼 yoyo83773 2011-08-31  
我个人不犯这个错
2 楼 MyGodness 2011-08-31  
kobbyla 写道
上面的方法不建议那样写,在循环删除时,尽量用iterator方法
应该这样写:
Iterator<Integer> it = list.iterator();
while (it.hasNext()) {

if (it.next() == 1) {

it.remove();
}
}

嗯,这边说的也很有道理,迭代器的做法也很不错!
1 楼 kobbyla 2011-08-31  
上面的方法不建议那样写,在循环删除时,尽量用iterator方法
应该这样写:
Iterator<Integer> it = list.iterator();
while (it.hasNext()) {

if (it.next() == 1) {

it.remove();
}
}

相关推荐

    写Java程序最容易犯的错误例析

    ### 写Java程序最容易犯的错误例析 在软件开发过程中,编写高质量的代码是非常重要的。良好的代码不仅能提高系统的可维护性和可扩展性,还能减少未来的维护成本。本文将详细介绍编写Java程序时最常见的21个错误,并...

    C语言高手总结的新手容易犯的错误

    C语言高手总结的新手容易犯的错误 C语言是一门经典的编程语言,对于新手来说,易犯的一些错误是非常普遍的。这些错误不仅影响代码的正确性,也会浪费大量的时间和精力。因此,了解和避免这些错误是非常重要的。 1....

    C语言常见错误——写给编程初学者

    输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab。 ②scanf("%d,%d",&a,&b); C规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的...

    C语言程序设计(第2版)-2期 常见问题1-1 书写标识符时,忽略了大小写字母的区别.pdf

    在C语言程序设计中,标识符的使用是一个基础但至关重要的概念。标识符是用来命名变量、函数、数组等程序元素的符号。C语言的标识符遵循特定的规则和约定,其中一个关键特性就是它们严格区分大小写。这表示"Case ...

    monitorsjs是一个轻量级前端错误监控插件

    此外,由于它是一个轻量级的插件,与其他库(如React、Vue、Angular等)的集成也相对容易。 **6. 性能优化与最佳实践** 在使用monitors-js时,注意避免过度监控,以免影响应用性能。合理的配置和错误过滤策略是...

    软件测试中容易忽略的缺陷

    ### 软件测试中容易忽略的缺陷 #### 摘要 软件测试是确保软件质量的关键步骤之一,它能够帮助识别并纠正软件中的错误、缺陷以及不符合需求的地方。然而,在实际测试过程中,某些类型的缺陷因为各种原因经常被忽视...

    proe二次开发常见错误及结果

    5. 外部程序初始化失败错误'PRO_TK_GENERAL_ERROR':当添加菜单项时,如果菜单位置设置错误,就会产生这种错误。确保在添加菜单项时,位置参数和菜单项之间的关系正确无误。例如,如果要添加一个按钮,需要明确按钮...

    c语言良好的程序设计习惯3

    11. 相等表达式的书写:当相等表达式具有一个变量和一个常量时,一些程序员喜欢在表达式中把常量写在左边,把变量写在右边,以避免当程序员意外地用==运算符取代=运算符时发生逻辑错误。 这种书写方式可以防止逻辑...

    Java程序员容易犯的10个错误

    当使用`Arrays.asList()`方法将数组转换为列表时,返回的是`java.util.Arrays.ArrayList`,这是一个内部静态类,不支持添加或删除元素。如果需要一个可变的ArrayList,应使用构造函数创建新的ArrayList实例,如: ...

    用Java语言编写程序最容易犯的21种错误

    ### 用Java语言编写程序最容易犯的21种错误 #### 1. 代码重复 (Duplicated Code) 在软件开发过程中,代码重复是最常见的问题之一。这种现象通常来源于程序员使用复制粘贴的方式来快速构建功能,这导致代码库中存在...

    swift-Aardvark是一个库能够很容易创建可操作的错误报告

    在实际开发中,Aardvark可以帮助提高代码质量,因为它鼓励开发者为每一个可能出现的错误都提供明确的处理方式,而不是简单地忽略或抛出异常。这有助于避免因未捕获的错误导致的应用崩溃,提升用户体验。同时,通过...

    .NET开发者常会忽略的几个错误

    数据库连接超时是.NET应用程序开发中常见的一个问题。当应用程序尝试与数据库建立连接的时间超过了预定的时间限制时,就会发生连接超时。这不仅会影响到应用程序的性能,还可能导致用户无法正常使用服务。 **原因...

    C语言学生编程常见错误.pdf

    错误分析:错误一,因为在C语言中输入数据时不能规定精度,所以程序段中的“5.2f”是不合法的。不能企图用这样的scanf函数输入数据而企图规定变量a的精度。 错误二,scanf函数中的“格式控制”后面应该是变量地址,...

    C语言中最容易犯的几个错误的参考.doc

    如果不写`break`,程序会继续执行下一个`case`,除非遇到`break`或`default`。 理解并避免这些常见错误有助于编写更健壮、更可靠的C语言程序。在编写代码时,养成良好的编程习惯,注意变量类型、语句结构、格式控制...

    写坏C程序的十大诀窍

    **解析**: 这里定义了一个未初始化的变量 `x` 并试图打印它的值,编译器会发出警告提示,但如果不处理这些警告,程序运行时可能会出现问题。 总之,通过避免上述这些常见的错误,可以大大提高 C 程序的质量和可维护...

    MQL4程序的常见错误中文解析

    - _Datatypes_:选择不合适的数据类型或类型转换错误会导致程序运行时出现问题。 - 在声明变量时需根据实际需求选择合适的数据类型,并确保在类型转换时进行适当的检查和处理。 6. **函数调用错误**: - _...

    菜鸟的22个经典错误.ppt

    变量初始化放在循环外,是一个典型的ACM初级错误,因为ACM赛题的多组测试特性,如果不能在循环内初始化,将只能确保第一组数据没问题,而很多入门者习惯只测试一组数据,很容易忽略这个问题。 菜鸟之伤(7):数组...

    excel对比小程序

    - 为了提高用户体验,程序可能提供了交互式界面,让用户能够选择待对比的文件、设置比较选项(如忽略空格、忽略大小写等)。 - 结果展示部分,可以采用高亮显示差异,或者通过颜色标记,使用户一眼就能看出变化。 ...

    软件测试方法之黑盒测试

    例如,当创建一个数组时,可能会忽略数组索引的边界,如VB中的数组从0开始,而程序员可能误以为从1开始。因此,测试时需要包括数组边界值,如0和数组长度减1,来确保程序在这些关键点上的正确性。 通过以上讲解,...

    托管应用中的意外错误(IDE 源代码)

    本文原来的代码采用了轻量级的命令行编译方式。... 错误处理底层结构是一个很容易让人迷惑的虚幻的复杂主题。很容易让人陷入到细节当中。所以我会介绍一些相对简单的方法,它们能被广泛地应用于意外错误的处理。

Global site tag (gtag.js) - Google Analytics