如本例實踐中;門檻值設定為0.3;
思路都在程式中。實作還是不難。
class Bingo2{
public static void main(String[] args){
int[][] arr = new int[5][];
initializeArray(arr);//初始化5*5的數組1-7*7
int[][] arr0 =new int[5][];//點亮數組
for(int i=0;i<5;i++){
arr0[i] = new int[5];
}//點亮數組全部預設為0
System.out.println("開始列印Bingo值");
print2Array(arr);
System.out.println("開始列印點亮數組");
print2Array(arr0);
int c = playGame(arr,arr0);
System.out.println("你本期完成Bingo使用的次數合計 "+c+"次");
System.out.println("列印完成遊戲後的情況----");
System.out.println("開始列印Bingo值");
print2Array(arr);
System.out.println("開始列印結束Bingo後的點亮數組");
print2Array(arr0);
}
//初始化二維數組5*5;輸入7*7範圍内的數值
public static void initializeArray(int[][] arr2){
for(int i=0;i<5;i++){
arr2[i] = new int[5];
for(int j=0;j<5;j++){
arr2[i][j] = (int) (49*Math.random()+1);
}
}
}
//列印二維數組
public static void print2Array(int[][] arr){
for(int i=0;i
for(int j=0;j
System.out.print(arr[i][j]+"\t");
}
System.out.println();
System.out.println();
}
}
//參與遊戲程式;
public static int playGame(int[][] arr,int[][] arr0){
int i=0;
double oc = 0.3;//設定門檻值
int [] arrc = new int[50];
while(true){
//給與機會參與遊戲
double occ = Math.random();
if(occ>oc){
int t = (int) (49*Math.random()+1);
boolean ol = AAE.xFind(arrc,t);
if(ol){
continue;
}else{
AAE.arrayAddElement(arrc,t);//數組末增加元素
increaseValue(arr,arr0,t);//兩數組的對應處理
i++;
boolean flag = judge(arr0); //滿足條件否
if(flag){
break;
}
}
}else{
int t = (int) (49*Math.random()+1);
AAE.arrayAddElement(arrc,t);
increaseValue(arr,arr0,t);
i++;
boolean flag = judge(arr0);
if(flag){
break;
}
}
}
return i;
}
public static boolean judge(int[][] arr3){
//判斷點亮數組中是否有滿足目标的對象;即周遊12條路
//周遊行
boolean judge = false;
int count=0;
for(int i=0;i
int obj1=0;int obj2=0;int obj3=0;int obj4=0;
obj3 += arr3[i][arr3.length-i-1];
obj4 += arr3[i][i];//obj3和obj4為對角兩條線
for(int j=0;j
obj1 += arr3[i][j];//行
obj2 += arr3[j][i]; //列
}
if(obj1==5){
count++;
}
if(obj2==5){
count++;
}
if(obj3==5){
count++;
}
if(obj4==5){
count++;}
}
if(count>=5){//點亮數組求和;12條線若存在有至少5個sum=5則結束;
judge = true;
}
return judge;
}
//周遊整個二維數組;傳回該元素在二維數組中的所有位置;并在點亮數組中标記++
public static void increaseValue(int[][] arr,int[][] arr0,int x){
int index = 0;
for(int i=0;i
for(int j=0;j
if(arr[i][j]==x){
arr0[i][j]=1;
}
}//int hang = (index/10)%hang;//int lie = index%lie;
}
}
}
class AAE{
public static void arrayAddElement(int[] arr,int x){
//對于一個長度固定且足夠大的數組增加新元素;這裡主要使用集合的功能
//補集運用,這裡會用到
int index = returnIndex(arr);//先通路到非0索引
boolean flag = xFind(arr,x);
if(flag==false){
arr[index+1] = x;//将x元素植入數組末尾
}
}
public static int returnIndex(int[] arr1){
int index = 0;
for(int i =0;i
if(i==0 && arr1[i]==0){
index = -1;
break;}else if(arr1[i]==0){
index = i-1;
break;
}
}
return index;
}
public static void printArray(int[] arr){
for(int i=0;i
System.out.print(arr[i]+"\t");
}
System.out.println();
}
//判斷元素是否在數組中;是傳回true
public static boolean xFind(int[] arr,int x){
boolean flag = false;
for(int i=0;i
if(arr[i]==x){
flag = true;
}
}
return flag;
}
}