2013-09-01 76 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。請記住,下次您發佈任何問題時,還會發布您獲得的異常的堆棧跟蹤,或者在發生編譯器錯誤的情況下,確切的錯誤消息。那麼解決這個問題就容易多了。 –