2013-09-24 2 views
-2

좋아요, 대학 강의실 에서요. 사용자가 입력 한 정수를 가져 와서 배열에 넣고 인쇄하십시오.배열 범위를 벗어남 예외?

컴파일하려고 할 때 오류가 발생합니다. 스레드 "메인"java.lang.ArrayIndexOutOfBoundsException에

예외 : 0에서 Lab3.main (Lab3.java:12)

public class Lab3 { 


public static void main(String[] args) { 


int[] First = {}; 

for(int i=0;i<First.length;i++) 
{ 
    First[i] = (int)(Math.random() *10 +1); 
    System.out.print(First[i] + " "); 
} 
for(int i=0;i<First.length;i++) 
{ 






    if (First[i]%2==0) 
    { 

     System.out.println("Even numbers are:"+First[i]); 
    } 


} 

for(int i=0;i<First.length;i+=2)  
{ 

    if (First[i]%2==0) 
    { 

     System.out.println("Even numbers are:"+First[i]); 
    } 



} 

for(int i=0;i<First.length;i++) 
{ 
     int temp = First[i]; 
     First[i] = First[First.length - i - 1]; 
     First[First.length - i - 1] = temp; 
     System.out.println("Reverse is:"+temp); 
} 


System.out.println("First is:"+First[0]); 
System.out.println("First is:"+First[9]); 




} 

}

+2

빈 배열 (0 개 필드)을 초기화 한 다음 첫 번째 필드 (인덱스 0)에 액세스하려고 시도합니다. – sheltem

+0

arrayList를 사용할 수도 있습니다. 더 유연합니다 – Marc

답변

4

int[] First = {}; 
// is the same as 
int[] First = new int[0]; 

이렇게함으로써 당신은 0 요소를 가진 배열을 생성하고 있습니다. 그런 다음 첫 번째 요소에 액세스하려고합니다.

System.out.println("First is:"+First[0]); // access first element of empty array? 

요소가 없으므로 어떻게 액세스 할 수 있습니까? 정적 모음 (크기 조정되지 않음) 원하는 경우 10 개 요소

int[] First = new int[10]; 

와 배열을 만들거나 (크기 조정) 동적 컬렉션이하는 List 구현을 사용합니다.


Java 명명 규칙은 변수가 소문자 알파벳으로 시작해야한다고 명시합니다. camelCase을 사용하십시오.

+1

'ArrayIndexOutOfBoundsException'은 루프에 의해 보호되므로 해당 행에서 발생하지 않습니다. 이 예외는 코드의 마지막,'println' 문에서 거의 던져진다. –

+0

@AlonsoDominguez 맞습니다. 바로 잡으십시오. 감사. –

+0

도움에 감사드립니다! – Conor

2
int[] First = {}; 

은 길이가 0 인 배열을 초기화합니다.

First[0] 존재하지 않습니다. 길이를 선언의 일부 또는 그 이후로 언급하십시오. 위의 당신은 크기를 모르는 경우 대신 ArrayList을 사용할 수 있습니다 First[11]

에서 같은 예외가 발생합니다

First = new int[10]; //creates an array of 10 ints

참고.

List<Integer> first = new ArrayList<Integer>(); 
first.add((int)Math.random() *10 +1); 
+0

도움을 주셔서 감사합니다! – Conor

2

어레이를 제 시간에 맞추기 때문에 목록을 사용해야합니다. 그래서 배열이 빈 배열로 초기화되기 때문에 First [i]에 액세스 할 수 없습니다 (영원히 그렇게 유지 될 것입니다). 일부 요소 (유스 케이스가 아닌) 또는 초기 용량으로 새 요소를 사용하여 배열을 초기화 할 수도 있습니다.

+0

감사합니다. 다음에 알거야. – Conor

0

어레이가 제 시간에 늘어날 것이므로 List를 사용해야합니다.

관련 문제