黑马程序员技术交流社区

标题: for 循环中步进的位置 [打印本页]

作者: 陈钦涛    时间: 2013-5-1 17:29
标题: for 循环中步进的位置
本帖最后由 陈钦涛 于 2013-5-2 09:07 编辑

for (int a = 1; a < 10; )
{
... // 用省略号代表一语句
a++;
}
请问可以把a自加搬到语句块与不搬到语句块里有什么区别,哪种做法比较好,还是说在不同情况下采取不同的做法呢?谢谢。
作者: cowthan    时间: 2013-5-1 17:40
在语句块里面操作a肯定会影响你看代码啊,到时出错也不知道哪儿错了,想要在语句块里操作循环变量,我感觉应该用while比较好点
作者: 陈圳    时间: 2013-5-1 17:40
没有区别,视实现你的使用而定,放到for()内,表明,它是你的语句执行完后再++,其次是在你的使用过程中++.
作者: 花开花落总相似    时间: 2013-5-1 17:40
        貌似是个执行顺序的吧  不过你写到最后一句 跟写到括号里面一样啊
作者: 一直在路上    时间: 2013-5-1 17:48
这两个其实是没有区别的,只是一个执行顺序的问题,首先要搞懂for的执行顺序
for(int i=0;i<10;i++){

...../代码块
}
for顺序首先是看初始值也就是int i=1;然后做判断  i<10是否为真
如果为真的话,则把{
........//代码块
}里面的所有内容都执行完了再执行i++,所以两者没区别。
不过为了代码的可读性建议还是这样写比较好for (int a = 1; a < 10;a++ )
{
}
作者: 黑马华    时间: 2013-5-1 18:12
这个有可能有区别啊,你把a++放在语句块里,a++后面还有用到a值时有区别了如下例子:
package com.itheima;

public class Test100 {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                int b = 0;
                for (int a = 1; a < 10; )
                {
                        
                        a++;
                        b = a+8 ;
                }
               
                System.out.print(b);
        }

}

作者: 邹晓慧    时间: 2013-5-1 18:41
for (int a = 1; a < 10; )
{
... // 用省略号代表一语句
a++;
}

这个对于for循环来说没啥大的区别,不过如果你把a++放到代码块里,a++后面还有代码要用到a的话,那就会用a++之后的数据
如果是放到for循环的括号里面,那么就是for那个大括号里面的语句所有都执行完之后,a才会自增1
  1. class For {
  2.         public static void main(String[] args) {
  3.                 /*for (int a = 0;a < 5;a++){
  4.                         int b = 1;
  5.                         int c = a + b;
  6.                         System.out.println(c);
  7.                 }*/
  8.                 /*for (int a = 0;a < 5;){
  9.                         a++;
  10.                         int b = 1;
  11.                         int c = a + b;
  12.                         System.out.println(c);
  13.                 }*/
  14.         }
  15. }
复制代码

上面的那个图是第一个for循环运行的结果

下面的这个图是第二个for循环运行的结果 你可以对比一下 =-=

作者: Super_Class    时间: 2013-5-1 19:21
  1. <div class="blockcode"><blockquote>|---本质是是没有区别的:
  2.      |---但是当遇到以下情况时:
  3. for(int i =0;i<10;){
  4.    while(i<5){
  5.    i++;
  6. }
  7. while(i==5){
  8. i = 0;
  9. }
  10. }
  11. |---几行简单的代码,相信细心的你可以读懂的
复制代码

作者: 杨兴庭    时间: 2013-5-1 21:27
     变量自增条件放在语句块中和不放在语句块中完全是两种不同的概念,首先楼主要明确for循环语句的成员;如下图:1.参数初始化    2.条件判断   3.循环操作体(也就是楼主所属的语句块)  4. 更新循环变量(变量自增条件)
For循环语句执行过程按照以上1—2—3—4的顺序执行,1条件满足时执行下一步2, 2满足执行3, 3执行完了执行4,4执行完了执行1,  1执行完了到2判断如果不满足2的条件结束循环,完整的循环起止是1-2-3-4-1-2的顺序(2判断不成立的条件下);

   按照上面的思路楼主应该理解for循环内成员执行顺序了,在此基础上我们分析楼主的问题:
更新循环条件放在语句块和不放在语句块中有什么区别? 在很简单的for循环当然结果都一样,比如说计算100以内所有整数之和值都是5050;但是其中执行的步骤是不同的(虽然结果一样),当执行复杂for循环时,例如计算100以内能被3整除的整数之和是多少。(更新循环变量放在语句块中)当执行3时,3内在嵌套一个判断条件时,for的执行步骤就会被打乱,程序就会出现问题。
具体代码如下:(打印结果我就不列出来了,楼主回去可以在Elips中调试下,应该就能发现不同)

正常写法:

public class Text5 {

       
        public static void main(String[] args) {
                int  a;
                int sum=0;
                for(a=1;a<=100;a++)
                {
                       
                        if(a%3==0)
                        {
                                sum=sum+a;
                       
                        }
                }
                System.out.println(sum);

        }

}





放在语句块中:

public class Text4 {

       
        public static void main(String[] args) {
       
                int  a;
                int sum=0;
                for(a=1;a<=100;)
                {
                       
                        if(a%3==0)
                        {
                                sum=sum+a;
                                a++;
                        }
                }
                System.out.println(sum);
        }

}

jietu.jpg (102.37 KB, 下载次数: 0)

jietu.jpg

作者: 刘胜寒    时间: 2013-5-1 21:48
没什么区别.....
影响别人阅读...
一般习惯于固定格式的for循环语句...
不推荐使用




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2