que ejemplo array java arrays object nullpointerexception rectangles

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);