2014-10-08 4 views
-1

에 위치에 temp 값을 넣으려고 할 때 문제가 내 for 루프 내에있는 것 같습니다. 나는 오류를 얻을 : 당신이 dupeSplit의 크기를 알고 후왜 "ArrayIndexOutOfBoundsException : 0"이 발생합니까?

'Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at main.Main.main(Main.java:33)'

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    int[] unDupe = {}; 
    System.out.print("Enter a number sequence (eg. '1 2 10 20'): "); 
    String dupe = input.nextLine(); 
    String[] dupeSplit = dupe.split(" "); 

    int temp; 
    for(int i = 0; i < dupeSplit.length; i++){ 
     temp = Integer.parseInt(dupeSplit[i]); 
     unDupe[i] = temp; // line 33 
    } 
} 
+0

후에는 배열의 모든 요소를 ​​할당하지 않았다. – OldProgrammer

+0

Java 배열은 고정 길이이며 일단 생성되면 크기를 변경할 수 없습니다. 필요한 최대 길이를 모르는 경우 "최악의 경우"에 대해 배열을 할당하거나 고정 길이가 아닌 ArrayList와 같은 것을 사용해야합니다. –

답변

4

int[] unDupe = {};으로 unDupe 배열을 선언하고 초기화하는 중입니다. 그러나 요소가 없습니다. 제로 사이즈의 배열

unDupe[i] = temp;으로 색인을 생성하려고하면 배열 크기를 초과합니다. 색인이 범위를 벗어났습니다. 배열이 unDupe[0] 인 경우에도 배열은 최소한 size = 1이어야합니다. 최대

당신이 당신의 중복 제거 배열이어야 입력을 해제 복제하는 경우, , 입력 배열 dupeSplit와 같은 크기, 당신은 dupeSplit의 크기를 알고 후 int[] unDupe = new int[dupeSplit.length];를 선언 할 수 있습니다. deDupe를 나중에 선언하십시오.

0

이 unDupe를 시작합니다.

-1

보십시오 당신은 배열에 필요하지만 여러 가지로 (100)를 대체 할 수

int[] unDupe = new int[100]; 

를 사용하여.

+0

-1 그가 원하는 수, 즉 dupeSplit.length를 정확히 알고 있습니다. – MrHug

2

unDupe를 {}으로 초기화하면 길이가 0입니다. 따라서 인덱스 0 (또는 그 이상)에서 unDupe에 요소를 넣으려고하면 배열 (java)에서 0...(length - 1)의 인덱스에만 저장할 수 있기 때문에 범위를 벗어난 예외가 발생합니다. 수열의 크기를 알고 나면 unDupe를 초기화하여이 문제를 해결하십시오. 당신이 ={} 표기와 하늘의 배열로 unDupe을 초기화하기 때문에

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 

    System.out.print("Enter a number sequence (eg. '1 2 10 20'): "); 
    String dupe = input.nextLine(); 
    String[] dupeSplit = dupe.split(" "); 
    int[] unDupe = new int[dupeSplit.length]; 

    int temp; 
    for(int i = 0; i < dupeSplit.length; i++){ 
     temp = Integer.parseInt(dupeSplit[i]); 
     unDupe[i] = temp; 
    } 
} 
1

당신은 (그것을 사용 가능한 메모리 전혀 없음) 그것의 요소 0에 쓸 수 없습니다. 다음과 같이 수행

int[] unDupe = new int[dupeSplit.length]; 
0

:

대신 분할 후 unDupe의 초기화를 넣고로 교체하려고

String[] dupeSplit = dupe.split(" "); 
int[] unDupe = new int[dupeSplit.length]; 

이제 unDupe 초기 크기를 갖는다.

1
int[] unDupe = {}; 

은 0 요소의 배열입니다. unDupe [i] (여기서 i = 0-> dupeSplit.length)에 액세스하려고하면 범위를 벗어난 예외가 발생합니다. 배열에 공간이 할당되지 않은 경우 배열의 인덱스에 어떻게 액세스 할 수 있습니까? UnDupe의 크기가 0이기 때문에 unDupe [0] -> ERROR입니다. 요소가 없습니다!

이 작업을 추가 할 수 있습니다 :

int[] unDupe = new int[dupeSplit.length]; 

이 줄

String[] dupeSplit = dupe.split(" ");