-5

请帮助我找出以下简单代码中的数组索引越界错误。我在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);
}
}
4

1 回答 1

8

请注意 print 方法中循环后的分号:

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仅在该方法中的循环外声明了该方法,否则编译器会将该打印语句标记为错误。

于 2013-09-01T19:10:53.453 回答