我是一名学生,从事滑槽和梯子游戏。我正在使用方法来确定应该在游戏板上放置多少个滑槽和梯子。我在主要使用参数中为每个参数指定了10,但是我总是在6到11之间放置任何地方。
这两种方法之间是否存在干扰?
或者我为随机放置设置for循环的方式有问题吗?
我是本网站的新用户,如果您需要更多说明,请告诉我,我不想将整个程序放在这里。感谢。
//main
ChutesAndLadders cl = new ChutesAndLadders();
cl.setBoard(new String[100]);
cl.makeChutes(10);
cl.makeLadders(10);
//methods
public String [] board;
private int chutes, ladders;
public int position;
public Random rand = new Random();
//set board
public void setBoard(String [] n){
board = n;
for(int i = 0; i < board.length; i++)
board[i] = " ";
}
//set and place chutes
public void makeChutes(int n){
chutes = n;
for(int i = 0; i <= chutes; i++)
board[rand.nextInt(board.length)] = "C" + chutes;
}
//set and place ladders
public void makeLadders(int n){
ladders = n;
int lcell = 0;
for(int i = 0; i <= ladders; i++)
board[rand.nextInt(board.length)] = "L" + ladders;
答案 0 :(得分:6)
首先,您写道:
for(int i = 0; i <= chutes; i++)
board[rand.nextInt(board.length)] = "C" + chutes;
循环中的赋值语句将运行chutes + 1次。 (在您的情况下十一次。)[使用i < chutes
代替。]这在您的梯子代码中是相同的。这解释了为什么在代码运行完毕后最多可能有11个滑槽或梯子。
其次,您不必小心防止同一空间多次分配滑槽或梯子。 rand.nextInt(board.length)
不保证每次运行时都会生成唯一值(否则它实际上不是随机的。)这就解释了为什么在代码运行完成后你可能看不到多达11个滑槽和梯子。
为了更清楚,在那里放一个常数值:
for(int i = 0; i < chutes; i++)
board[11] = "C" + chutes;
并注意到你最终得到一个滑槽(在11号空间) - 除非梯形图代码用梯子覆盖它。
希望有所帮助。
祝你好运!答案 1 :(得分:2)
生成随机位置然后在放置之前检查是否存在某些东西应该相当简单。如果发现碰撞,只需生成另一个随机并重复,直到您可以放置它。
另外,顺便说一句,避免for循环和if语句没有花括号总是一个好习惯。很容易在块中添加第二个,并想知道它为什么不作为块的一部分执行。
答案 2 :(得分:1)
您的for循环具有包含上限检查,0 .. 10
产生11个条目。
public void setupBoard(String [] n, int nrLadders, int nrChutes){
board = n;
int index = 0;
while (index < board.length && 0 < nrLadders--) {
board[index++] = "L" + nrLadders;
}
while (index < board.length && 0 < nrChutes--) {
board[index++] = "C" + nrChutes;
}
while (index < board.length) {
board[index++] = " ";
}
board = Collections.shuffle(Arrays.asList(board)).toArray(new String[board.length]);
}
这就像创建一副卡片,其中包含许多梯形卡片,一些滑槽卡片,大量空白卡片以及随机播放游戏板的卡片。