数组越界Java代码

时间:2013-09-01 19:08:09

标签: java arrays

请帮我看下面的简单代码中的数组索引越界错误。我在eclipse中运行这段代码。

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Union_Find {

public static void intialization(int arr[])
{
    for(int i=0;i<arr.length;i++)
     {
         arr[i]=i;
     }
}

public static void print(int arr[])
{
    int i;
    for(i=0;i<arr.length;i++);
    {
        System.out.print(" "+arr[i]);
    }
}

/**
 * @param args
 */
public static void main(String[] args)throws Exception {
    // TODO Auto-generated method stub

    BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Please enter array size");
    int n=Integer.parseInt(br.readLine());

    int arr[]=new int[n];
    intialization(arr);
    print(arr);
}
}

1 个答案:

答案 0 :(得分:8)

注意打印方法中循环后的分号:

for(i=0;i<arr.length;i++);

现在这个for循环将一直运行到i == arr.length - 1,并且什么都不做。并且当值等于arr.length时,它结束,然后是下一个块,它只是与for循环无关的本地块:

{
    System.out.print(" "+arr[i]);
}
执行

,并抛出ArrayIndexOutOfBounds异常,因为它确实试图访问arr[arr.length]

巧合的是,您还在该方法的循环外声明了int i,否则编译器会将该print语句标记为错误。