2013-11-01 24 views
2

我是新來的java和有問題了解如何手動填充與對象的數組。我不想手動這樣做的原因是因爲我需要創建40個對象,其中20個對象轉到arrayOne,其他20個對象轉到arrayTwo。另外每個對象都有一個獨特的參數,如需要設置的「德州」或「加拿大」。如何用對象手動填充數組?

我通常會創建一個這樣的數組:

long[] arrayOne; 
arrayOne = new long[20]; 

,並且比填充它,讓我們通過一個循環或手動說號碼。但是現在我正在處理對象並且正在努力弄清楚它,我嘗試在StackOverflow中查找答案,但是無法完全理解那裏發生了什麼。

如果有幫助,這是我對象的構造

// Plane Constructor 
    public Plane (int i, String dest, String airl, String airc, double t) { 

      planeID = i; 
      destination = dest; 
      airline = airl; 
      aircraft = airc; 
      time = t; 

    }// END Plane Constructor 

回答

5

我建議使用ArrayList而不是數組,因爲列表可以增長,但數組是固定的大小。然而,要回答你的問題:

Plane[] arrayOne = new Plane[20]; 
Plane[] arrayTwo = new Plane[20]; 

arrayOne[0] = new Plane(1001, "Timbuktu"); 
arrayOne[1] = new Plane(2930, "Siberia"); 
// etc. 

arrayTwo[0] = new Plane(2019, "France"); 
arrayTwo[1] = new Plane(1222, "Italy"); 
// etc. 

如果您使用的ArrayList這將是:

List<Plane> arrayOne = new ArrayList<Plane>(); 
planes.add(new Plane(1001, "Timbuktu")); 
planes.add(new Plane(2930, "Siberia")); 
// etc. 

或者,如果你真的看中了:

List<Plane> planes = new ArrayList<Plane>() {{ 
    add(new Plane(1001, "Timbuktu")); 
    add(new Plane(2930, "Siberia")); 
}}; 

在任何情況下,你可以迭代內容如下:

for (Plane plane : arrayOne) { 
    System.out.println(plane.getDestination()); 
} 
0

ü首先創建平面陣:

Plane[] planes = new Plane[20]; 

然後每個對象:

planes[0] = new Plane(...); 

...

2
Plane[] array = new Plane[10]; 
array[0] = new Plane(/*specify your parameters here*/) 

查看Java語言規範的chapter 10

+0

這是非常難看的解決方案。如果你不知道有多少物體會從某個地方得到/取回,會怎麼樣?動態數組應該更有效率。 – Sajmon

+1

@Sajmom,OP說他們是Java的新手。可能還沒有學習過數據結構。你需要知道如何使用數組。所以讓OP在他們跑步之前走路。此外,OP特別表示,他們有40個對象,每個陣列20個。 –

+1

@Sajmon如果我看到「我如何在Java中使用數組?」這個問題,我將展示Java中的數組示例。我不明白有人告訴新手「不 - 不 - 不,這是錯誤的方式,使用ArrayList,將它分配給List接口,以便稍後可以改變實現,並考慮一些你可以使用的模式在這裏使用「。 OP要求向他解釋我所做的Java基礎知識。如果他需要了解ArrayList,他會提出另一個問題或在其他地方學習。 – aga

1

您必須聲明一組對象(在本例中爲Plane),就像您聲明long - Plane[] arrayOne = new Plane[20];的數組一樣。然後你可以用相同的方式使用索引訪問元素。如果你真的有手動填充它,你應該這樣做:

arrayOne[0] = new Plane(1, "foo", "bar", "baz", 1.0); 
arrayOne[1] = new Plane(2, "fooo", "baar", "baaz", 2.0); 

只有兩種,從Object[]陣列從long[]使用不同的東西 - 陣列的類型和事實,在某些時候你必須使用構造函數來創建對象。不過,您可以使用以前創建的對象。

0

如果您的array的元素不一定是Plane的實例,則可以使用常見的interface

例如:

封裝測試;

public class Main { 
    public static void main(String[] args) { 
     Flyer[] flyers = new Flyer[] { new Plane(), new Bird() }; 
      for (Flyer f: flyers) { 
       // you can only access method "fly" here, because it's the only 
       // method defined in your interface, but nothing 
       // stops you from adding more methods, as long as you implement 
       // them in the (non-abstract) classes 
       f.fly(); 
      } 
    } 
} 

class Plane implements Flyer { 
    // TODO id, destination, airline, etc. getters/setters 
    @Override 
    public void fly() { 
     System.out.println("Weeee I'm flying!"); 
    } 
} 

class Bird implements Flyer { 
    // TODO whatever properties/getters/setters 
    @Override 
    public void fly() { 
     System.out.println("Chirp chirp"); 
    } 
} 

interface Flyer { 
    void fly(); 
} 

輸出:

Weeee I'm flying! 
Chirp chirp 
+0

真的很感謝你進一步學習,但我認爲像這樣的東西不是我的水平,我不想先學習基礎知識,但是一定會考慮後者! – Ilja

+0

@Ilja肯定!我可能誤解了你的問題:) – Mena