新手自学java遇到的小问题(2),求高手解答。

digest 2012-06-16 07:36:30
看到了C和C++中没有的“foreach”语句,就实验了一下。

for (variable : collection) statement

结果无意中发现它的两个参数(第一个是数组中元素的类型,第二个是数组对象)中的第一个参数必须在括号中声明,
如果在外部声明,而括号中直接使用的话就会在第一个参数上报错:variable cannot be resolved to a type
并且在第二个参数上报错:Type mismatch: cannot convert from element type int to variable

这让我比较费解,for语句中的初始化、检查、更新参数都可以在语句外部声明,为什么这个很类似for语句的“foreach”语句不能这么定义,应该怎么理解这个语句呢?
...全文
220 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
digest 2012-06-17
  • 打赏
  • 举报
回复
顶了再顶
digest 2012-06-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组,执行完了后在把控制权交给地下的语句块,而for循环是先判断条件是否成立,然后在执行下面的语句块
[/Quote]

1、您这里所说的“嵌入语句组”实现的功能是什么?

2、您说“foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组,执行完了后在把控制权交给地下的语句块”,我不太明白您说的是每个元素的每次循环是这样的操作流程,还是一开始就对所有元素执行嵌入语句组,之后才进行后面的语句?
jjb877231000 2012-06-16
  • 打赏
  • 举报
回复
foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组,执行完了后在把控制权交给地下的语句块,而for循环是先判断条件是否成立,然后在执行下面的语句块
digest 2012-06-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
没有规定foreach一定要遍历所有的元素,中途一样可以break
至于能否用外部变量,这些属于语法限制,没有什么好纠结的
[/Quote]

确实,中间可以随时中断,书中说的是可以遍历所有的元素,并不是必须。
我过于执着的想要找个理由用于理清他和for语句的关系,以及更好的解释for语句,想多了。
digest 2012-06-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
懂得啦你说的意思 但是我回答不上来 给你顶顶
[/Quote]

多谢捧场,我也顶一个,明天见。
qybao 2012-06-16
  • 打赏
  • 举报
回复
没有规定foreach一定要遍历所有的元素,中途一样可以break
至于能否用外部变量,这些属于语法限制,没有什么好纠结的
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用 2 楼 的回复:
你的意思大概是

Java code


int[] a={3,4,5};
for(int i:a){
System.out.println(i);
}


可以运行,但是

Java code


int[] a={3,4,5};
int i;
for(i:a){
System.out.println(i);
}


不……
[/Quote]
我觉得你说的很对,“foreach”语句中是必须要全部遍历过所有元素,而不存在中途跳出的问题我觉得你说的这个才是核心,我没有考虑到这个,受教了
digest 2012-06-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
你的意思大概是

Java code


int[] a={3,4,5};
for(int i:a){
System.out.println(i);
}


可以运行,但是

Java code


int[] a={3,4,5};
int i;
for(i:a){
System.out.println(i);
}


不能运行吧。
--……
[/Quote]

您说的很有道理,可能是我想多了,其实就是像您说的这样的简单。

以您的思路继续往下想,我又想到:
for语句中之所以可以在语句之外声明变量,是因为可能在语句之外需要用到这个参数,比如运行到某一次循环时会跳出。
但在“foreach”语句中是必须要全部遍历过所有元素,而不存在中途跳出的问题,所以没有必要设计成可以在外部声明参数的设定。

这样就可以解释了,不知道我这样理解是否正确,还请高手指点。
  • 打赏
  • 举报
回复
你的意思大概是

int[] a={3,4,5};
for(int i:a){
System.out.println(i);
}

可以运行,但是

int[] a={3,4,5};
int i;
for(i:a){
System.out.println(i);
}

不能运行吧。
---------
我感觉foreach语句只是java这样规定的而已,因为java中本来就提倡for(int i=0;;)这种写法,而不提倡
int i; for(i=0;;)这种写法,所以java中新定义了一种语法很可能就只让按照第一种写
a363722188 2012-06-16
  • 打赏
  • 举报
回复
懂得啦你说的意思 但是我回答不上来 给你顶顶

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