2014-12-04 43 views
1

我正在做一個小程序,在庫列表中放置貨架。如果之前已輸入貨架數量,則不能再次輸入。但是,它不起作用。檢查一個值是否已經在列表中不起作用

這是我在主類代碼:

Shelf s = new Shelf(1); 
    Shelf s2 = new Shelf(1); 
    Library l = new Library(); 
    l.Addshelf(s); 
    l.Addshelf(s2); 

正如你可以看到我在這兩個對象作爲層架號進入1所以下面這段代碼應該再從庫類運行

public void Addshelf(Shelf s) 
{ 
    List li = new ArrayList(); 
    if(li.contains(s)) 
    { 
     System.out.println("already exists"); 
    } else { 
     li.add(s); 
    } 
} 

問題必須出現在上述方法中。我想知道如何檢查該貨架號是否已經存在於列表中,在這種情況下,它應該使用上述語句提示我 - 「已存在。」

+0

您已經採取'列表L =新的ArrayList();'是方法的局部變量'Addshelf(擱板的)'所以每次調用此方法一個新的列表將被創建。它不服務你的目的。你需要根據你的需要讓List成爲一個實例變量或類變量。 – gprathour 2014-12-04 12:02:19

+0

非常感謝我所做的一切,因此我將這個List移出了這個方法。感謝你的幫助 ! – user3679986 2014-12-04 12:16:24

回答

2

您必須在Shelf中覆蓋equals方法,以便得到你想要的行爲。

沒有覆蓋equalsArrayList::contains,這就要求ArrayList::indexOf,將使用默認實現Object::equals,其中比較對象的引用。

@Override 
public boolean equals (Object anObject) 
{ 
    if (this == anObject) 
     return true; 
    if (anObject instanceof Shelf) { 
     Shelf anotherShelf = (Shelf) anObject; 
     return this.getShelfNumber() == anotherShelf.getShelfNumber(); // assuming this 
                     // is a primitive 
                     // (if not, use equals) 
    } 
    return false; 
} 
+0

這裏是關於如何做到這一點的文章:http://www.geeksforgeeks.org/overriding-equals-method-in-java/ – steenbergh 2014-12-04 11:57:03

+0

我在架子上做了equals方法現在應該以任何方式更改上面的Addshelf方法嗎? – user3679986 2014-12-04 12:00:01

+0

我所做的是創建hashcode和equals方法,但不知怎的,它仍然沒有檢測到我輸入了兩次相同的貨架號。(Object obj){ if(obj == null){ return false; } if(getClass()!= obj.getClass()){ return false; } 最後貨架其他=(貨架)obj; (this.shelfnum!= other.shelfnum){ return false; } return true; } – user3679986 2014-12-04 12:11:07

0

如果你看一下Java的doc在contains方法列表中,您將看到它使用equals()方法來評估兩個對象是否相同。因此,您必須覆蓋Shelf課程中的方法equals

例子:

public class Shelf 
{ 
    public int a; 

    public Shelf (int x) 
    { 
     this.a= x; 
    } 

    @Override 
    public boolean equals(Object object) 
    { 
     boolean isEqual= false; 

     if (object != null && object instanceof Shelf) 
     { 
      isEqual = (this.a == ((Shelf) object).a); 
     } 

     return isEqual; 
    } 
} 
0

請確保您有Shelfoverrideequals()方法。

Javadoc。 如何工作?

如果此列表包含指定的元素,則返回true。更多 正式返回true,當且僅當此列表包含至少一個 元素e使得(o == null?e == null:o.equals(e))。 ^^

相關問題