如何让我的代码重复?

时间:2015-03-10 09:28:49

标签: java if-statement

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 个答案:

答案 0 :(得分:0)

只需使用变量而不是数字,并在每次到达数字时更改它们。然后,您可以创建一个方法,每次数量达到100+(100 * n)时更改方向。 因此,如果你达到200,它将检查我设置的条件是否为真,因此将改变接下来的100个数字的方向。 这是你在寻找什么,还是我误解了你想要的东西?

答案 1 :(得分:0)

您可以使用某种“循环”功能,例如 modulo %),而不是count的绝对值。 E.g。

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;将产生choiceOfAction的值:

  • 如果count在[100,200 [:choiceOfAction中,则为[0,100 [
  • ]
  • 如果count在[200,300 [:choiceOfAction在[100,200 [
  • ]中
  • 如果count在[300,400 [:choiceOfAction在[0,100 [
  • ]中

请注意,我删除了您的方法中从未到过的最后一个return,并且在上述情况下,只有当您达到限制并更改方向时才会HOP