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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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++) ?

9 个回复

正序浏览
数组的下标是从0开始记起,如果i<=direction.length的话,虽然编译器不会报错 但是读到length值最大的时候就越界了
回复 使用道具 举报
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会报出异常
回复 使用道具 举报
数组中的第一个角标是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++)这个好,因此我们都用后面这种遍历数组。
回复 使用道具 举报
角标越界异常:使用到数组中不存在的角标。
因为你所定义的数组长度一定,而数组角标比数组的长度小一
即角标是从零开始的。当写成 for(int i=0;i<=direction.length;i++) 时
direction[12]是不存在的,而因为带上了等号将能够取到direction[12]所以将报
ArrayIndexOutOfBoundsException异常。
回复 使用道具 举报
i=0;你理解吗?为什么从0开始?
其实数组的下标是从0开始算起的。假如数组中有10个元素,那么数组元素的下标是从0到9.
数组元素最大的下标是数组的长度减1;direction.length是代表数组的长度,在是个元素的数组里,direction.length等于10,但是下标最大是direction.length-1,
所以应该是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]);
                 }               
         }




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++)  你就多遍历了 一个元素,可是这个元素并不存在,就会出错。
回复 使用道具 举报
为什么是 i<direction.length,而不是 i<=direction.length     
length是数组的长度。  长度是从1开始数的。
而数组是从角标开始排的
比如你 direction[] 数组的长度是12;
而角标是0到11 ;
如果等于了length 不就角标越界了吗!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马