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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 麦田守望者0812 中级黑马   /  2012-5-26 21:06  /  2761 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int[] arr ={5,4,8,9,2};
  selectSort(arr);
  for(int i:arr/*=0;i<arr.length;i++*/){
   System.out.println(arr[i]);
  }
中 若用普通for循环可以正常打印 而是用for的加强语句时 却显示有误 为什么呀

7 个回复

正序浏览
int[] arr ={5,4,8,9,2};
selectSort(arr);
int y=0;
for(int i:arr){
System.out.println(arr[y]);
y++;
}
回复 使用道具 举报
为了此题特意写代码,包含详细注释!
  1. package java基础知识.数组和常用算法;

  2. public class 增强for循环 {

  3.         /**
  4.          * @param 增强for循环的简单介绍.
  5.          */
  6.         public static void main(String[] args) {
  7.                 // 在JDK 5.0之前我们列出一列数组.输出数据需要用下变的方法
  8.                 int [] arr1 = {1,2,3,4,5,6};
  9.                 for(int i =0;i<arr1.length;i++){
  10.                         System.out.print(arr1[i]+" ");
  11.                 }
  12.                 //在JDK5.0以后.提出了一个增强for循环的语句.
  13.                 int []arr2 ={1,2,3,4,5,6};
  14.                 for(int temp :arr2){
  15.                         System.out.print(temp+" ");
  16.                 }
  17.                 //其中temp是一个临时变量,用来存放每次遍历到的元素.如果是对象的话也可以进行输出.
  18.                 String name [] ={"zhangsan","lisi","wangwu","zhouliu"};
  19.                 for(String mingzi :name){
  20.                         System.out.print(mingzi+" ");
  21.                 }
  22.                 // 二维数组,通过增强for循环也可以进行输出
  23.                 int[][] arr = { { 2, 3, 1 }, { 3, 2, 3 }, { 5, 4, 3 } };
  24.        for(int []temp :arr){  //第一次遍历是数组类型的定义数组类型的临时变量temp
  25.               for(int i :temp){          //第二次遍历是数组内的元素 定义int类型的临时变量i
  26.                       System.out.print(i+"  ");
  27.               }
  28.        }
  29.         }

  30. }
复制代码
回复 使用道具 举报
int i的i代表的就是int类型的变量,i所取的就是数组arr中的元素,arr[]中的元素有些大于arr.length所以会报越界异常,在for each中声明的变量访问的就是数组中的成员。
回复 使用道具 举报
普通for循环呢
for(int i = 0;  i < arr.length; i++){
   System.out.println(arr[i]);
}
i 表示的是数组的角标,所以打印arr[i]是可以的

而对于增强for循环
for(int  i : arr){
   System.out.println(i);
}
冒号后面的arr,表示一个实现Iterable接口的集合,而冒号前面的 i,则表示从arr集合中迭代出来的具体元素
想打印的话,直接打印 i 就可以,写arr[i]就不行了,因为它不是角标

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. int[] arr ={5,4,8,9,2};
  2. selectSort(arr);
  3. for(int i:arr/*=0;i<arr.length;i++*/){
  4. System.out.println(i);
  5. }
  6. i已经迭代为arr中的元素了,不能再用arr[i]来获取其中的元素了。
复制代码
回复 使用道具 举报
本帖最后由 古银平 于 2012-5-26 21:28 编辑
  1. class ForeachDome
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.         int[] arrs ={5,4,8,9,2}

  6.         for(int arr: arrs)
  7.                 {
  8.                  System.out.println(arr);
  9.                 }
  10.         }
  11. }
复制代码
你是想用foreach循环遍历数组?
  for(int arr: arrs),冒号两边要不一样,就不会出现下列错误了,就能执行了。
ForeachDome.java:6: 已在 main(java.lang.String[]) 中定义 arr
        for(int arr: arr)
                ^
ForeachDome.java:6: foreach 不适用于表达式类型
        for(int arr: arr)
                     ^
格式: for(type variableName : array | collection)
{
     //variableName 自动迭代访问每个元素...
}

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1

查看全部评分

回复 使用道具 举报
for(int i:arr){
   System.out.println(i);
}
这样用的  用再循环中声明的量来代表从数组中取出的

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马