首先是这样子的,我们作业时是一个打地鼠的小程序,模拟地鼠出现的样子。
我是先设定一个4x4的数组Array4,数组默认值全部设定为0.
然后设定两个随机变量row和col,范围都在0-3之间
然后把Arrayrow的值从设定为1,以表示地鼠出现的位置。
那接下来就是我想要问的地方;
如何把出现过的位置舍弃,就是希望接下来随机的row和col不要再重复出现同样的数字?
下面是代码片段
int i = new Random().nextInt(4);
int j = new Random().nextInt(4);
GameArray[i][j] = 1; //Susliks appears
。
。
。
for (int index = 0; index < 4; index++){
for (int index2 = 0; index2 < 4; index2++){
if ( GameArray[index][index2] == 1){
System.out.print("o ");
}else{
System.out.print("x ");
}
}
times++;
System.out.println();
}
因为要求是所有的位置都出现过1就结束程序。而我这样子每次循环都要上百次才能结束,所以我想问有没有什么办法可以控制循环次数在一定的范围内?比方说就是已经出现过的数组索引值就不再使用(比如说GameArray3 = 1,那么接下来希望的随机不要再出现3这样子,如果出现了就跳出index的 for循环体,重新下一次随机)有没有什么办法可以实现?
你的问题有两个:1、出现的位置不允许再出现
2、当所有的位置都为1的时候,程序完成(地鼠已经去过所有的地洞,而且没有重复)。
如果你的问题是这样的话,答案如下:
整个的思路:有一个地鼠类,地鼠类里面有一个创造位置的方法(跑的位置),方法是这样实现的:
地鼠跑到一个位置的时候,将其位置赋给burrows数组且将值赋1,如果随机产生的位置是重复的话,那么就要检查burrows数组里的值是否都
为1(地鼠跑过)。当然在检查的过程中,有地鼠没有跑过的(值为0),那么就要把值赋给rowIndex和colIndex,这是整个说明。
注意事项:里面安全性还需自己验证
import java.util.Random;
public class Suslik {
/**
* 随机跑到位置
* @param row 跑的范围的横坐标
* @param col 跑的范围的纵坐标
*/
public void createPosition(int row,int col){
int [][] burrows = new int[row][col];
Random creatNum = new Random();
//横坐标
int rowIndex;
//纵坐标
int colIndex;
boolean index = false;
while(!index){
rowIndex = creatNum.nextInt(row);
colIndex = creatNum.nextInt(col);
int sum = 0;
if(burrows[rowIndex][colIndex] != 0){
for(int m = 0;m<row;m++){
for(int n = 0;n<col;n++){
if(burrows[m][n] == 0){
sum = ++sum;
rowIndex = m;
colIndex = n;
break;
}
index = true;
}
if(sum !=0){
index = false;
break;
}
}
}
burrows[rowIndex][colIndex] = 1;
System.out.println("row:"+rowIndex+" ,col:"+colIndex);
}
}
public static void main(String [] args){
new Suslik().createPosition(4, 4);
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。