2015-01-22 4 views
-3

정렬 된 벡터에 대해이 코드가 Java에서 있지만 문제가 발생했습니다. 어떻게 든 올바르게 추가하지 않으면 " 예외 : java.lang.ArrayIndexOutOfBoundsException : 10"과 같은 오류가 발생할 수 있습니다. 아마 약간의 수정이 필요 하겠지만 나는 그것을 보지 않을 것입니다. 아무도이 작품을 만들 수 있도록 도와 줄 수 있습니까? 정렬 된 벡터 추가 문자열

마술 배열을 성장하지 않습니다 새로운 번호로 maximum을 설정하면

package ads2; 

public class SortedVector { 

private int length; 
private int maximum; 
private int growby; 
private int temp; 
private int x = 0;   
private int high; 
private int middle; 
private int low; 


private String[] data; 

public SortedVector() 
{ 
    length = 0; 

    maximum = 10; 

    data = new String[maximum]; 

} 



public void SetSorted() { 

} 


public void SetGrowBy(int growby)  
{ 
    maximum += growby; 

} 


public int GetCapacity() 
{ 

    return maximum; 
} 


public int GetNoOfItems() 
{ 

    return length; 

} 


public String GetItemByIndex(int index) 
{ 

    return data[index]; 
} 

public int FindItem(String search) 
{ 

    for (x=0;x<=length;) 

    { 


     middle =((low + high)/2); 
     if (data[middle].compareTo(search)==0) 
     { 
      return middle; 
     } 
     else if (data[middle].compareTo(search)<0) 
     {  

      low = middle; 
      x++; 
      return FindItem(search); 
     } 
     else 
     { 

      high = middle; 
      x++; 
      return FindItem(search); 
     } 
    } 
    return -1; 
} 

public boolean Exists(String search) 
{ 
    boolean output; 

    int y; 
    y = 0; 

    while (data[y] != search && (length - 1) > y) 
    { 
     ++y; 
    } 

    if (data[y] == search) 
    { 
     output = true; 
    } else 
    { 
     output = false; 
    } 

    y = 0; 

    return output; 

} 


public void AddItem(String value) 
{ 
    if (length == maximum)  
    { 
    maximum += 10; 
    } 
    data[length] = value; 


    length++; 

} 


public void InsertItem(int index, String value) 
{ 
    if (length == maximum) 
    { 

    maximum += 10; 

    } 

    for(int i = length - 1; i >= index; --i) 
    { 

     data[i + 1] = data[i]; 

    } 

    data[index] = value; 

    length++; 

} 


public void DeleteItem(int index) 
{ 
    for(int x = index; x < length - 2; ++x) 
    { 

     data[x] = data[x + 1]; 

    } 

    length--; 
} 

public String toString() 
{ 


    String res = ""; 


    for (int i=0; i<length; i++) 
     res+=data[i] + "; "; 

    return res; 

    } 

} 
+0

자바에서 배열의 인덱스가 0부터 시작됩니다. 길이가 10 인 배열, 즉 data = new String [10]을 만들면 0-9를 호출하여 각 값을 가져올 수 있습니다. 'data [10]'을 호출하면 범위 밖의 인덱스를 던질 것입니다. – chancea

답변

0

감사드립니다. Java에서 배열은 주어진 크기로 만들어지며 그 크기는 입니다.은 변경되지 않습니다.

배열에 요소를 추가해야하기 때문에 배열을 확장해야하는 상황이 발생하면 새로운 최대 배열을 사용하여 배열을 만들고 기존 요소를 모두 복사 한 다음 이 새 배열을 data 필드에 할당하십시오.


나는 또한 귀하의 setGrowBy()이 아마도 수행하지 않을 것으로 생각합니다. 어레이를 성장시키려는 의도라면, 위에서 말한대로해야합니다. 그러나 growby 변수를 설정하려는 경우 maximum을 변경하는 대신 해당 변수를 설정해야합니다.


마지막 주 : Java의 규칙은 메소드와 변수 이름이 항상 소문자로 시작한다는 것입니다. 형식 이름은 대문자로 시작해야하며 상수는 모두 대문자 여야합니다. 따라서 메소드의 이름을 변경해야합니다.

+0

모든 해답을 찾아 주셔서 감사합니다. 그러나 int FindItem (String search)이 재귀적인 방식으로 표시되는 방법을 알고 싶습니다. 대신 지금 당장 가지고 있습니다. 감사합니다. – ekcs

+0

이것은 별개의 질문입니다. 그러나 [이 하나]와 같이 이전에 요청한 질문을 더 잘 검색해야합니다 (http://stackoverflow.com/questions/19492402/sorting-and-binary-search-using-java). 그렇지 않으면 질문이 닫힙니다. 복제. 어쨌든, 바이너리 검색은 배열이 정렬 된 경우에만 작동한다는 것을 기억하십시오! – RealSkeptic