2015-11-02 38 views
-1

我的一個方法不適用於我的Set類的Java實現。爲什麼equals總是返回false設置執行等於方法總是返回false

public boolean equals(Set<E> s) { 
    if(this.size() == s.size()){ 
     for(int i = 0; i < size(); i++){ 
      if(theData[i] == s.get(i)){ 
       return true; 
      } 
     } 
    } 
    return false; 
} 

我集Set<Integer>和我比較了一組(1,2,3,4)和(1,2,3,4)一起,它輸出false

編輯:我所有的套都從最小到最大排列。

EDIT2:這裏是我的代碼以平等的主要驅動處理

else if(spaceSplit[0].equals("equal")){ 
      if(spaceSplit.length == 3){ 
       String fSet = spaceSplit[1]; 
       String sSet = spaceSplit[2]; 

       int fSetIndex = 0; 
       int sSetIndex = 0; 

       for(int i = 0; i < sets.size(); i++){ 
        if(((Set<Integer>) sets.get(i)).getName().equals(fSet)){ 
         fSetIndex = i; 
        } 
       } 

       for(int i = 0; i < sets.size(); i++){ 
        if(((Set<Integer>) sets.get(i)).getName().equals(sSet)){ 
         sSetIndex = i; 
        } 
       } 

       System.out.println(sets.get(fSetIndex).equals(sets.get(sSetIndex))); 

      } else { 
       System.out.println("Parameters entered wrong, please try again."); 
      } 

EDIT3:在我的節目我已經搞亂它,它輸出錯誤每次我把一個真正集。如果我只編了2套不存在的,並調用equals方法,它輸出true。我很困惑。

EDIT4:這裏有更多的一套代碼:

import java.util.*; 

public class Set<E extends Comparable> { 

private String name; 
private int size = 0; 
private E[] theData; 
private static final int INITIAL_CAPACITY = 100; 
private int capacity = 0; 

public Set() { 
    capacity = INITIAL_CAPACITY; 
    theData = (E[]) new Integer[capacity]; 
} 

public Set(String name) { 
    this.name = name; 
    capacity = INITIAL_CAPACITY; 
    theData = (E[]) new Integer[capacity]; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

private void reallocate() { 
    capacity = 2 * capacity; 
} 
+0

爲什麼你有'theData [i]'?它不應該是'this.get(i)'? –

+0

@Jonathan'theData [i]'是我存儲我所有集合的值的數組。因此它基本上與做this.get(i)是一樣的嗎? – CSGuy94

+3

多個問題:如果任何元素匹配,您將立即'返回true'。你假設元素的順序是相同的,你沒有指定的是你實現的屬性。你正在使用'=='而不是'equals'。也許最直接相關的,你不覆蓋'Object#equals(Object)';總是使用'@ Override'。 – chrylis

回答

0

你的問題是你是不是覆蓋equals()

的簽名是不是

public boolean equals(Set<E>) 

這是

public boolean equals(Object) 

這就是爲什麼當你添加@Override註釋時你會得到一個編譯器錯誤。您必須使用Object作爲參數,然後檢查instanceof並投射。

0

的比較應該是.equals,而不是==。

+0

謝謝,我做了更正,但它仍然輸出任何錯誤。 – CSGuy94

0

嘗試這樣的:

public boolean equals(Set<E> s) { 
    if(this.size() == s.size()){ 
     for(int i = 0; i < size(); i++){ 
      if(!this.get(i).equals(s.get(i))){ 
       return false; 
      } 
     } 
     return true; 
    } 
    return false; 
} 
+0

我試過用2套'(1,2,3,4)',但它又輸出了錯誤。 – CSGuy94

+0

當我輸入2組即使不存在,它也會返回true。可能是什麼原因造成的? – CSGuy94

+0

你可以粘貼你的設置的init代碼嗎? – bluecliff