Итак, я студент информатики и начинающий программист на Java. Кто-то попросил меня помочь им с заданием, в котором им нужно было создать довольно простую программу тральщика. Эта программа вообще не использует помечающие мины, но, кроме того, она функционально такая же, как любая другая игра по подметанию мин.
Я запускаю исключение NullPointerException при попытке запустить программу. Я исследовал, что это может означать, и теперь знаю, что это действительно должно быть NoObjectException или DereferenceException, но я все еще не приблизился к решению проблемы.
Это исключение возникает, когда вызывается метод makeField класса Tile. Кроме того, я действительно пытаюсь сосредоточиться на правильном наследовании, статическом и нестатическом, публичном и частном, и как все они взаимосвязаны, поэтому я извиняюсь, если это полный вопрос о нубах. 1005 *
Итак, у меня есть основной файл, суперкласс Tile и два подкласса класса плиток - Bomb и Flat. Бомба - это фишка с бомбой, а Флетка - это любая фишка, которая не является бомбой.
public class MineSweeperMain{
public static void main(String[] args)
{
Scanner kybd = new Scanner(System.in);
int dimension;
Tile[][] gameBoard;
System.out.print("Enter the dimension of the board you would like to play on:\t");
dimension = kybd.nextInt();
gameBoard = Tile.makeField(dimension);
Tile.printField(gameBoard, dimension);
}
}
//
public class Tile {
static Random rand = new Random();
boolean isBomb;
boolean isRevealed;
int posX, posY;
int noOfAdjacentMines;
public Tile()
{
isRevealed = false;
}
public static int detectMines(Tile[][] board, int dimensions)
{
int detectedMines = 0;
for(int i = 0; i < dimensions; i++)
{
for(int j = 0; j < dimensions; j++)
{
if(board[i][j].isBomb)
detectedMines++;
}
}
return detectedMines;
}
public static Tile[][] makeField(int dimensions)
{
int rowOfMines = dimensions / 3;
int randomInRow;
Tile[][] Board = new Tile[dimensions][dimensions];
for(int i = 0; i < dimensions; i++)
for(int j = 0; j <= rowOfMines; j++)
{
randomInRow = rand.nextInt(dimensions);
Board[i][randomInRow] = new Bomb();
}
for(int i = 0; i < dimensions; i++)
for(int j = 0; j < dimensions; j++)
{
if(!Board[i][j].isBomb)
Board[i][j] = new Flat();
}
return Board;
}
public static void printField(Tile[][] board, int dimensions)
{
for(int i = 0; i <= dimensions; i++)
{
for (int j = 0; j <= dimensions; j++)
{
if(i ==0)
System.out.print(i + " ");
else if(j == 0)
System.out.print(j + " ");
else
{
if(board[i-1][j-1].isRevealed && !board[i-1][j-1].isBomb)
System.out.print(board[i-1][j-1].noOfAdjacentMines + " ");
else
System.out.print("# ");
}
}
}
}
}
//
public class Flat extends Tile{
public Flat()
{
noOfAdjacentMines = 0;
isBomb = false;
isRevealed = false;
}
}
//
public class Bomb extends Tile{
public Bomb()
{
isBomb = true;
isRevealed = false;
}
}
//