A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mah707 中级黑马   /  2013-4-13 18:59  /  3035 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

各位大侠,帮忙通俗易懂的解释哈for循环中的定义变量问题(执行顺序就不用说了)看了视频和书本上面的解释,知道for循环是知道有限次的循环而来用的,可是死活不懂for的初始化表达式,{for(int x=0;;)}并且看书上大部分都是在后面的代码里用到了x这个变量去取数组中的值啊等等,给解释哈,谢谢啦!

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

17 个回复

正序浏览
Sword 发表于 2013-4-14 11:16
for循环在第一次反复之前要进行初始化。随后,它会进行条件测试,而且在每一次反复的时候,进行某种形式的 ...

好详细,例子参考价值很大,谢谢!
回复 使用道具 举报
Sword 金牌黑马 2013-4-14 11:16:11
17#
for循环在第一次反复之前要进行初始化。随后,它会进行条件测试,而且在每一次反复的时候,进行某种形式的“步进”(Stepping)。for循环的形式如下:

for(初始表达式; 布尔表达式; 步进)
语句

无论初始表达式,布尔表达式,还是步进,都可以置空。每次反复前,都要测试一下布尔表达式。若获得的结果是false,就会继续执行紧跟在for语句后面的那行代码。在每次循环的末尾,会计算一次步进。
for循环通常用于执行“计数”任务:


//: ListCharacters.java
// Demonstrates "for" loop by listing
// all the ASCII characters.

public class ListCharacters {
  public static void main(String[] args) {
  for( char c = 0; c < 128; c++)
    if (c != 26 )  // ANSI Clear screen
      System.out.println(
        "value: " + (int)c +
        " character: " + c);
  }
} ///:~
注意变量c是在需要用到它的时候定义的——在for循环的控制表达式内部,而非在由起始花括号标记的代码块的最开头。c的作用域是由for控制的表达式。
以于象C这样传统的程序化语言,要求所有变量都在一个块的开头定义。所以在编译器创建一个块的时候,它可以为那些变量分配空间。而在Java和C++中,则可在整个块的范围内分散变量声明,在真正需要的地方才加以定义。这样便可形成更自然的编码风格,也更易理解。
可在for语句里定义多个变量,但它们必须具有同样的类型:


for(int i = 0, j = 1;
    i < 10 && j != 11;
    i++, j++)
/* body of for loop */;
其中,for语句内的int定义同时覆盖了i和j。只有for循环才具备在控制表达式里定义变量的能力。对于其他任何条件或循环语句,都不可采用这种方法。

1. 逗号运算符
早在第1章,我们已提到了逗号运算符——注意不是逗号分隔符;后者用于分隔函数的不同自变量。Java里唯一用到逗号运算符的地方就是for循环的控制表达式。在控制表达式的初始化和步进控制部分,我们可使用一系列由逗号分隔的语句。而且那些语句均会独立执行。前面的例子已运用了这种能力,下面则是另一个例子:


//: CommaOperator.java

public class CommaOperator {
  public static void main(String[] args) {
    for(int i = 1, j = i + 10; i < 5;
        i++, j = i * 2) {
      System.out.println("i= " + i + " j= " + j);
    }
  }
} ///:~
输出如下:


i= 1 j= 11
i= 2 j= 4
i= 3 j= 6
i= 4 j= 8
大家可以看到,无论在初始化还是在步进部分,语句都是顺序执行的。此外,尽管初始化部分可设置任意数量的定义,但都属于同一类型

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
楼主,我认为,你要学习这个语句的话,就先别看数组的什么的和这个语句的结合,当然你看完了这个语句的语法结构,和执行顺序。这个时候就应该看下每一部分的功能!!!!
例如在for之后的括号里面,一共有三部分的内容,用分号隔开了,但是三部分的内容合起来的一个总的作用就是:确定循环的范围,也就是确定for语句下面的那个循环体所执行的区间。
第一部分的内容和第二部分的内容一般来说就是在确定区间的上下限
而其中第一部分一般声明一个变量来进行区间计数,方便访问,而第三部分一般而言就是计数的变化
所以!!!在这三部分里面,第一部分起到了两个作用,非常重要!
我这里虽然没有上代码,说的比较抽象,但是你可以把我说的,对照代码想想,你就会明白我表达的意思,一定对你有帮助的
回复 使用道具 举报
public class ForApp {
        public static void main(String[] args) {
                //定义一个含有三个整数的数组
                int [] arr = new int[] {1,2,3};
                /* 这里的x代表数组的角标
                   for循环包含三个表达式,第一个表达式代表循环的开始条件
                   第二个表达式代表循环的终止条件
                   第三个表达式代表循环中变量变化条件,如果不写,会造成死循环。
                */
                for(int x=0; x<arr.length; x++) {
                        /*这里,循环中的变量x代表数组的角标,例如
                                arr[x] 在循环中出现的结果就是arr[0],arr[1],arr[2]
                                当第四次循环的时候,由于终止条件是x小于数组的长度,这里数组的长度是3,所以,当x=3的时候,
                                循环的条件不成立,循环终止。
                        */
                        System.out.println(arr[x]);
                }
        }
}
回复 使用道具 举报
for(表达式1;表达式2;表达式3){语句}
表达式1负责完成变量的初始化,表达式2的值为boolean型的表达式,称为循环条件。表达式3用来修整变量,改变循环条件。
回复 使用道具 举报
初始化表达式就是到达这一句,会对在这里面局部使用到的变量进行初始化设置
回复 使用道具 举报
殇_心。 发表于 2013-4-13 19:36
给你详细说个for语句吧,如:
for( int x=0; i

"这里 int x = 0,定义初始值,也就是从0开始循环。"有点理解,我在去敲几个,谢啦
回复 使用道具 举报
邵震 发表于 2013-4-13 19:20
我擦  我打错地方了  

打代码里了 没存上........

还得在等会,等哈来了,我叫你帮我语音解决,:)
回复 使用道具 举报
何红卫 发表于 2013-4-13 19:23
如果你的for语句写成这样for(int x=0;;),就要在大括号里面控制跳出循环的条件,比如里面加个if什么条件, ...

