美文网首页
Java中的for循环问题

Java中的for循环问题

作者: _n_n_ | 来源:发表于2019-12-12 13:28 被阅读0次

今天编写程序时遇到了一个bug,经过漫长的调试,终于找出了问题所在。

下面是测试代码:

import java.util.ArrayList;
import java.util.List;

public class Test {

    public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        String str1 = "String1";
        String str2 = "String2";
        strings.add(str1);
        strings.add(str2);
        
        //输出列表中的元素内容
        for (int i = 0; i < strings.size(); ++i) {
            System.out.println(i + ":" + strings.get(i));
        }
        
        System.out.println("--------");
        
        //测试在for循环中往列表添加元素时,输出的内容
        for (int i = 0; i < strings.size(); ++i) {
            System.out.println(i + ":" + strings.get(i));
            if (i == 0) {
                strings.add("String3");
            }
        }
        
        System.out.println("--------");
        
        //输出列表中的元素内容
        for (int i = 0; i < strings.size(); ++i) {
            System.out.println(i + ":" + strings.get(i));
        }
        
        System.out.println("--------");
        
        //测试在循环中删除列表元素时,输出的内容
        for (int i = 0; i < strings.size(); ++i) {
            System.out.println(i + ":" + strings.get(i));
            if (i == 0) {
                strings.remove(str1);
            }
        }
    }

}

运行结果如下所示:

0:String1
1:String2
--------
0:String1
1:String2
2:String3
--------
0:String1
1:String2
2:String3
--------
0:String1
1:String3

程序一开始,创建了ArrayList列表,并向列表中添加了两个String字符串,然后输出列表中的元素内容。

接着,测试当在for循环中往列表添加元素并输出时,会发生什么事情。结果,程序并没有如我想象的那样,只输出前两个元素,而是将三个元素全部输出。

然后,再次输出修改后列表的元素内容。

最后,测试当在for循环中从列表移除元素并输出时,会发生什么事情。结果,程序没有产生越界异常,而只是少输出了一个元素——String3。

通过对此测试程序的分析,发现我忽视了一个细节:for循环判断语句后面的strings.size()在每次循环时都会重新执行,从而重新得到列表的大小,然后进行比较。所以,当在第一次循环中添加新元素时,这个新元素仍然可以得到遍历;当在第一次循环中删除元素时,此元素的下一个元素会替补此元素的位置,导致下一元素不会得到遍历,并且,当遍历到最后一个元素时,会结束循环。

相关文章

  • Java中的for循环问题

    今天编写程序时遇到了一个bug,经过漫长的调试,终于找出了问题所在。 下面是测试代码: 运行结果如下所示: 程序一...

  • java中的循环语句有哪些

    java中的循环语句有哪些 Java中有三种主要的循环结构: while 循环 do…while 循环 for 循...

  • 理解ConcurrentHashMap的实现原理

    HashMap的并发问题 Java7 在Java7上,HashMap扩容Rehash的过程中,可能出现循环链表导致...

  • Java中的for循环

    循环是我们在写程序时经常用到的语句。 下面贴出示例代码: 1.public static void main...

  • Kotlin基础篇:when的使用

    when在Java中是循环语句,但在Kotlin中它代表的可不是循环语句,而是和Java中的switch case...

  • Kotlin-循环语句

    1、while循环: 与Java相同 2、for循环 Java中for-i循环在Kotlin中直接就被舍弃了,而J...

  • JAVA小知识

    在JAVA中如何跳出当前的多重嵌套循环?在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在...

  • 2018-10-18 Java 小知识

    Java 可使用 break + 标签来跳出多重循环 参考资料java 中的三种跳出多重循环的方式 Java 泛型...

  • Thread的start和run的坑

    问题发现 先看一段代码: 执行结果: 然后进程就死循环了 问题分析 java中thread的start()和run...

  • java_SE循环结构

    Java中提供了3中循环结构 while循环do...while循环for循环 do{}while(); : do...

网友评论

      本文标题:Java中的for循环问题

      本文链接:https://www.haomeiwen.com/subject/suavuxtx.html