2014-02-28 44 views
0

我正在嘗試將Shoe類型的對象添加到Shoe類型的固定數組中,但是我遇到了問題。將參考對象添加到固定數組

在addShoe方法中,我試圖將shoe類型的引用添加到sh數組中,如下所示:sh.add(s);

當我特里結構

運行它,我得到這個錯誤:

不能調用的陣列型鞋加(鞋)[] Eclipse的建議我將其更改爲「長度」,並沒有做SENS

我還想到我可以寫addShoes方法的其他部分是這樣的:


    public void addShoe(Shoe s) throws ShoeException 
    { 
     if(s.getId() < 0) { 
      throw new ShoeException(s); 
     } 
       else { 
         if(numShoes<=10){ 
          sh = Arrays.add(s, numShoes); 
          numShoes++; 
         } 
       } 
     } 

這只是一個想法。這是做正確的方法嗎?


    public class TestShoe {

public static void main(String[] args) { 

    ShoeProcessor s = new Shoe(); 
    Shoe s1 = new Shoe(7, "Black"); 
    Shoe s2 = new Shoe(10, "Red"); 

    try { 
     s.addShoe(s1); 
        s.addShoe(s2); 

    }catch(ShoeException bex){ 
     System.out.println("Shoe Exception: " + bex); 
    } 

}}

public class ShoeProcessor 
{ 
private Shoe [] sh; 
private int numShoes=0; 
private ShoeComparator<Shoe> sc; 

public ShoeProcessor() 
{ 
    sh = new Shoe [10]; 
    sc=new ShoeComparator<Shoe>(); 
} 


public void addShoe(Shoe s) throws ShoeException 
{ 
    if(s.getId() < 0) { 
     throw new ShoeException(s); 
    } 
    else { 
     sh.add(s); 
     numShoes++; 
    } 
} 
} 

謝謝您的幫助

我想補充我需要使用固定大小的數組鞋。我還想補充說我不想擴展數組sh。我可以添加鞋類的最多10個參考。這就是爲什麼我也計算添加鞋子的數量。

+1

你不能那樣做。相反,使用'ArrayList '。 – SLaks

+0

+1 @SLaks。數組是固定大小的:如果你想動態擴展它們,你必須創建一個大小爲+ 1的新數組,或者使用數組列表/向量等。 – robermann

回答

1

大概我錯過了一些東西:你想用sh[numShoes]= s;替換sh.add(s);嗎?

+0

這正是我的問題。我很難將Shoe類型的引用對象添加到Shoe類型的數組中。這就是爲什麼我寫了兩個不同的選項和我嘗試過的一切。這很簡單,我忘了它。謝謝。 – user1282256

1

Java中的數組具有固定的大小。您有兩種選擇:

  • 切換到使用List。當您添加更多項目時,這可以動態增長。要實施,您可以使用ArrayListLinkedList

  • 嘗試使用System.arraycopy在您每次需要添加數組時調整陣列的大小。我不推薦這個。在內部,這實際上是ArrayList所做的事情,但如果您願意,可以自由地手動完成。

編輯:剛剛看到您的編輯。你可以這樣做:

public void addToList(Shoe shoe) { 
    if(shoeList.size() < 10) { 
     shoeList.add(shoe); 
    } 
} 

shoeArrayCount = 0; 
public void addToArray(Shoe shoe) { 
    if(shoeArrayCount < 10) { 
     shoeArray[shoeArrayCount] = shoe; 
     shoeArrayCount++; 
    } 
} 

取決於你選擇實施哪種方法。