Imposta dimensioni su array di char in Java
-
08-10-2019 - |
Domanda
Sto sviluppando un'applicazione Android.
Voglio dimensioni insieme a un array di caratteri in questo modo:
public char[5] language;
Ma non funziona. Devo cancellare il numero cinque per farla funzionare.
Io voglio limitare a cinque caratteri per variabile lingua. Come posso fare?
Grazie.
Soluzione
Non si può fare in quel modo. In Java, il tipo di un array non include la sua dimensione. Vedere la mia risposta a questa domanda precedenza . (Ignorare la parte sui metodi abstract
in questa domanda ... non è il vero problema.)
La dimensione di un array è determinato dall'espressione che crea; per esempio. la seguente crea un array di char che contiene 5 caratteri, poi lo sostituisce con un altro array che contiene 21 caratteri.
public char[] language = new char[5];
...
language = new char[21];
Si noti che la creazione è fatto da l'espressione a RHS dei pari. La lunghezza di un array è parte del suo 'valore', non il suo 'tipo'.
Altri suggerimenti
Per citare i JLS:
lunghezza di un array non è parte del suo tipo.
Per inizializzare un array si dovrebbe fare:
public char[] language = new char[5];
Altre soluzioni sono
public char[] language = {0, 0, 0, 0, 0};
o
public char[] language;
language = new char[5];
In Java, la dichiarazione di matrice non può contenere la dimensione della matrice; sappiamo solo la variabile conterrà una matrice di un tipo specifico. Per avere un array inizializzato (e con una dimensione) si deve inizializzare sia utilizzando new
o utilizzando un collegamento che consente di inizializzare e valori impostati per un array allo stesso tempo.
Il modo migliore per avere per verificare se una matrice ha una dimensione specificata, è in realtà il controllo della dimensione della matrice te stesso con qualcosa di simile if(array.length == 5)
.
Risorse:
Sullo stesso argomento:
La variabile in sé è solo di tipo char-array (char[]
), quindi non è possibile limitare la dimensione della variabile tipo . Che cosa si può limitare la dimensione della matrice si crea un'istanza e Salva per quella variabile:
char[] language = new char[4];
public char[] language = new char[5];
Non è possibile limitare la variabile stessa lunghezza 5; è necessario rispettare tale invariante nella logica. Il che significa che, inoltre, non dovrebbe essere pubblica:
private char[] language = new char[5];
...
public void setLanguage(final char[] language)
{
// or maybe language.length != 5, or whatever you really mean
if (language.length > 5)
throw new IllegalArgumentException("language must have length <= 5");
this.language = language;
}
Forse si vuole provare lo stile generico utilizzando ArrayList come la rappresentazione della matrice. Così si può trovare la flessibilità utilizzando metodi ArrayList.
private ArrayList<Character> alchar = new ArrayList<Character>(5);
............................................
public void addChar(Character ch){
if (alchar.size() <= 5)
alchar.add(ch);
}
public ArrayList<Character> getChars(){
return alchar;
}