黑马程序员技术交流社区
标题:
为什么是 i<direction.length,而不是 i<=direction.length
[打印本页]
作者:
王运科
时间:
2012-3-27 22:57
标题:
为什么是 i<direction.length,而不是 i<=direction.length
public static void main(String[] args) {
String direction[]=new String[] {"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"};
for(int i=0;i<direction.length;i++)
{
new Road(direction[i]);
}
}
问一下,代码 for(int i=0;i<direction.length;i++) ,为什么不能写成 for(int i=0;i<=direction.length;i++) ?
作者:
刘元霄
时间:
2012-3-27 23:04
为什么是 i<direction.length,而不是 i<=direction.length
length是数组的长度。 长度是从1开始数的。
而数组是从角标开始排的
比如你 direction[] 数组的长度是12;
而角标是0到11 ;
如果等于了length 不就角标越界了吗!
作者:
魏明明
时间:
2012-3-27 23:51
public static void main(String[] args) {
String direction[]=new String[] {"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"};
for(int i=0;i<direction.length;i++)
{
new Road(direction[i]);
}
}
length是数组的属性,数组的长度是多少,长度为1就只有一个元素,而数组的角标是从0开始的,这说数组的第一个元素为direcrion[0],length为1。
你要遍历数组肯定是从数组的第一个元素,即角标为零的元素direcrion[0],一直到数组的最后一个元素即角标为长度减1(length-1)个元素。
所有要写成for(int i = 0 ; i<direction.length; i++) , 而写成for(int i=0;i<=direction.length;i++) 你就多遍历了 一个元素,可是这个元素并不存在,就会出错。
作者:
郑洋洋
时间:
2012-3-28 00:09
下标越界
作者:
杨华威
时间:
2012-3-28 10:56
i=0;你理解吗?为什么从0开始?
其实数组的下标是从0开始算起的。假如数组中有10个元素,那么数组元素的下标是从0到9.
数组元素最大的下标是数组的长度减1;direction.length是代表数组的长度,在是个元素的数组里,direction.length等于10,但是下标最大是direction.length-1,
所以应该是i<direction.length。当i等于direction.length时,数组中没有这个下标,必定会出现编译失败,出现下标越界异常。
作者:
李柯
时间:
2012-3-28 11:19
角标越界异常:使用到数组中不存在的角标。
因为你所定义的数组长度一定,而数组角标比数组的长度小一
即角标是从零开始的。当写成 for(int i=0;i<=direction.length;i++) 时
direction[12]是不存在的,而因为带上了等号将能够取到direction[12]所以将报
ArrayIndexOutOfBoundsException异常。
作者:
李井山
时间:
2012-3-28 11:33
数组中的第一个角标是0,数组的总数量是length,所以数字的最后一个角标是length-1,所以我们遍历就是从0到length-1,如 for(int i=0;i<=direction.length-1;i++),显然多打了“=”和“-1”,麻烦,不如 for(int i=0;i<direction.length;i++)这个好,因此我们都用后面这种遍历数组。
作者:
姚伟涛
时间:
2012-3-28 11:47
class Test{
public static void main(String[] args){
int[] x = {1,2,3,4,5};
for(int i=0;i<x.length;i++){
System.out.println(x[i]);
}
System.out.println("\n");
for(int y=0;y<=x.length;y++){
System.out.println(x[y]);
}
}
}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
数组是从0开始的,所以数组中x[0]=1,...,x[4]=5。没有x[5]所以 y=5会报出异常
作者:
尹丽峰
时间:
2012-3-28 21:14
数组的下标是从0开始记起,如果i<=direction.length的话,虽然编译器不会报错 但是读到length值最大的时候就越界了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2