2013-05-10 49 views
1

我是一名初級計算機科學專業的學生,​​我們被要求完成一個項目,該項目將動畫隨機生成的汽車物體移動到城市地圖網格上隨機生成的停車位。我爲按鈕,文本字段和文本區域開發了一個GUI。除了在動畫結束時,所有汽車都已經到達停車位時,一切都按照要求運行,我需要在我的JTextArea中顯示分析。我的按鈕設置正確,我會告訴你在哪裏代碼採取了下文地方:ParkingSimulation無限循環危機

else if (e.getSource() == start) { 

    setAnimate(true); 

    if(simulator.simulationFinished()) { 
     createAnalytics(); 
    } 

    } 

所以我在這裏已經實現按鈕「開始」開頭的動畫動作偵聽器。目前它:

  1. 目前它開始動畫和所有的汽車按預期行駛到停車位。
  2. 它顯示從動畫開始之前派生的分析(分析包括:車牌ID,移動次數,嘗試的平均點數,平均行駛距離)
  3. 然後動畫結束。
  4. 如果我再次按下開始按鈕,它將顯示適當的分析。

我知道,爲了讓程序顯示正確的分析程序完成我最有可能需要一個while循環的那一刻,但我一直沒能夢想什麼都漲,不會創建一個無限循環並要求我通過控制檯手動終止程序。

while(!simulator.simulationFinished()) { 
    if(simulator.simulationFinished() == true)break; { 
    createAnalytics(); 
    } 
    } 

我也嘗試過在存在的所有循環的數百個其他變體當中。從我的邏輯開始,我需要while循環,以便它會繼續檢查模擬是否完成,以便我可以執行生成分析的方法,但是如果不給while循環執行某些操作,它會繼續永遠和崩潰。我很茫然,任何幫助將不勝感激。謝謝。

回答

1

第一:不,你不需要一個while循環。您可以使用observer pattern(例如),並且在模擬完成後立即通知您的對象。至於你的問題:內部的if顯然是多餘的(正如== true)。真正的問題似乎是simulator.simulationFinished()從不返回true。你能發佈該函數的代碼和代碼(以及任何直接影響其返回值的代碼)嗎?

1

沒有進入細節,你的while循環有一個嚴重的問題。

看到它,只要simulator.simulationFinished()返回false就循環。 但是,在循環中,你檢查相反的 - 這將永遠不會發生。

我會推薦使用某種類型的監聽器,雖然這個要求還不夠清楚,我不能進一步提出建議。