2015-06-04 108 views
1

我不是Java-Newbie,但我無法解決最近發生的問題。通過ID引用對象? (Java)

我必須模擬Java中的道路系統。爲了適當的面向對象,我有一個班車和一個班級街道(和其他幾個人來管理整個模擬課程^^)。我已經設法模擬一條路上的堵塞,並且沒有問題。

好的,問題來了:我想將我的模擬從一個孤獨的街道延伸到一個道路系統。所以我想到了一個類似「RoadSystem」的課程,它可能有一系列街道和某種連接(我想到了「節點」),讓汽車知道他們到達街道盡頭時可以駕駛的位置駕駛。

問題是我不知道如何實現這些結。汽車必須能夠問街道:「嗨,兄弟,我在你的盡頭,我現在可以在哪裏開車?」並且街道應該知道哪個結有一個參考,並且要求它連接到這個特定結的街道上。我該如何做這個參考? 我想到了一個身份證,但是如果街道必須搜索每個結的街道ID才能在那裏找到自己的ID,那麼對於較大的道路系統,這可能會變得非常緩慢。或者我錯過了我的問題的明顯解決方案?

每個幫助高度讚賞!來自德國

問候,

Ruffy

+0

最終的答案取決於你想要放入模擬的細節。是否必須考慮車道方向並在交叉口(等)上穿越車輛? 或者是一個從道路到道路「切換」的抽象事物? – dognose

+1

街道(和它們的交點)可以模擬爲GRAPH http://introcs.cs.princeton.edu/java/45graph/ – Hector

+0

看這個SO回答http://stackoverflow.com/questions/51574/good-java -graph-algorithm-library – Hector

回答

0

你應該看看的LinkedList的源碼,也許適應這一原則。一條路有2個連接點,而一個路口可能是2到4個?

Abstract class RoadElement{ 
    //abstract for simulation purpose, maybe randomized 
    //calculation of next direction, etc. 
} 

class Road extends RoadElement{ 
    private RoadElement previous = null; 
    private RoadElement next = null; 
} 

class Intersection extends RoadElement{ 
    private RoadElement northernConnection = null; 
    private RoadElement easternConnection = null; 
    private RoadElement southernConnection = null; 
    private RoadElement westernConnection = null; 
} 

最後,您可以設計您的道路網絡並將道路要素鏈接爲需要的。在模擬過程中,您不必關心具體的instaces,因爲它們將被邏輯連接起來。

List<RoadElement> RoadMap = new LinkedList<RoadElement>(); 
    Road r1 = new Road(); 
    Intersection i1 = new Intersection(); 
    r1.setPrevious(i1); 
    i1.setNorthernConnection(r1); 
    .... 

然後,在:

實施例(你可以稍後用額外RoadElements,如「曲線」具有有限速度,人交點與停止時間等改善此)模擬,你可以做類似的事情:

Car currentCar = getCurrentCar(); 
RoadElement re = currentCar.getLocation(); 
if (re instanceof Road){ 
    //can we drive "forward and backward?" 
    if ((Road)re).getPrevious() != null){ 

    } 

    if ((Road)re).getNext() != null){ 

    } 
}else if (re instanceof Intersection){ 
    //check available outgoing roads 
    if ((Intersection)re).getNorthernConnection() != null){ 

    } 
    ... 
} 
+0

感謝您的回答。幫助過我! :) –

+0

@RuffyxNami歡迎您。 – dognose

+0

如何實現Car.getLocation方法?我不需要代碼,只是想法.. –