Pregunta

Si tengo una matriz int estructurada así:

private int[][] map = new int[400][400];

Y trato de recuperar

map[100][200]

Y ese elemento no está inicializado, ¿obtendré un error de compilación / tiempo de ejecución o devolverá nulo? ¿Y hay alguna función para verificar si un elemento / índice dado existe / se ha establecido?

¿Fue útil?

Solución

Como su declaración de matriz es de un tipo primitivo, no obtendrá ningún error de compilación o tiempo de ejecución; se devolverá el valor predeterminado de 0.

Si su matriz hubiera sido una matriz de Objetos, entonces la matriz contendría null para cualquier elemento no asignado específicamente.

Otros consejos

No devolveré null porque int es un tipo primitivo. Devolverá el valor predeterminado 0, que es <=>.

No hay forma de saber si se ha establecido algún elemento, salvo mantener una matriz booleana separada.

En Java, solo las variables de referencia se inicializan como nulas. Las primitivas están garantizadas para devolver valores predeterminados apropiados . Para ints, este valor es 0.

No.

Los elementos de su matriz son lo suficientemente grandes como para contener int s, en este caso. No hay lugar para almacenar la información sobre si el elemento & Quot; existe & Quot ;. Se ha asignado, por lo tanto, existe. En Java, las nuevas matrices <=> asignadas se inicializarán a todos los elementos cero.

Puede usar checkstyle , pmd , y findbugs en su fuente (findbugs en el binario) y te dirán cosas como esta.

Desafortunadamente no parece que capten este problema en particular (lo cual tiene sentido que se garantice que la matriz tenga cada miembro establecido en 0, nulo o falso).

El uso de esas herramientas puede capturar miembros de instancias y clases (que no son matrices) que se están utilizando antes de recibir un valor (tipo de problema similar).

Es un tema muerto, pero lo encontré por accidente, así que voy a colocar mi sabiduría (o lo que sea: P). Puede usar Arrays.Fill para llenar su matriz cuando se crea con un valor no válido como -1. Entonces puede hacer fácilmente un if x & Lt; 0 para verificar si USTED ha inicializado esa posición de matriz específica o no. Solo una idea ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top