2013-09-01 57 views
-5

请在下面的简单代码中帮助我找出数组索引超出范围的错误。我在eclipse中运行这个代码。数组越界Java代码

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); 
} 
} 
+2

你在哪一行得到这个?在发生这种情况时,你在日食调试器中看到了什么? –

+1

@Aubin:他没有删除它。 –

+1

既然Rohit已经正确地诊断出这个问题,那它就不再那么重要了;但将来会提供一个完整的堆栈跟踪(即整个异常消息)并标记它发生的线路(因为堆栈溢出不提供线路号)。这将使诊断问题更快 –

回答

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语句标记为错误。

+1

好的渔获Rohit – 2013-09-01 19:12:33

+0

非常感谢。全是因为分号。 – user2737926

+1

@ user2737926。请记住,下次您发布任何问题时,还会发布您获得的异常的堆栈跟踪,或者在发生编译器错误的情况下,确切的错误消息。那么解决这个问题就容易多了。 –