不一样的for循环

来源:互联网 发布:暴力蟆蛤不可取知乎 编辑:程序博客网 时间:2024/05/17 06:44
       提到for循环,我们肯定就想到一种写法:
    for (int x=0;x<3; x++)     {         System.out.println("这是循环体");    }

       这是一种很常见的写法,但是使用for循环,我们都形成了一种固化的思维,其实for循环也可以很不一样。

       for循环的格式是这样的:

    for(初始化表达式;循环条件表达式;循环后的操作表达式)    {           执行语句;(循环体)     }

        如果我们这样写一个for循环:

    for(System.out.println("1");System.out.println("2");System.out.println("3"))    {System.out.println("4");    }

      

      编译没有通过,并且编译器提示我们,第二个表达式应该是一个Boolean类型。以上我们提到for循环的格式,第二个应该是一个条件表达式,正如编译器提示我们的那样,应该是一个真值或者假值,如果为真,则循环执行,如果为假,那么就跳出循环,所以如上代码肯定是不行 的。

     所以我们可以这样写:

  for(System.out.println("1");true;System.out.println("3"))  {System.out.println("4");  }
     这样写编译能够通过,但是恒真的条件会让代码陷入死循环。(我们不可以写恒假的表达式,如果写一个恒假的表达式编译会报错)

    

     我们可以看到是3和4进行了循环结果的输入,并没有循环输出1,为了能够清楚看到for循环的执行顺序,我们把代码稍微改一下:

  int x=0;  for(System.out.println("1");x<3;System.out.println("3"))  {System.out.println("4");x++;  }
 

     输出结果是 1  4  3  4  3  4  3,我们看到1只输出了一次,第一个条件是初始化表达式,它只执行一次;它执行完之后,判断第二个条件是否为真,如果为真,执行循环体,循环体完毕,执行第三个表达式。我们画个图表示执行顺序是这样的:

    

     所以其实我们只需要有一个控制循环的条件表达式(第二个表达式)就可以了,初始化表达式和循环之后的操作表达式其实是可以不用写的,初始化可以写在循环外面,操作表达式可以写在循环体里面

  int x=0;  for(;x<3;)  {        System.out.println("4");x++;  }
     但是如果我们的x变量如果只作为循环增量控制,那最好不要这么写,还是要把定义写在初始化表达式里,这样如果for循环结束,x这个变量空间也就释放了,不再占用内存空间,如果把变量定义在循环外,那么它会在循环结束还一直占用内存,不利于系统 的优化。

   我们知道有这种写法:

  for(;;){           执行语句;(循环体)  }
   循环的条件表达式默认为true,所以这是最简单的无限循环的写法。

   在实际应用中,我们可能会遇到这种情况:

   for循环初始化多个变量,循环结束后的语句有多个
        for (int a=0,b=10;a<=5&&b>=5;a++,b-- ) {
            System.out.println("a="+a+",b="+b);
        }

   for循环和while循环可以互换,但两者格式上的不同也决定了两者有所差别,比如之前提到的变量的作用域。当变量值作为循环增量存在时,区别就体现出来了,如果只作为  循环增量,用for比较好,变量被释放,不占用内存空间。

1 0
原创粉丝点击