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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© luheqi 中级黑马   /  2014-6-29 20:28  /  1609 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 luheqi 于 2014-6-30 20:14 编辑

boolean[] arrs = new boolean[persons];
        for (int i = 0; i < arrs.length; i++) arrs = true;//此句正常运行

       for (boolean arr : arrs) {   arr = true;   }//此句运行时没达到赋值效果,引起后续程序进入死循环

点评

改成int[] 数组发现变量没变,达不到效果。下面是网友的总结,很不错: 我们在foreach循环中对数组元素进行赋值,结果导致不能正确遍历数组元素,不能准确取出每个数组元素的值。而且当我们再次访问第一个数组元素   发表于 2014-6-30 20:15

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

10 个回复

倒序浏览
没看到你的foreach
回复 使用道具 举报
布尔型的数组没赋值的时候默认是flase

点评

对,引起后面死循环,for each不能用来赋值,我异想天开了  发表于 2014-6-30 20:45
回复 使用道具 举报
gtf 发表于 2014-6-30 08:18
布尔型的数组没赋值的时候默认是flase

是的,但是这与 for (boolean arr : arrs){ arr = true }有什么冲突吗?这个循环条件难道不是以arrs数组的长度作为条件的吗?
回复 使用道具 举报
你这个定义了动态的一维数组,里面根本就没有传入参数,而且你那个persons是什么?一个类?还是自定义的变量?
回复 使用道具 举报
houyudong 发表于 2014-6-30 17:00
你这个定义了动态的一维数组,里面根本就没有传入参数,而且你那个persons是什么?一个类?还是自定义的变 ...

传入的一个变量,在我这里是100
回复 使用道具 举报
arrs=ture;这个能将ture赋给arrs?
回复 使用道具 举报
luheqi 中级黑马 2014-6-30 20:09:59
8#
本帖最后由 luheqi 于 2014-6-30 20:12 编辑

改成int[] 数组发现变量没变,达不到效果。下面是网友的总结,很不错:

我们在foreach循环中对数组元素进行赋值,结果导致不能正确遍历数组元素,不能准确取出每个数组元素的值。而且当我们再次访问第一个数组元素时,发现数组元素的值依然没有改变。不难看出,当使用foreach来迭代访问数组元素时,foreach中的循环变量相当于一个临时变量,系统会把数组元素依次赋给这个临时变量而这个临时变量并不是数组元素它只是保存了数组元素的值。因此,如果希望改变数组元素的值,则不能使用这种foreach循环。

使用foreach循环迭代数组元素时,并不能改变数组元素的值,因此不要对foreach的循环变量进行赋值。
回复 使用道具 举报
运行没有问题,死循环应该不是foreach造成的。不过你这样foreach是达不到赋值的目的的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马