2017-01-13 5 views
0

私はこのロボットを障害物に達するまでランダムな方向に進ませようとしています。次に、その障害物(障害物= 1,2,3など)を記録し、方向を切り替える必要があります。これはタイマーが切れるまで続くはずです。ロボットの障害物の記録/回避

public static void main(String args[]) throws Exception{ 

    Robot therobot = new Robot(); 

    int x = 10000; 
    int obstacles = 0; 
    Random rand = new Random(); 
    int r1 = rand.nextInt(255) + 1; 
    int r2 = rand.nextInt(255) + 1; 

    therobot.setWheelVelocities(100,100); 
    long before = System.currentTimeMillis(); 

    while (System.currentTimeMillis() - before < x){ 
     Thread.sleep(x); 
     if(therobot.isObstacle() ==true || therobot.isTapped() == true) 
     { 
      r1 = rand.nextInt(255) - 255; 
      r2 = rand.nextInt(255) - 255; 
      obstacles = obstacles++; 

      therobot.setWheelVelocities(r1, r2); 
     } 
    } 
    System.out.println(obstacles); 

    therobot.stopWheels(); 
    therobot.quit(); 
} 

しかし、これはうまくいかないようです。タイマーが満了するまで動きますが、何も停止または記録しません。

私には何が欠けていますか?

+0

私は、テストの際に各繰り返しに10秒を使用しないことをお勧めします... isObstacleとisTappedの動作がわからないと、私たちはあなたを助けません。 whileループの最後になぜtherobot.quit()を呼び出すのですか?あなたがwhileループから外れているときに呼び出されるべきではありませんか? –

+0

という名前に基づいて推測するだけで、左右の障害物センサーが障害物を検出すると、isObstacleはtrueを返します。 isTappedの場合と同じことです。何かが触れた場合、移動を止めるべきです。また、彼らは真実です。 – George

+0

robot.quit()とstopWheels()は何ですか? –

答えて

0

int x = 10000; 
long before = System.currentTimeMillis(); 
while (System.currentTimeMillis() - before < x){ 
    Thread.sleep(x); 
    // Processing 
} 

ループが原因Thread.sleep(10000)の10秒の全体の持続時間がかかりながらの最初の反復を有します。

睡眠量は総持続時間よりもはるかに短くなければなりません。

+0

本当に、私はそれらをループ外に移動しました。問題はまだそこにある。 – George

+0

この場合、質問を編集してください。 –

+0

それはそれでした!それは今働く。私はちょうど良いためにThread.sleep(x)を取り出した。それは今私がしたかったことをしています。ありがとう芽! – George

関連する問題