题目
代码
package task3_ZH3;
import java.util.Scanner;
public class Minefields {
public static void main(String[] args) {
// TODO Auto-generated method stub
//输入部分
Scanner in = new Scanner(System.in);
System.out.println("请输入雷场的边场[5,20]之间:");
int n = in.nextInt();
System.out.println("请输入要布置的地雷数量(覆盖率不超过50%):");
int m = in.nextInt();
//判断合法性
while(n < 5 || n > 20 || m < 0 || m > n*n/2) {
System.out.println("您输入的数据不符合要求。");
System.out.println("请输入雷场的边场[5,20]之间:");
n = in.nextInt();
System.out.println("请输入要布置的地雷数量(覆盖率不超过50%):");
m = in.nextInt();
}
in.close();
// 主体部分
char[][] mineFields = new char[n][n];
int[] mines = new int[m];
mines[0] = (int)(Math.random() * n * n);
for (int i = 1; i < m; i++) {
int temp = (int)(Math.random() * n * n);
boolean isExist = false;
for (int j = 0; j < i; j++) {
if (temp == mines[j]) {
isExist = true;
break;
}
}
if (isExist) {
i--;
} else {
mines[i] = temp;
}
}
for (int i = 0; i < m; i++) {
int row = mines[i] / n;
int col = mines[i] % n;
mineFields[row][col] = '*';
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (mineFields[i][j] != '*') {
int count = 0;
for (int tempI = i - 1; tempI <= i + 1; tempI++) {
for (int tempJ = j - 1; tempJ <= j + 1; tempJ++) {
if (tempI >= 0 && tempI < n && tempJ >= 0 && tempJ < n &&
mineFields[tempI][tempJ] == '*')
count++;
}
}
mineFields[i][j] = (char)(48 + count);
}
}
}
// 打印部分
System.out.println("生成的雷场如下:");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.print(String.valueOf(mineFields[i][j])+" ");
}
System.out.println();
}
}
}