2017-01-13 9 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. Также почему вы вызываете therobot.quit() в конце цикла while? не следует ли это вызывать, когда вы находитесь вне цикла while? просто гадание на основе имени –

+0

isObstacle возвращает true, если либо левый, либо правый датчик препятствия обнаруживает препятствие. То же самое для isTapped, если что-то прикасается к нему, оно должно перестать двигаться. Кроме того, они являются логическими. – George

+0

Что делает therobot.quit() и stopWheels()? –

ответ

0

Имея

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

первой итерации, пока цикл занимает всю продолжительность времени 10 секунд из-за Thread.sleep(10000).

Сумма сна должна быть значительно меньше общей продолжительности.

+0

Верно, я переместил их за пределы цикла. проблема все еще там. – George

+0

В этом случае отредактируйте вопрос соответствующим образом. –

+0

ЭТО БЫЛО! Он работает сейчас. Я просто достал Thread.sleep (x) навсегда. Он делает то, что я хотел, чтобы это делалось сейчас. Спасибо, бутон! – George

 Смежные вопросы

  • Нет связанных вопросов^_^