问题描述
- 关于java数组的问题,想来这边问一下
-
首先是这样子的,我们作业时是一个打地鼠的小程序,模拟地鼠出现的样子。
我是先设定一个4x4的数组Array[4][4],数组默认值全部设定为0.
然后设定两个随机变量row和col,范围都在0-3之间
然后把Array[row][col]的值从设定为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就结束程序。而我这样子每次循环都要上百次才能结束,所以我想问有没有什么办法可以控制循环次数在一定的范围内?比方说就是已经出现过的数组索引值就不再使用(比如说GameArray[3][3] = 1,那么接下来希望的随机不要再出现[3][3]这样子,如果出现了就跳出index的 for循环体,重新下一次随机)有没有什么办法可以实现?我刚接触java的,好多都还不清楚
解决方案
你的问题有两个:1、出现的位置不允许再出现
2、当所有的位置都为1的时候,程序完成(地鼠已经去过所有的地洞,而且没有重复)。
如果你的问题是这样的话,答案如下:
整个的思路:有一个地鼠类,地鼠类里面有一个创造位置的方法(跑的位置),方法是这样实现的:
地鼠跑到一个位置的时候,将其位置赋给burrows数组且将值赋1,如果随机产生的位置是重复的话,那么就要检查burrows数组里的值是否都
为1(地鼠跑过)。当然在检查的过程中,有地鼠没有跑过的(值为0),那么就要把值赋给rowIndex和colIndex,这是整个说明。
注意事项:里面安全性还需自己验证
package action;
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);
}
}
解决方案二:
java有关数组的问题
JAVA问题之泛型数组
解决方案三:
可以在声明一个同样的数组,记录对应位置是否出现过
解决方案四:
首先,你随机数的用法不对,要这样:
Random r=new Random();
以后每次这样,不要每次生成新的
r.nextInt();
然后,当发现随机数已经被占用,最简单的方法就是以此位置向后找一个未被占用的即可,
weizhi nextweizhi(int x,int y)
提供本次随机位置x,y,方法寻找x,y或之后第一个未被占用的位置,返回
解决方案五:
ArrayList list = new ArrayList();
int n = 10;
Random rand = new Random();
boolean[] bool = new boolean[n];
int num = 0;
for (int i = 0; i < n; i++) {
do {
num = rand.nextInt(n);
} while (bool[num]);
bool[num] = true;
list.add(num);
}