请帮我看下面的简单代码中的数组索引越界错误。我在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);
}
}
答案 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语句标记为错误。