【发布时间】:2020-08-31 14:50:13
【问题描述】:
我是java新手。我正在研究一个问题,以根据随机摆动方向将蜗牛填满牧场。但输出不如预期。
package fill;
import java.util.Random;
public class FillTheCorral extends Gate {
public static final int sRANDOM_SEED=1234;
private static final int sMAX_GATES=4;
public static void main (String[] args) {
Random randomNumber=new Random(sRANDOM_SEED);
FillTheCorral mFillTheCorral=new FillTheCorral();
Gate[] corral=new Gate[sMAX_GATES];
for (int i=0; i<corral.length; i++) {
corral[i]=new Gate();
}
do {
mFillTheCorral.setCorralGates(corral , randomNumber);
} while (!mFillTheCorral.anyCorralAvailable(corral));
}
public void setCorralGates(Gate[] gate, Random selectDirection) {
System.out.println("Initial gate setup:");
for(int i=0;i<gate.length;i++){
int randDir = selectDirection.nextInt(3)-1;
gate[i].setSwing(randDir);
System.out.println("Gate " + i + ": "+ randDir);
}
}
public boolean anyCorralAvailable(Gate[] corral) {
for(int i=0;i<corral.length;i++){
if(corral[i].getSwingDirection() == IN)
return true;
}
return false ;
}
}
class Gate {
public static final int OUT=-1;
public static final int IN=1;
public static final int CLOSED=0;
private static int mSwing;
public static
int getSwingDirection () {
return mSwing;
}
public static boolean setSwing (int dir) {
mSwing=dir;
if (mSwing == IN) return true;
if (mSwing == OUT) return true;
if (mSwing == CLOSED) return true;
return false;
}
public int thru (int count) {
if (getSwingDirection() == IN) {
return +count;
} else if (getSwingDirection() == OUT) {
return -count;
} else {
count*=0;
return count;
}
}
}
预期输出: 初始门设置: 门 0:1 1号门:1 2号门:1 3号门:-1
实际输出:
初始门设置: 门 0:1 1号门:1 2号门:1 3号门:-1
初始门设置: 门 0:1 门 1:-1 2号门:0 3号门:0
初始门设置: 门 0:-1 1号门:0 2号门:0 3号门:1
我得到 x3 次门随机方向。
【问题讨论】:
-
检查您在
setCorralGates方法中收到的gate参数的大小。仅出于调试目的打印它。真的是4吗?不?为什么? -
我用 sMAX_GATES 创建了 Gate[] 门对象,大小为 4。
-
..
mFillTheCorral.setCorralGates在你的 do-while 中调用了多少次?为什么不使用调试器?
标签: java loops methods output new-operator