1

私はコンピュータ サイエンスの初心者で、ランダムに生成された車のオブジェクトが都市マップ グリッド上でランダムに生成された駐車場に移動するアニメーションを作成するプロジェクトを完了するように依頼されました。ボタン、テキスト フィールド、およびテキスト領域の GUI を開発しました。アニメーションの最後ですべての車が駐車場に到着したときを除いて、すべてが必要に応じて機能し、JTextArea に分析を表示する必要があります。私のボタンは適切に設定されています。以下にコードの場所を示します。

    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 ループに何かを与えない場合はそのまま続行します。永遠にクラッシュします。私は途方に暮れています、どんな助けもいただければ幸いです。ありがとう。

4

2 に答える 2

1

while詳細に入るまでもなく、あなたのループには重大な問題があります。

ほら、 return がある限りループしsimulator.simulationFinished()ますfalse。ただし、ループ内では、反対のことを確認します。これは決して起こりません。

何らかのリスナーを使用することをお勧めしますが、これ以上アドバイスできるほど要件が明確ではありません。

于 2013-05-10T11:59:26.927 に答える