非常感谢了,对于我这个零基础的菜鸟有所帮助,让我学到了敲代码的规范性,感谢啦
回复 使用道具 举报
mah707 发表于 2013-4-13 19:57
谢谢啦,好像有点感觉了,只是感觉他是控制要重复很多次的语句的,谢啦! ...

不客气..
回复 使用道具 举报
mah707 中级黑马 2013-4-13 19:57:44
8#
_王涛 发表于 2013-4-13 19:22
for(int x=0;;)
我对它的理解是,这个for循环中的变量也叫作局部变量,它只在for循环体中有效,当循环结束 ...

谢谢啦,好像有点感觉了,只是感觉他是控制要重复很多次的语句的,谢啦!
回复 使用道具 举报
for(int x=0;;)
这条语句应该还没有完,因为缺少判断部分,所以后面的语句中应该要有判断的语句。
这条语句中的x是局部变量,再for语句执行结束之后会自动的释放,而且也只能在for语句中进行使用。
for(1部分;2部分;3部分;){}for语句分为三个部分,1部分一般用于赋初值,2部分用于判断,当满足判断时执行{}中的代码,再{}代码执行完之后执行3部分

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 庞立森 于 2013-4-13 19:46 编辑

for(;;){}for里面什么都不写默认为true,会导致无限循环,你说的int x=0,是for里面的一个条件变量,它是用来控制for循环的,两个分号中间就是控制循环的次数的条件,最后的一个就是用来对x进行操作的(也可以什么都不写),并且只在for里面有效,for循环,和加强for循环在遍历上用的较多,一般都是和数组联合起来应用,这就是你在书里面看到的,比如int[]  arr={1,2,3,4,5};
for(int x=0;x<arr.length;x++)
{
       System.out.print(arr[x]);//把数组里面的元素打印在控制台上
}
其实这个没必要过多去了解,等你多看几天视频自然就会明白,

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
给你详细说个for语句吧,如:
for( int x=0; i<10;  )
这里 int x = 0,定义初始值,也就是从0开始循环。
(当然这里定义也可以是for语句中用到的变量。)
2个分号之间的就是判断语句了。 这里是判断 i < 10 的真假。
   哥们,推荐多去写几个for循环的代码,慢慢理解。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 何红卫 于 2013-4-13 19:26 编辑

如果你的for语句写成这样for(int x=0;;),就要在大括号里面控制跳出循环的条件,比如里面加个if什么条件,然后就break跳出循环或者continue跳出本次循环,然后你是根据什么规律来循环的,也写在大括号里面。一般不要写成这样,会让别人搞不清楚你是不是就要这样写还是写错了,写代码要清楚易懂,而不是显示你什么都会,这样的代码容易搞混,如果非要这样写,那可以换成while会不会好点。数组里用到这个X是因为刚好他可以对应数组的下标,这样就可以根据你要的规律去取数组的数据。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
for(int x=0;;)
我对它的理解是,这个for循环中的变量也叫作局部变量,它只在for循环体中有效,当循环结束后,它会立即释放内存,
也就是说,其生命周期随着for循环的结束而终止,x每循环一次,它会随着条件的判断自动x++或者x--;
例如我们在堆数组变了时,就可以根据数组的下标得到对应数组中的所有元素,而这个下标就是x了。
我个人理解就是这些了,希望帮到你。。。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 邵震 于 2013-4-13 19:34 编辑
  1. for (int x=0;x<10 ;x++ )
复制代码
我擦  我打错地方了  

打代码里了 没存上........

你加我QQ  我告诉你350158598
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马