黑马程序员技术交流社区

标题: 关于FOR循环的问题。。。 [打印本页]

作者: 一帆风顺    时间: 2012-9-19 12:22
标题: 关于FOR循环的问题。。。
本帖最后由 王博 于 2012-9-21 18:44 编辑

今天看了一个题,可是有部分不明白啊

class ForDemo
{
public static void main(String[] args)
{
  int sum=0;
  int [] a=new int[200];   //初始化数组
  for (int i=0;i<200 ;i++ )
  {
   a=i+1;
  }
  for(int k:a)                                        //想问一下,这句话是什么意思啊?也是For循环么?我的理解是k从数组a中一次去一个元素然后循环求和////不是很明白啊。。。     
  {                                                      
   sum+=k;                                       
  }
  System.out.println("The averge is "+(double)sum/a.length);
}
}

作者: 尤圣回    时间: 2012-9-19 12:23
增强for循环
作者: 徐传任    时间: 2012-9-19 12:24
这是一个增强for,用于遍历a数组中的值
作者: 赵宇    时间: 2012-9-19 12:27
增强的for循环,就是遍历a数组,你理解的没错。网上找了个例子,共同学习。
增强型的for循环 优点主要体现在集合中,随便举个例子
比如对 set 的遍历
一般是迭代遍历:
Set<String> set = new HashSet<String>();
Iterator<String> it = set.iterator();
while (it.hasNext()) {
  String str = it.next();
  System.out.println(str);
}
for循环遍历:
for (String str : set) {
      System.out.println(str);
}
是不是简单些?

优点还体现在泛型 假如 set中存放的是Object

Set<Object> set = new HashSet<Object>();
for循环遍历:
for (Object obj: set) {
      if(obj instanceof Integer){
                int aa= (Integer)obj;
             }else if(obj instanceof String){
               String aa = (String)obj
             }
              ........
}
如果你用Iterator遍历,那就晕了
map list 也一样

唯一的缺点就是 在遍历 集合过程中,不能对集合本身进行操作
  for (String str : set) {
   set.remove(str);//错误!
  }
作者: 黑马杨晨    时间: 2012-9-19 12:31
这是高级for循环,毕老师java基础教程,第17天,第18个视频有讲解。

JDK1.5中增加了增强的for循环。

缺点:
  对于数组,不能方便的访问下标值;
  对于集合,与使用Interator相比,不能方便的删除集合中的内容(在内部也是调用Interator).
除了简单遍历并读取其中的内容外,不建议使用增强的for循环。

一、遍历数组

语法为:

for (Type value : array) {

    expression value;

}

//以前我们这样写:

void someFunction ()

{

    int[] array = {1,2,5,8,9};

    int total = 0;

    for (int i = 0; i < array.length; i++)

    {

        total += array;

     }

    System.out.println(total);

}

//现在我们只需这样写(和以上写法是等价的):

void someFunction ()

{

    int[] array = {1,2,5,8,9};

    int total = 0;

    for (int n : array)

   {  

       total += n;

    }

    System.out.println(total);

}

作者: 陈俊来    时间: 2012-9-19 14:18
for(int k:a) {                                                      
   sum+=k;                                       
  }
for循环增强, for(int k:a) { }
k是每次遍历集合a的时候取出来的值,

作者: 翁鹏    时间: 2012-9-19 15:04
本帖最后由 翁鹏 于 2012-9-19 15:06 编辑

for(int k:a)            //把 a数组 中的的 int类型的值 赋予给 int类型变量k, 赋值一次(迭代一次),执行一下语句。 增强型FOR循环  。                        
{                                                      
       sum+=k;                                       
}


作者: 班志国    时间: 2012-9-19 15:52
这是一个 增强for循环
作者: 彭旭文    时间: 2012-9-19 17:13
本帖最后由 Leo.Peng 于 2012-9-19 17:15 编辑

这是一个增强型For循环,至于具体用法,希望楼主可以去百度一下...呵呵!{:soso_e120:}加油哦!
作者: 赵永康    时间: 2012-9-19 17:22
for(int k:a)
这是一个超级for循环,因为是上面定义数组时int[] a=new int[200];
你创建的是int型的数组,所以在用超级for循环的时候,自定义变量的类型就是int 的 k是你所起的变量的名字,可以随意的写,a是你定义的数组的名字。
然后循环里面的就是你在取存入数组中的元素并和sum相加。
假如你定义的是字符串数组  例如  String[] strs=new  String[]{"ds","das"};这个时候你的超级for循环就应该写成for(String  str:strs){}
将的不是很清楚,希望能明白
作者: 李泽巍    时间: 2012-9-19 17:25
这是一个增强for循环(foreach循环),主要用于遍历数组
foreach语法如下:
  1. for(type variableName : array | collection)
  2. {
  3.     //variableName自动迭代访问每一个元素
  4. }
复制代码
for(int k : a)和for(int i = 0; i<a.length(); i++){int k = a;}实现的功能是一样的,遍历数组用foreach明显更加方便,需要注意的是foreach是不能给循环变量赋值的。




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