que - array java ejemplo
excepción de puntero nulo al inicializar una matriz de objetos 2D (2)
Intento hacer un juego de fichas en 2D y al hacer las matrices que contienen las fichas obtengo una NullPointerException, aquí hay algo del código. Perdón si esto está mal formateado, primer temporizador
clase pública Mundo {
//holds data for where to place images and rectangles
int[][] worldDat = new int[25][25];
//hold rectangles for checking interaction with player
Rectangle[][] blocks = new Rectangle[25][25];
//holds block''s images to be painted
Image[][] blockImage = new Image[25][25];
//holds position to be pained on screen
int[][] location = new int[25][25];
//enumeration holding block''s images and other things of the sort
EWorldBlocks eBlocks;
//sets all of the arrays listed above
public void setupAll(){
for(int i = 0; i < 24; i++){
for(int e = 0; e < 24; e++){
blocks[i][e].setBounds(e * 20, i * 20, 20, 20);
blocks[i][e].setLocation(e*20, i*20);
if(worldDat[i][e] == 6){
blockImage[i][e] = getRandomGrass();
}else if(worldDat[i][e] == 0){
blockImage[i][e] = null;
}else{
blockImage[i][e] = eBlocks.intToImage(worldDat[i][e]);
}
}
}
}
//used to get a random block
private Image getRandomGrass()
{
Random rand = new Random();
int r = rand.nextInt(2);
r++;
return eBlocks.intToImage(r);
}
public World(int[][] worldDat) {
this.worldDat = worldDat;
}
}
Entonces eso se llama en esta clase (creo que es parte del problema)
public class worldDraw {
//ALSO if there is a better way to do this, do tell
levels levels = new levels();
static levels sLevels = new levels();
World level1;
static World sLevel1 = new World(sLevels.getLevel1());
//called in paint method for panel
public void draw(Graphics2D g2){
sLevel1.setupAll();
for(int i = 0; i < 24; i++){
for(int e = 0; i < 24; i++){
g2.drawImage(level1.blockImage[i][e], e*25, i*25, null);
}
}
}
//holds levels
public worldDraw() {
level1 = new World(levels.getLevel1());
}
}
Cuando crea una matriz de objetos, está creando una matriz de referencias, pero no está asignando las referencias. Debe hacer esto primero antes de intentar usarlos. Piense que es similar a crear un cartón de huevos. No puede usar huevos hasta que llene por primera vez la caja con huevos. Así que, por ejemplo, su matriz de bloques, primero debe asignar objetos Rectangle a cada elemento de la matriz antes de poder invocar métodos sobre ellos. Esto generalmente se hace en un bucle for. p.ej,
for(int i = 0; i < 24; i++){
for(int e = 0; e < 24; e++){
blocks[i][e] = new Rectangle(....); //...
blocks[i][e].setBounds(e * 20, i * 20, 20, 20);
blocks[i][e].setLocation(e*20, i*20);
Necesitas saber que Java no es como C.
Cuando haces esto:
Rectangle[][] blocks = new Rectangle[25][25];
Todas las referencias en la matriz 2D de bloques son nulas hasta que llame a new y le dé una referencia.
Entonces tendrás que hacer esto:
for(int i = 0; i < 24; i++){
for(int e = 0; e < 24; e++){
blocks[i][e] = new Rectangle(); // I don''t know what arguments it takes.
blocks[i][e].setBounds(e * 20, i * 20, 20, 20);
blocks[i][e].setLocation(e*20, i*20);