Primero lo primero, me disculpo si el título es engañoso. Me gustaría implementar mi propia versión de Buscaminas en Java. Cuando creé una matriz de objetos y probé una de mis funciones, obtuve una NullPointerException. Desbordamiento de pila de navegación Logré resolver mi problema. Sin embargo, resulta que la matriz primero debe ser instanciada y luego inicializada. Entonces, lo que pregunto es lo siguiente: ¿Puedo crear una instancia de una matriz de objetos e inicializarla al mismo tiempo?
MineSweeperMain.java
public class MineSweeperMain {
public static void main(String[] args) {
MineSweeper ms = new MineSweeper(9,9);
int test;
for (int i=0;i<9;i++)
for (int j=0;j<9;j++)
{
ms.tile[i][j]=new Tile(); // can I initialize the array in the same line that I am instantiating it using the default constructor?
}
test = ms.tile[0][0].getNeighbours();
System.out.println("Test: " + test);
}
}
Tile.java
public class Tile {
int numNeighbours;
boolean hasBomb;
Tile() {
numNeighbours = 0;
hasBomb = false;
}
int getNeighbours() {
return numNeighbours;
}
boolean hasBomb() {
return hasBomb;
}
}
Minesweeper.java
public class MineSweeper {
Tile tile[][];
MineSweeper(int x,int y) {
tile = new Tile[x][y];
}
}
Gracias.
EDITAR: Usar tile[9][9]();
tampoco funciona.
3 respuestas
Tal vez esto es lo que estás tratando de hacer ...
public static void main(String[] args) {
MineSweeper ms = new MineSweeper(9,9);
int test;
// remove code here
test = ms.tile[0][0].getNeighbours();
System.out.println("Test: " + test);
}
public class MineSweeper {
Tile tile[][];
MineSweeper(int x,int y) {
tile = new Tile[x][y];
// create Tiles here
for (int i=0;i<x;i++)
for (int j=0;j<y;j++)
tile[i][j]=new Tile();
}
}
Primero, no hay nada de malo con 2 bucles for
anidados para llenar elementos de su matriz bidimensional.
Sin embargo, es posible usar flujos Java para generar nuevos mosaicos en una matriz 2D.
Comience con el código para Stream
para generar una matriz 1D de Tile
s.
Tile[] oneDArray = Stream.generate(Tile::new).limit(9).toArray(Tile[]::new);
Luego puede usar esa expresión para decirle a un Stream
externo cómo generar matrices unidimensionales como parte de la matriz bidimensional general.
Tile[][] tile = Stream.<Tile[]>generate(
() -> Stream.generate(Tile::new).limit(x).toArray(Tile[]::new)
).limit(y).toArray(Tile[][]::new);
Para fines de inferencia de tipo, tuve que proporcionar el argumento de tipo Tile[]
explícitamente.
Lo he escrito como líneas múltiples, pero es todo una declaración. De cualquier forma que elija, los bucles for
anidados o esta solución de transmisión, el código también se puede mover a su constructor Minesweeper
para que esté oculto del código main
.
Use una ArrayList. Dentro de tu clase de buscaminas debería vivir una lista de mosaicos. Haga que el constructor de Buscaminas invoque un método que llene la matriz de listas con mosaicos. Dele a cada mosaico una coordenada X e Y. Luego, para obtener vecinos, simplemente recorra la lista de mosaicos y tyle.getX y tyle.getY para determinar si se encuentra ... o si es una bomba ... o si ya se volcó.
Azulejos ArrayList = nueva ArrayList ();
Para.....
Mosaico de mosaico = nuevo mosaico (X, Y)
Tiles.add (azulejo)
Preguntas relacionadas
Nuevas preguntas
java
Java es un lenguaje de programación de alto nivel. Utilice esta etiqueta cuando tenga problemas para usar o comprender el idioma en sí. Esta etiqueta rara vez se usa sola y se usa con mayor frecuencia junto con [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] y [maven].