Тема: Проблема з циклом
Є завдання в якому потрібно створити булевий масив, який потрібно заповнити з певною ймовірностю. Якщо true, то потрібно вивести * це буде бомба, якщо false то . це буде безпечна клітинка. А далі потрібно вивести масив в якому замість клітинки буде цифра з кількістю сусідніх бомб. Написав функцію, яка це обраховує, проте сам цикл після виклику функції припиняє роботу. Буду вдячний, якщо підскажете чому так відбувається.
package minesweeper;
import java.util.Random;
public class Minesweeper {
private int rows;
private int columns;
private boolean[][] mineSweeperArrBoolean;
private String[][] mineSweeperArrString;
private double probabilityOfBombsSpawn;
private static Random random;
public Minesweeper(int rows, int columns, double probabilityOfBombsSpawn) {
this.rows = rows;
this.columns = columns;
this.probabilityOfBombsSpawn = probabilityOfBombsSpawn * 100;
this.mineSweeperArrBoolean = new boolean[rows][columns];
this.mineSweeperArrString = new String[rows][columns];
random = new Random();
}
public void startGame() {
createMineSweeperArrBoolean();
printMineSweeperArrBoolean();
System.out.println("\n\n");
printMineSweeperArrString();
}
// якщо probabilityOfBombsSpawn = 61, тоді
// integers від 1-61 це будуть бомби
private void createMineSweeperArrBoolean() {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
if (random.nextInt(100) + 1 <= probabilityOfBombsSpawn) {
mineSweeperArrBoolean[i][j] = true;
} else {
mineSweeperArrBoolean[i][j] = false;
}
}
}
}
private void printMineSweeperArrBoolean() {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
if (mineSweeperArrBoolean[i][j]) {
System.out.print("* ");
} else {
System.out.print(". ");
}
}
System.out.println();
}
}
// метод який мав би друкувати масив
// з кількістю сусідніх бомб замість .
private void printMineSweeperArrString() {
calculateMineSweeperArrString();
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
System.out.print(mineSweeperArrString[i][j] + " ");
}
System.out.println();
}
}
// в цьому методі відбувається заповнення масиву
//
private void calculateMineSweeperArrString() {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
if (!mineSweeperArrBoolean[i][j]) {
mineSweeperArrString[i][j] = countOfBombs(i, j);
} else {
mineSweeperArrString[i][j] = "*";
}
}
}
}
// цей метод повинен обраховувати кількість сусідніх бомб
private String countOfBombs(int row, int col) {
int count = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
if (!mineSweeperArrBoolean[row][col]) {
if (row != 0 && mineSweeperArrBoolean[row - 1][col]) {
count++;
}
if (row != rows-- && mineSweeperArrBoolean[row + 1][col]) {
count++;
}
if (col != 0 && mineSweeperArrBoolean[row][col - 1]) {
count++;
}
if (col != columns-- && mineSweeperArrBoolean[row][col + 1]) {
count++;
}
}
}
}
return Integer.toString(count);
}
}