黑马程序员技术交流社区

标题: 增强型for循环 [打印本页]

作者: 明光照    时间: 2012-9-20 19:00
标题: 增强型for循环
本帖最后由 明光照 于 2012-9-22 21:59 编辑

public class TestFor {
        public static void main(String args[]){
                int array[]={12,1,15,21,32,24};
                for(int i:array){
                        System.out.println(array);//为什么这样的形式就会报错?
                        System.out.println(i);
                }
        }
}

作者: 严海荣    时间: 2012-9-20 19:10
for(int i: array)
这里i 对应的是值啊,array[i],里的 i 只能是角标。你打印的是array[12],array[1],array[15]...
for(int i=0;i<array.length;i++)
这里array[i]就可以了。
如果打印i,就是0,1,2,3,4,5了
作者: 皮卫凯    时间: 2012-9-20 19:20
public class TestFor
{
        public static void main(String args[])
           {
                int array[]={12,1,15,21,32,24};
                for(int i:array)
                      {
                        System.out.println(array[i]);          //为什么这样的形式就会报错?
System.out.println(i);
                      }
          }
}
因为你写的增强for 语句是 for(int i:array)  意思是通过int  i  来遍历该array数组中的元素
System.out.println(array[i]); 你这里写的意思是依次打印array[0], array[1], array[2], array[3] ...
System.out.println(i);则符合 for(int i : arrary)  的语句






作者: 赵永康    时间: 2012-9-20 19:26
严海荣 发表于 2012-9-20 19:10
for(int i: array)
这里i 对应的是值啊,array,里的 i 只能是角标。你打印的是array[12],array[1],array[15 ...

for(int i:array){
                        System.out.println(array);//为什么这样的形式就会报错?
                        System.out.println(i);
}
在这个代码中i已经是你从数组中要取的元素了,就和集合的超级for循环是一样的
List<String> l=new ArrayList<String>();
for(iString  str :l){//我们已经知道了集合中存储的String  所以就不需要写Object了
              System.out.println(str);}
超级和一般的区别就在这里一般的是你所写的那样
int[] arr=new [12];
for(int x=0;x<arr.length;x++)
{System.out.println(arr[x]);}


作者: 赵永康    时间: 2012-9-20 19:27
在这个代码中i已经是你从数组中要取的元素了,就和集合的超级for循环是一样的
List<String> l=new ArrayList<String>();
for(iString  str :l){//我们已经知道了集合中存储的String  所以就不需要写Object了
              System.out.println(str);}
超级和一般的区别就在这里一般的是你所写的那样
int[] arr=new [12];
for(int x=0;x<arr.length;x++)
{System.out.println(arr[x]);}

作者: 影子木木    时间: 2012-9-20 19:31
“for(int i:array){”  那个i已经是array数组遍历出来的整型数字了, 可能写成array[i]肯定会错啊。 楼主,你可能把i理解成数组的下标了。 如果你真想得到数组下标就定义局部变量。这样做:
int index = 0;
for(int i:array){
                                    System.out.println(array[index]);//为什么这样的形式就会报错?
                        System.out.println(i);
  
                }

作者: 影子木木    时间: 2012-9-20 19:32
“for(int i:array){”  那个i已经是array数组遍历出来的整型数字了, 可能写成array[i]肯定会错啊。 楼主,你可能把i理解成数组的下标了。 如果你真想得到数组下标就定义局部变量。这样做:
int index = 0;
for(int i:array){
                                    System.out.println(array[index]);//为什么这样的形式就会报错?
                        System.out.println(i);
                                    index++;
                }

作者: 种生祥    时间: 2012-9-20 20:09


public class TestFor {
        public static void main(String args[]){
                int array[]={12,1,15,21,32,24};
                for(int i:array){  //你这里面的i是一个临时变量,用来存放每次遍历到的元素,并不是数组array的角标
                        System.out.println(array);//为什么这样的形式就会报错?
                        System.out.println(i);
                }
        }
}


作者: 杨卫腾    时间: 2012-9-20 20:25
public class TestFor {
        public static void main(String args[]){
                int array[]={12,1,15,21,32,24};
                for(int i:array){
                        System.out.println(array[i]);//为什么这样的形式就会报错?
                        System.out.println(i);
                }
        }
}

这里涉及到一个增强型for循环的知识

语句格式:for(元素类型t 元素变量x : 遍历对象obj){
     引用了x的java语句;
              }

在遍历数组、集合方面很便捷,避免了出现角标越界的缺点。

里边的 i 不是角标,而是元素,要是使用arr[i];  就是会报错,
角标越界。

作者: 翁鹏    时间: 2012-9-20 22:42
增强型for循环是不用角标就可以访问的  应该 System.out.println(i); 可以把Array数组中的元素都打印出来。
如果你的语句里面要用到角标,建议使用普通for循环。
另外你要打印出数组的话也可以用工具类Arrays下面的static String toString(int[] a)静态方法。
Arrays.toString(array);

作者: 王小闲7    时间: 2012-9-21 09:37
i不是下标是数组中的元素,array[i]报错是数组越界吧,你再看看,好好理解下吧
作者: 杨华东    时间: 2012-9-21 10:38
增强for循环语法格式:
for(变量修饰符 变量类型 引用:要遍历的集合或者数组的具体对象)
{
    //具体操作。
}
切记重点:对于集合 或者 数组  增强for循环 把遍历的功能函数已经封装进去了。
你所说的 i 是具体的 int类型的值 而不是角标 。所以 你这样写 arr[i]就是语法错误。




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