2009-03-07 7 views
5

Si tengo una matriz int estructurado así:¿Cómo comprobar si un elemento de la matriz existe en Java

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 existe un elemento/índice dado/se ha establecido?

+1

Este título de pregunta podría editarse para ser más claro – Casebash

+0

Cambie el título.aguas de tym ..... –

Respuesta

11

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

Si la matriz había sido una gran variedad de objetos, entonces la matriz se sostendría null para cualquier elemento no asignado específicamente.

1

Sus elementos de la matriz son sólo lo suficientemente grande como para contener int s, en este caso. No hay lugar para almacenar la información acerca de si el elemento "existe". Ha sido asignado, así existe. En Java, las matrices recién asignadas int se inicializarán en cero todos los elementos.

3

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

No hay forma de saber si se ha configurado algún elemento, salvo que se mantenga una matriz booleana separada.

+0

Si fuera una matriz de un objeto clase/enum personalizado, ¿devolvería nulo? si ese elemento/índice no estaba configurado? –

+0

@Click Voto ascendente: Sí. –

0

Puede utilizar checkstyle, pmd y findbugs de su fuente (findbugs en el binario) y ellos le dirán cosas como esta.

Desafortunadamente, no parece que detectan este problema en particular (lo que tiene sentido es que la matriz garantiza que cada miembro esté configurado en 0, nulo o falso).

El uso de esas herramientas puede atrapar miembros de instancia y clase (que no son matrices) que se están utilizando antes de que se les dé un valor (tipo similar de problema).

0

Un poco un tema muerto, pero lo encontré por accidente, así que voy a poner mi sabiduría (o lo que sea: P). Puede usar Arrays.Fill para completar su matriz cuando se crea con un valor no válido como -1. Luego puede hacer fácilmente un si x < 0 para verificar si USTED ha inicializado esa posición específica del arreglo o no. Solo una idea ...

Cuestiones relacionadas