如何制作一个柜台?

时间:2014-01-18 00:40:10

标签: java oop counter

我有一个OOP项目,我必须在网格中编写小动物的动作。

这就是我现在所拥有的。

public class Frog implements Critter {
    //below is what letter represents the Frog in the grid.  Works fine.
    public char getChar() {
        return 'F';
    }

public int getMove(CritterInfo info) {
    //need to count the moves to determine how far to move
    int countF;
    countF++;
    int moveF2 = 0;
    if (countF % 3 == 1) {
        int moveF = (int)(Math.random() * 100);
        moveF2 = moveF;
        countF = 0;
    } 
    else {
        if (moveF2 < 25) {
            return NORTH;
        }
        else if (moveF2 < 50) {
            return SOUTH;
        } 
        else if (moveF2 < 75) {
            return EAST;
        }
        else {
            return WEST;
        }
    }
}

青蛙应该选择一个随机方向,向那个方向移动3,重复。

我不知道如何制作一个计数器以计算移动量。我想过:

public int getMove(CritterInfo info) {
    int countF = 0;
    countF++;
    int moveF2 = 0;
    if (countF % 3 == 1) {
        int moveF = (int)(Math.random() * 100);
        moveF2 = moveF;
        countF = 0;
    }
    else {
        ...(cut)
    }
 }

但是上面显然不起作用,因为它每次运行时都会将countF重置为0。

2 个答案:

答案 0 :(得分:1)

如果你将countF移到函数外部(作为成员字段而不是局部变量),它不会成功吗? 你似乎试图强迫countF为0,为什么?

public class Frog implements Critter {
private int countF;

public Frog(){
countF = 0;
}

//below is what letter represents the Frog in the grid.  Works fine.
public char getChar() {
    return 'F';
}

public int getMove(CritterInfo info) {
    countF++;
    int moveF2 = 0;
    if (countF % 3 == 1) {
        int moveF = (int)(Math.random() * 100);
        moveF2 = moveF;
        countF = 0;
    } else {
          ....(cut)
    }
}
}

答案 1 :(得分:1)

您的 countF 变量是一个局部变量,因此每次调用该方法时,它都将初始化为0.您需要将其设为字段变量。如果它是一个字段变量,那么它将属于该对象而不属于该方法。这意味着它只会在创建对象时初始化为0.

int countF = 0;

public int getMove(CritterInfo info) {
    countF++;
    int moveF2 = 0;
    if (countF % 3 == 1) {
        int moveF = (int)(Math.random() * 100);
        moveF2 = moveF;
        countF = 0;
    } else {
    }
}