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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李晓斌 黑马帝   /  2011-12-22 18:05  /  2163 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李晓斌 于 2011-12-23 09:49 编辑

高级for循环不是太懂,能把原理解释一下嘛。
File dir = new File("d:\\java\\day20");
for(String name:str)
                {
                        System.out.println(name);
                }
另外,像上面代码中定义了局部变量name,这样的话,外部就不能调用该变量了,该如何处理呢?还有高级for循环怎么转换成普通的for循环呢?求教

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 陈帅雷 于 2011-12-22 18:16 编辑

语法:
   for ( type 变量名:集合变量名 )  { … }
注意事项:
   迭代变量必须在( )中定义!
   集合变量可以是数组或实现了Iterable接口的集合类

for(String name:str)
                {
                        System.out.println(name);
                }
如果str为字符数组的话,转化为普通for循环
for(int i=0; i<str.size(); i++)
{
       System.out.println(str);
}
回复 使用道具 举报
杨旭 黑马帝 2011-12-22 18:21:05
藤椅
本帖最后由 杨旭 于 2011-12-22 18:29 编辑
  1. public class Text01{
  2.         public static void main(String[] args) {
  3.                 String []str = new String[]{"zxx","lhm","flx"};
  4.                 //普通循环
  5.                 for (int i = 0; i < str.length; i++) {
  6.                         String name = str[i];
  7.                         System.out.println(name);
  8.                 }
  9.                
  10.                 //增强for循环
  11.                 for(String name:str){
  12.                 System.out.println(name);
  13.         }
  14.                
  15.         }
  16. }
复制代码
  1. public class Text02{
  2.         public static void main(String[] args) {

  3.                   List<String> list = new ArrayList<String>();
  4.                   list.add("zxx");
  5.                   list.add("lhm");
  6.                   list.add("flx");
  7.                   
  8. //                    根据集合类长度遍历
  9.                   for(int i=0;i<list.size();i++){
  10.                    System.out.println(list.get(i));
  11.                   }
  12.                   
  13. //                   根据迭代器遍历
  14.                   for(Iterator i = list.iterator();i.hasNext();){
  15.                    System.out.println(i.next());
  16.                   }
  17.                   
  18. //                   根据增强for循环遍历
  19.                   for(String element : list){
  20.                    System.out.println(element);
  21.                  }
  22.         }
  23. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
这是JAVA1.5 增强的for 循环的新特性。。(enhanced for loop)
所谓“增强的for 循环”,主要也是针对容器的。使用该项特性时,开发者可以将“利用iterator
遍历容器”的逻辑交给编译器来处理。例如下列代码:
void cancelAll(Collection c) {
for (Iterator i = c.iterator(); i.hasNext(); ) {
TimerTask tt = (TimerTask) i.next();
tt.cancel();
}
}
可以用增强的for 循环改写为:
void cancelAll(Collection c) {
for (Object o : c)
((TimerTask)o).close();
}

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
既然是局部变量,那当然是只能在规定的范围内使用。所谓局部变量就是在一个方法内定义供该方法使用的变量,自然外部是访问不到的,如果非要外部访问,不防把它定义为全局的。
回复 使用道具 举报
for(String name:str)
                {
                        System.out.println(name);
                }
相当于 普通for循环
for(int i = 0;i<str.length;i++){
        String name = str[i];
        System.out.println(name);
高级for循环中定义的变量,外部不能使用,循环结束便成了垃圾
}
回复 使用道具 举报
刘旭 黑马帝 2011-12-22 21:19:54
7#
int []a={4,3,5,7};
for(int x:a)      //定义一个int x的变量,用以存放从a中取出的int型数据。当循环时,依次从a中取出数据,赋值给x,然后再打印
                {
                        System.out.println(x);
                }
回复 使用道具 举报
这种for循环是专门用来迭代 集合和数组的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马