2013-03-20 2 views
1

자바에서 deque 시스템을 구현하기위한 숙제가 있습니다. 나는 다른 방법을 만들어 내 시험에 합격했다. 그러나 나는 마지막 하나를 제거하는 문제가 있습니다. 나는 이것을 지금까지 가지고있다.Java - Deque 매뉴얼 - 마지막으로 제거

//remove the element at the back of the deque 
public int removeBack() 
{ 
    int size = a.size(); 
    size--; 

    if(size > 0) 
    { 
     int last = a.get(size); 
     last--; 
     a.remove(last); 
    } 

    size = a.size(); 

    return size; 
} 

다음은 실패한 JQuery 테스트입니다.

Deque d = new Deque(1); 
    d.insertBack(1); 
    assertEquals(1, d.length()); 
    int b = d.removeBack(); 
    assertEquals(0, b); 
    // java.lang.AssertionError: expected:<1> but was:<0> 

누구나 아이디어가 있으십니까? 나는이 곳에서 내가 어디로 잘못 가고 있는지 정말로 볼 수 없다.

건배

+1

'assertEquals (0, d.length());'- 길이가 이미 1이어야합니까? –

+0

(삽입물이 아직 작동하지 않음을 나타낼 것입니다!) –

답변

1

코드가 엉망입니다.

public int removeBack() { 
    return a.remove(a.size() - 1); // Remove and return last element. 
} 

(참고 :. 것이 필요 size() 조회 할 수있는 마지막 요소가 아닌 목록의 크기를 반환하는 표준)

을 당신은 아마 할 무엇을 의미

d.insertBack(1); <---- you add one element. 
assertEquals(0, d.length()); <--- length is expected to be 1 
int b = d.removeBack(); <---- you remove one element, and return the new length (!) 
assertEquals(1, b); <----- b = length after removing = 0 

+0

위의 문제를 해결했습니다. 편집 – Kyle93

+0

을 참조하십시오. 좋아, 이제는 여전히 '제거'를 오해하고 있습니다. 그것은 색인을 사용합니다. 그렇지 않은 경우 ** 목록에 중복 된 숫자가 있으면 제거해야합니까 ** ** –

+0

사실, ['remove (Object)'] (http://docs.oracle.com/javase/7/docs/ api/java/util/List.html # remove % 28java.lang.Object % 29), 목록에서 첫 번째 항목을 제거합니다. 하지만이 특정 '제거'는 [다른 것]이어야한다고 강력히 동의합니다 (http://docs.oracle.com/javase/7/docs/api/java/util/List.html#remove%28int%29), 색인을 수락합니다. – afsantos

0

다음은 불확실 같습니다

는 는
int last = a.get(size); 
    last--; 
    a.remove(last); 

내가이 관계없이 인덱스 또는 값을 취할 ArrayList.remove(int)을 기대하고 있는지의 작업을 할 수있는 방법이 표시되지 않습니다 (이 인덱스를 가져 오며).

+0

오, 예, 요소의 위치보다는 오히려 올바른 요소를 얻었습니까? – Kyle93

+0

@ Kyle93 : 문서를 읽을 때 왜 추측합니까? ;) – NPE

+0

나는 그것을 보지 않는 한 나는 단지 모양을 가져 갔다. 위의 내 추정은 정확했고 요소의 색인보다는 요소의 값을 얻습니다. 따라서 마지막 의미가 필요하지 않습니다? – Kyle93