首先是這樣子的,我們作業時是一個打地鼠的小程序,模擬地鼠出現的樣子。
我是先設定一個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);
}
}