2016-08-19 11 views
1

は、私は、具体的タイプの、私のプロジェクトでは、いくつかのwhile文を持っている:"while"ステートメントはRinSimの実行にどのように影響しますか?

while(!rm.getPosition(this).equals(destination.get())) { 
    rm.moveTo(this, destination.get(), time); 
} 

はまた、私はエージェントがメッセージを待つ作るためにいくつかのwhile年代を持っています。

私の質問ですが、これらのwhileは私のエージェントの動作にのみ影響を与えますか、それとも、私のエージェントの残りの部分の実行が遅れるのでしょうか?私は、プログラム全体が完了するまで待つでしょうか?

私はあなたのコード内のコードスニペットは、無限ループになる可能性がありますバージョン4.1.1

答えて

1

を使用しています。私はこのように、あなたのコードはtick(..)方法のどこかに存在すると仮定しています:

@Override 
public void tick(TimeLapse timeLapse) { 
    while(!rm.getPosition(this).equals(destination.get())) { 
    rm.moveTo(this, destination.get(), timeLapse); 
    } 
} 

このメソッドに入ると、TimeLapseオブジェクトが消費されていない時間が含まれます。最初にRoadModel#moveTo(..)が呼び出されると、RoadModeltimeLapseで利用可能なすべての移動時間を使用してオブジェクトthisを指定された目的地に近づけるように試みます。二つの可能性:目的地までの距離が(物体の速度に応じて)利用可能な時間内にそれを移動するのに十分に小さい場合に

  1. 、宛先が到達され、プログラムループを終了します。 moveTo(..)メソッドは、必要な時間だけ消費し、不要な時間はtimeLapseオブジェクトで消費されません。

  2. また、timeLapseで利用可能な時間内に目的地が移動できない場合、timeLapseは空になり、車両は目的地に到着しません(ただし接近します)。これにより、ループは終了しません。moveTo(..)へのその後の呼び出しは、RoadModelによって無視されるため、timeLapseは空です。

はい、このコードを使用すると、プログラム全体に影響し、無限ループにつながる可能性があります。正しい方法はwhileifに置き換えることです。その後、宛先に達するとelse句を追加してオークションを実行できます。

+1

ありがとうございますRinde!はい、私はちょっと難しい方法でそれを理解しています。 – user3524879

関連する問題