2012-12-18 2 views
2

나는 것들이 인벤토리에 푸시 된 ArrayDeque가있는 기본 인벤토리 시스템을 만들고 있습니다.ArrayDeque에 Object가 포함되어 있습니까?

Couch couch1 = new Couch("I wouldn't sit on it.", 100, true); 
roomList[0].inventory.add(couch1); 

나는이 같은 방에 항목이 있는지 확인하고 있습니다.

if (input.matches(".*look.*")) 
{ 
    if(input.matches(".*Couch.*")) 
    { 
     if(roomList[currentRoom].inventory.contains(???)) 
     { 
      //code to be executed. 
     } 
    } 
} 

무엇을 넣을 까 ??? 인벤토리 ArrayDeque에 객체 couch1이 포함되어 있는지 확인하려면? 이것이 가능하지 않다면, 이것을 할 수있는 더 좋은 방법이 있습니까?

+0

왜 거기에'couch1'을 넣지 않으시겠습니까? –

+0

컬렉션에 특정 객체가 있는지 확인하고 싶지만 런타임에 해당 객체가 무엇인지 전혀 알지 못합니까? –

답변

0

함수는 equals()의 구현을 기반으로합니다. 기본적으로 정확히 동일한 객체 (예 : couch1)를 제공해야합니다. 당신이 오버라이드한다면, 예를 들어 모든 필드를 비교하여 자신 만의 equals 버전을 만들 수 있습니다. 이를위한 유용한 도구는 Apache EqualsBuilder이며 equals() 기능을 구현하는 방법에 대해서도 설명합니다.

그런데 단점은 동일한 필드를 사용하여 소파 객체를 구성해야한다는 것입니다. 그렇게 할 수없는 경우 맵과 같은 다른 데이터 유형을 사용할 수 있습니다. 그런 다음 소파의 일부 필드를 기반으로 고유 한 ID로 저장할 수 있습니다.

마지막 대안은 함수를 사용하지 않고 대신 Deque 및 다른 선택 기준에 따라 필터를 반복하는 함수를 작성하는 것입니다.

관련 문제