2013-09-01 2 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

공지 사항 인쇄 방법에서 루프 후 세미콜론 : i == arr.length - 1까지 실행하고 아무것도하지 않는 것 루프 이제

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

이. 그리고 값으로 arr.length 같다는 종료 후 for 루프 무관 단지 로컬 블록, 다음 블록 : 정말하려고 한,

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

가 실행된다, 그리고 ArrayIndexOutOfBounds 예외가 발생 액세스 arr[arr.length].

동시에이 메서드의 루프 밖에 int i도 선언했습니다. 그렇지 않으면 컴파일러에서 해당 print 문을 오류로 표시했을 것입니다.

+1

좋은 캐치 Rohit –

+0

정말 고마워요. 그것은 모두 세미콜론 때문이었습니다. – user2737926

+1

@ user2737926 다음에 질문을 올리거나 얻은 예외의 스택 추적을 게시하거나 컴파일러 오류가 발생한 경우 정확한 오류 메시지를 게시하십시오. 문제를 해결하는 것이 훨씬 쉬울 것입니다. –