2015-03-10 2 views
0
public Action getMove(CritterInfo info) { 
     count++; 
     Direction d = info.getDirection(); 
     if (count < 100) { 
     if (info.getFront() == Neighbor.OTHER) { 
      return Action.INFECT; 
     } else { 
      return Action.RIGHT; 
     } 
     } 
     if (count >= 100) { 
     if (info.getFront() == Neighbor.OTHER) { 
      return Action.INFECT; 
     } else if (count/100.0 < 2.0 && count/100.0 >= 1.0 && !(d == Direction.EAST)) { 
      return Action.LEFT; 
     } else if (count/100.0 < 3.0 && count/100.0 >= 2.0 && !(d == Direction.WEST)) { 
      return Action.RIGHT; 
     } else { 
      return Action.HOP; 
     } 
     } 
     return Action.INFECT; 
    } 

Прямо сейчас у меня есть этот код, который является частью моего критерия, и у меня проблемы с частью кода if (count >= 100). Я не могу уйти на восток и перейти на западный код, чтобы повторить его, потому что, когда я делю счет на 100.0, он работает только до 299, тогда он просто остается на запад, направляясь в стену. Я попытался установить инструкцию else if после моего кода на запад, указавКак сделать мой код повторяющимся?

} else if (count == 299) { 
     count = 0; 
} 

, но это также не решило мою проблему. Есть идеи? Я просто хочу, чтобы мой тварь снова и снова размахивал на восток и на запад.

+2

Тривиальный (и, вероятно, бесполезный) ответ будет «вы можете повторить цикл« while ». Тем не менее, ваше фактическое намерение неясно, нам нужен больше контекста, чтобы дать реальный полезный ответ. – amit

+0

Тривиальный или нет, похоже, вам нужен цикл «do-while». – Sipty

+0

Странно, что вы используете тип с плавающей точкой для счетчика – talex

ответ

0

Просто используйте переменные вместо своих номеров и изменяйте их каждый раз, когда их числа достигают. Затем вы можете создать метод, который изменяет направление каждый раз, когда число достигает 100+ (100 * n). Итак, если вы достигнете 200, он проверит, что условие, указанное выше, истинно и поэтому изменит направление для следующих 100 номеров. Это то, что вы искали, или я неправильно понял, что вы хотели?

0

Вы можете использовать некоторую функцию «циклического», как по модулю (%) вместо абсолютного значения count. Например.

public Action getMove(CritterInfo info) { 
    count++; 
    Direction d = info.getDirection(); 

    if (count < 100) { 
     if (info.getFront() == Neighbor.OTHER) { 
      return Action.INFECT; 
     } else { 
      return Action.RIGHT; 
     } 
    } 
    else { 
     int choiceOfAction = (count - 100)%200; 
     if (0 <= choiceOfDir && choiceOfDir < 100 && !(d == Direction.EAST)) { 
      return Action.LEFT; 
     } else if (100 <= choiceOfDir && choiceOfDir < 200 && !(d == Direction.WEST)) { 
      return Action.RIGHT; 
     } else { 
      return Action.HOP; 
     } 
    } 
} 

Линия int choiceOfAction = (count - 100)%200; даст значение с:

  • , если count находится в [100, 200 [: находится в [0, 100 [
  • , если count находится в [ 200, 300 [: находится в [100, 200 [
  • , если count находится в [300, 400 [: находится в [0, 100 [
  • и т.д.

Обратите внимание, что я удалил в вашем методе последний return который никогда не был достигнут, а также, что в случае выше вы будете HOP только тогда, когда вы достигнете предела и направление изменения.