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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李春阳 中级黑马   /  2012-6-6 15:58  /  1748 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

大家对一个数组进行for循环遍历时相信都注意过:
有时候是for(int x = 0 ; x < arr.length ;x++)
但有时候又是 x <= arr.length
或者         x <= arr.length -1

是用 < 还是 <= 呢
加不加 -1 呢

2*2 一共4种选择啊~~~晕了。。。
怎么区分使用呢,或者说什么时候用哪一个啊?

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
数组的角标是从0开始的
length方法返回的是长度
  1. for(int x = 0 ; x < arr.length ;x++)//第一种
  2. for(int x = 0 ; x <= arr.length-1 ;x++)//第二种
复制代码
回复 使用道具 举报
lz这个问题确实容易晕哦~~~

for(int i = 1; i<arr.length -1 ; ++i)
这个意思是:在数组长度为10的话,每遍历一次,下次遍历数组的长度都少1次,length表示数组的长度
for(int x = 0 ; x < arr.length ;x++)
这个的意思是: 每一次都跟数组的长度去遍历。长度不会减少
x定义的是角标位, x<length控制的是遍历数组的长度, x<length-1控制的是遍历数组的长度,数组长度每次-1

举个例子:
public static void threeMethod() {
   int array[] = {5,7,2,-5,10,-7,8};
  
   for(int i = 0 ; i < array.length ; i ++) {
    for(int j = i +1 ; j < array.length ; j ++) {
     if(array < array[j]) {
      int temp = array;
      array = array[j];
      array[j] = temp;
     }
    }
   }
   for(int i = 0 ; i < array.length ; i ++) {
    System.out.print(" "+array+" ");
   }
}
}}
第一个for循环,即外层循环,控制的是循环次数,所以不管你是0到9还是1到10
效果是一样的,只要相差值相同即可
第二个就有些讲究了j是从i+1开始的
因为第一次第一个与第二个相比,正好是i和i+1相比,
第二轮就是i+1和i+1+1相比,这样就遍历了所有元素
当然,你也可以不管什么i+1,j+1,所有都写成0开始到结尾结束
只是这样效率低一点罢了

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
数组的角标是从0开始, 比如
int[] arr = int [1,2,4,3,2] 这个数据为5个元素。arr.length返回的结果为5,而遍历数组是,从0开始,也是数组的第一个元素。
回复 使用道具 举报
本帖最后由 张少威 于 2012-6-6 16:09 编辑

1. for(int x = 0 ; x < arr.length ;x++)与for(int x = 0 ; x <= arr.length-1 ;x++)是等效的。
2. 数组arr的最大下标是arr.length-1 。
3. for(int x = 0 ; x <= arr.length ;x++) 可能会抛出ArrayIndexOutOfBoundsException异常信息哟。

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
数组下标是从0开始,数组arr的长度为:arr.length
数组arr的最后一个元素是arr[arr.length-1]
for(int x = 0 ; x < arr.length ;x++)和for(int x = 0 ; x <= arr.length-1 ;x++)是一样的
for(int x =0; x<arr.length;x++) 会抛出异常
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马