2013-06-14 5 views
0

어떻게이 오류를 해결할 수 있으며 그 의미는 무엇입니까? 나는이 프로그램을 실행하고 값을 입력 할 때이 오류가java.lang.ArrayIndexOutOfBoundsException 오류

import java.util.Scanner; 
import java.util.Random; 

public class SortedArray 
{ 
    Scanner input = new Scanner(System.in); 
    int [] Array; 
    Sort sortedArray; 
    int sizeOfArray; 

    public SortedArray() 
    { 
     System.out.print("Enter the number of values to put in the array: "); 
     sizeOfArray = input.nextInt(); 
     Array = new int [sizeOfArray]; 
     System.out.println(""); 
     for(int i = 0; i < sizeOfArray; i++) 
     { 
      Random r = new Random(); 
      Array[i] = r.nextInt(100) + 1; 
      System.out.println(Array[i]); 
     } 
     sortedArray = new Sort(Array, sizeOfArray); 
     sortedArray.display(); 
    } 
} 


public class Sort 
{ 
    int[] array; 
    int sizeOfArray; 
    public Sort(int[] oldArray, int sizeOfOldArray) 
    { 
    sizeOfArray = sizeOfOldArray; 
    array = new int [sizeOfArray]; 
    for(int i = 0; i < sizeOfArray; i++) 
    { 
     array[i] = oldArray[i]; 
    } 
    sort(); 
    } 

    public void display() 
    { 
     for (int i = 0; i < sizeOfArray; i++){ 
      System.out.println(array[i]); 
     } 
    } 

    private void sort() 
    { 
     for (int i = 0; i < sizeOfArray; i++) 
     { 
      for (int j = 0; j < sizeOfArray; i++) 
      { 
       if (array[j] < array[i]) 
       { 
        swap(i,j); 
       } 
      } 
     } 
    } 

    private void swap(int x, int y) 
    { 
     int temp; 
     temp = array[x]; 
     array[x] = array[y]; 
     array[y] = temp; 
    } 
} 

: 여기

java.lang.ArrayIndexOutOfBoundsException: 5 
    at Sort.sort(Sort.java:29) 
    at Sort.<init>(Sort.java:13) 
    at SortedArray.<init>(SortedArray.java:23) 

는 코드입니다. 프로그램은 숫자를 가장 큰 것부터 가장 작은 것 순으로 정렬합니다. 나는 무엇이 잘못되었는지 확신하지 못한다.

+0

는 당신이이다 SSCCE] (http://sscce.org/) 코드를 게시하시기 바랍니다 수 있어야한다

for (int j = 0; j < sizeOfArray; i++) 

이 라인에? –

+0

그리고 소문자 변수를 써주세요 : int [] Array => int [] array. – AlexWien

+0

Arrays.sort (int [] a) 메서드를 사용하여 배열을 정렬 할 수 있습니다. 여기를보십시오 : http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#sort (int []) – Reda

답변

3

우선, 배열을 가지고 있으며 범위 밖 (0보다 크거나 배열의 길이보다 크거나 같음) 인 인덱스에 액세스하려고합니다. 당신이 j 확인

for (int j = 0; j < sizeOfArray; i++) 

공지 사항이 너무 큰 얻을하지 않습니다하지만 당신은 i 증가하고 있습니다 :

가능한 원인입니다.

1

문제는 내부 루프도이 상황에서 올바르지 않은 i을 증가시킵니다.

private void sort() 
{ 
    for (int i = 0; i < sizeOfArray; i++) 
    { 
     for (int j = 0; j < sizeOfArray; j++) 
     { 
      if (array[j] < array[i]) 
      { 
       swap(i,j); 
      } 
     } 
    } 
} 
+0

btw, 선택 정렬에 대한보다 효율적인 구현이 있습니다. 이것 좀 봐 http://www.leepoint.net/notes-java/data/arrays/31arrayselectionsort.html – PrR3

1

귀하의 문제는

for (int j = 0; j < sizeOfArray; j++) 
관련 문제