2009-03-07 8 views
5

Se ho un allineamento int strutturata in questo modo:Come verificare se un elemento di matrice esiste in Java

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

e cerco di recuperare

map[100][200] 

E questo elemento non è inizializzato , otterrò un errore di compilatore/runtime o restituirà nulla? E c'è qualche funzione per verificare se un determinato elemento/indice esiste/è stato impostato?

+1

Questo titolo della domanda potrebbe essere modificato per essere più chiaro – Casebash

+0

Si prega di cambiare il title.wastage di tym ..... –

risposta

11

Poiché la dichiarazione dell'array è di tipo primitivo, non si otterranno errori di compilazione o di esecuzione: verrà restituito il valore predefinito di 0.

Se la matrice era stata una matrice di Oggetti, la matrice manterrebbe null per qualsiasi elemento non assegnato in modo specifico.

1

No.

I suoi elementi di matrice sono solo abbastanza grande per contenere int s, in questo caso. Non c'è posto per memorizzare le informazioni su se l'elemento "esiste". È stato assegnato, quindi esiste. In Java, gli array int appena assegnati verranno inizializzati su tutti gli elementi zero.

3

Non restituisco null perché int è un tipo primitivo. Restituirà il valore predefinito int, che è 0.

Non c'è modo di sapere se qualche elemento è stato impostato, a meno di mantenere un array booleano separato.

+0

Se fosse un array di una classe personalizzata/oggetto enum, restituirebbe null se quell'elemento/indice non fosse stato impostato? –

+0

@Click Upvote: Sì. –

2

In Java, solo le variabili di riferimento sono inizializzate su null. I primitivi sono garantiti per restituire appropriate default values. Per interi, questo valore è 0.

0

È possibile utilizzare checkstyle, pmd e findbugs della sorgente (findbugs sul binario) e vi diranno cose come questa.

Sfortunatamente non sembra che catturino questo particolare problema (il che ha senso che l'array sia garantito che ogni membro sia impostato su 0, null o falso).

L'uso di tali strumenti può catturare i membri di istanze e di classe (che non sono matrici) che vengono utilizzati prima di ricevere un valore (tipo di problema simile).

0

Bit di un argomento morto ma l'ho trovato per caso quindi inserirò il mio pezzo di saggezza (o qualsiasi altra cosa: P). È possibile utilizzare Array.Fill per riempire l'array quando viene creato con un valore non valido come -1. Quindi puoi facilmente fare un se x < 0 per verificare se hai inizializzato quella specifica posizione dell'array oppure no. Solo un'idea ...