2013-11-01 5 views
-1

이것은 제 작업입니다. 예를 들어 {1,0,0,2,3,4}의 배열에서 중복 값을 삭제하는 메서드를 만들고 싶습니다. 따라서 after는 {1,2,3,4}가되어야합니다. 이렇게하면됩니다. 만든 날짜 :배열에서 두 번 이상 값을 삭제하십시오.

public void delete() { 
     for (int i = 0 ; i < tab.length; i++) { 
      for (int j = i + 1 ; j < tab.length; j++) { 
       if (tab[i] == tab[j]) { 
        for (int c = j; c < tab.length-1; ++c) { 
         tab[i] = tab[i+1]; 
        tab[c] = tab[c+1]; 
        //tab[i] = tab[i+1]; 
        tab.length--; 
       } 
       } 
      } 
     } 
    } 

내가 원하는대로 작동하지 않습니다. 내가 좋아하는 배열이있는 경우 : 방법 후

{0,1,6,8,5,7,1,1,2,8} 

그것은 다음과 같습니다 당신이 나를

{0,6,6,8,5,7,1,2} 

도와 드릴까요?

+1

'Array'가 생성되면 길이를 변경할 수 없습니다. 가능한 경우'List'를 사용하거나 다시 작성하십시오. –

+2

'tab'이 배열이라고 가정합니다. 이것도 컴파일해서는 안됩니다. 배열의 길이는 변경할 수 없습니다. 그것은 최종입니다. 새로운 크기의 배열을 생성하고 원본 내용을 새로운 내용으로 복사 할 수 있습니다. – MadConan

+0

이 코드는 컴파일하지 않아야합니다. 배열을 감소시킬 수 없습니다. –

답변

0

다른 포스터에서 언급했듯이, 배열 크기 조정이 배열이 원래 의도했던 것과는 싸우고 있기 때문에 실제로하려는 것을 원하지 않습니다. 공간 제약에 대해 걱정할 필요가 없도록 ArrayList (http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html)와 같은 대체 데이터 구조를 자체적으로 모니터하는 것이 좋습니다.

배열의 크기를 조정해야하는 경우 Arrays.copyOf 메서드 (http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html)를 사용하여 필요에 따라 크기가 조정 된 보조 배열을 만든 다음 첫 번째 배열의 값으로 채 웁니다. :

int[] array1 = { Some Values}; 
int[] array2 = Arrays.copyOf(array1, 2 * array1*length); 
array2 = array1; 

하지만 ....

이 거의 모든가지 경우에 정말 비용이 무의미 방법입니다. 사용하지 않는 배열 필드를 삭제하려고 시도하는 대신 null로 설정하십시오. 그런 다음 데이터 구조가 일정하게 유지 될 수 있으므로 (메모리가 거의 필요하지 않음) 필요에 따라 null 필드를 처리하고 적합하다고 생각되면 다시 채울 수도 있습니다.

+0

ArrayList없이 만들어야합니다. – dzoni

+0

충분히 공정한 ... 만약 당신이 특정 크기로 귀하의 배열을 설정하고 null 값에 대해 걱정하지 않고 그 boundries 이내에 일할 것이지만 그렇다면. 길이의 경우 개수에 대한 인스턴스 변수를 유지하여 배열에 저장 한 내용을 추적하고 다른 모든 메서드는 null을 무시하게합니다. – DanK