入力
入力は、任意の数のフィールドで構成されます。各フィールドの最初の行には、それぞれフィールドの行数と列数を表す 2 つの整数 n と m (0 < n,m <= 100) が含まれます。次の n 行には正確に m 文字が含まれており、フィールドを表しています。各セーフ スクエアは「.」で表されます。文字 (引用符なし) であり、各鉱山の正方形は "*" 文字 (これも引用符なし) で表されます。n = m = 0 の最初のフィールド行は、入力の終わりを表し、処理されるべきではありません。
出力
フィールドごとに、次のメッセージを 1 行だけ出力する必要があります。
フィールド #x: x はフィールドの番号 (1 から始まる) を表します。次の n 行には、「.」を含むフィールドが含まれている必要があります。文字は、そのマスに隣接する地雷の数に置き換えられます。フィールド出力間に空行が必要です。
サンプル入力
4 4
*...
....
.*..
....
3 5
**...
.....
.*...
0 0
サンプル出力
Field #1:
*100
2210
1*10
1110
Field #2:
**100
33200
1*100
指定された入力に対して正しい出力が得られます。
import java.util.*;
public class Main{
public static void main(String[] args) {
//field size
int n, m;
//string to hold a row of a minesweeper board
String line;
//array to hold all the minesweeper boards entered
ArrayList<char[][]> allBoards = new ArrayList<char[][]>();
Scanner scan = new Scanner(System.in);
//get the field size
n = scan.nextInt();
m = scan.nextInt();
//keep going until n=0 and m=0
while ((n+m)!=0) {
//create the minesweeper board
//the field sizes are 2 spaces bigger to prevent error checking
//at the edges of the minesweeper board
char[][] board = new char[n + 2][m + 2];
//fill the appropriate spaces with the mines '*' and blank spaces '.'
for (int row = 1; row < board.length - 1; row++) {
line = scan.next();
for (int col = 1; col < board[0].length - 1; col++) {
board[row][col] = line.charAt(col - 1);
}
}
//add the current minesweeper board to the array
allBoards.add(board);
//get new field size
n = scan.nextInt();
m = scan.nextInt();
}
printResults(allBoards);
}
//function to find out how many mines are around a certain position
//check all positions surrounding the current one.
public static int getMines(char[][] board, int row, int col) {
int nMines = 0;
if (board[row - 1][col - 1] == '*') {
nMines++;
}
if (board[row - 1][col] == '*') {
nMines++;
}
if (board[row - 1][col + 1] == '*') {
nMines++;
}
if (board[row][col - 1] == '*') {
nMines++;
}
if (board[row][col + 1] == '*') {
nMines++;
}
if (board[row + 1][col - 1] == '*') {
nMines++;
}
if (board[row + 1][col] == '*') {
nMines++;
}
if (board[row + 1][col + 1] == '*') {
nMines++;
}
return nMines;
}
//print the results
private static void printResults(ArrayList<char[][]> allBoards) {
for (int i = 1; i <= allBoards.size(); i++) {
System.out.println("Field #" + i + ":");
for (int row = 1; row < allBoards.get(i - 1).length - 1; row++) {
for (int col = 1; col < allBoards.get(i - 1)[0].length - 1; col++) {
if (allBoards.get(i - 1)[row][col] != '*') {
System.out.print(getMines(allBoards.get(i - 1), row, col));
} else {
System.out.print("*");
}
}
System.out.println();
}
System.out.println();
}
}
}