Pregunta

Estoy desarrollando una aplicación para Android.

Quiero tamaño del conjunto a una matriz de caracteres como esto:

public char[5] language;

Pero no funciona. Tengo que borrar el número cinco para hacer que funcione.
Quiero limitar a cinco caracteres a la variable del lenguaje. ¿Cómo puedo hacer eso?

Gracias.

¿Fue útil?

Solución

No se puede hacer así. En Java, el tipo de una matriz no incluye su tamaño. Véase mi respuesta a esta pregunta anterior . (No haga caso de la parte sobre métodos abstract en esa pregunta ... no es el verdadero problema.)

El tamaño de una matriz se determina por la expresión que lo crea; p.ej. la siguiente crea una matriz de caracteres que contiene 5 caracteres, y más tarde lo reemplaza con otra matriz que contiene 21 caracteres.

public char[] language = new char[5];
...
language = new char[21];

Tenga en cuenta que la creación se realiza mediante la expresión en el lado derecho de los iguales. La longitud de una matriz es parte de su 'valor', no su 'tipo'.

Otros consejos

Para citar el JLS:

longitud de una matriz no es parte de su tipo.

Para inicializar una matriz que debe hacer:

public char[] language = new char[5];

Otras soluciones son

public char[] language = {0, 0, 0, 0, 0};

o

public char[] language;
language = new char[5];

En Java, la declaración de matriz puede no contener el tamaño de la matriz; sólo conocemos la variable contendrá una matriz de un tipo específico. Para tener un array inicializado (y con un tamaño) que tiene que inicializarlo ya sea utilizando new o mediante el uso de un atajo que permite inicializar y valores de ajuste para una matriz al mismo tiempo.

La mejor manera de tener para comprobar si una matriz tiene un tamaño especificado, en realidad está comprobando el tamaño de la matriz con algo como if(array.length == 5).


Recursos:

Sobre el mismo tema:

La variable sí es de tipo char-array (char[]), por lo que no se puede limitar el tamaño de la variable type . Lo que puede limitar es el tamaño de la matriz se ejemplariza y guardar en esa variable:

char[] language = new char[4];
public char[] language = new char[5];

No se puede limitar la propia variable de longitud 5; lo que necesita para hacer cumplir esa invariante en su lógica. Lo que significa que tampoco debe ser público:

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

Tal vez usted quiere probar el estilo genérico mediante el uso de ArrayList como la representación de matriz. Así que es posible encontrar la flexibilidad usando métodos 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;
}
scroll top