Sei sulla pagina 1di 12

Arrays y Cadenas en Java

Al igual que otros lenguajes de programación, Java permite juntar y manejar


múltiples valores a través de un objeto array (matriz). También se pueden
manejar datos compuestos de múltiples caracteres utilizando el objeto String
(cadena).

Arrays

Esta sección te enseñará todo lo que necesitas para crear y utilizar arrays en
tus programas Java.

Como otras variables, antes de poder utilizar un array primero se debe declarar.
De nuevo, al igual que otras variables, la declaración de un array tiene dos
componentes primarios: el tipo del array y su nombre. Un tipo de array incluye
el tipo de dato de los elementos que va contener el array. Por ejemplo, el tipo
de dato para un array que sólo va a contener elementos enteros es un array de
enteros. No puede existir un array de tipo de datos genérico en el que el tipo de
sus elementos esté indefinido cuando se declara el array. Aquí tienes la
declaración de un array de enteros.

int[] arrayDeEnteros;

La parte int[] de la declaración indica que arrayDeEnteros es un array de


enteros. La declaración no asigna ninguna memoria para contener los
elementos del array.

Si se intenta asignar un valor o acceder a cualquier elemento de


arrayDeEnteros antes de haber asignado la memoria para él, el compilador
dará un error como este y no compilará el programa.

testing.java:64: Variable arraydeenteros may not have been initialized.

Para asignar memoria a los elementos de un array, primero se debe


ejemplarizar el array. Se puede hacer esto utilizando el operador new de Java.
(Realmente, los pasos que se deben seguir para crear un array son similares a
los se deben seguir para crear un objeto de una clase: declaración,
ejemplarización e inicialización.

La siguiente sentencia asigna la suficiente memoria para que arrayDeEnteros


pueda contener diez enteros.

int[] arraydeenteros = new int[10]

En general, cuando se crea un array, se utiliza el operador new, más el tipo de


dato de los elementos del array, más el número de elementos deseados
encerrado entre corchetes cuadrados ('[' y ']').

TipodeElemento[] NombredeArray = new TipodeElementos[tamanoArray]


Ahora que se ha asignado memoria para un array ya se pueden asignar valores
a los elementos y recuperar esos valores.

for (int j = 0; j < arrayDeEnteros.length; j ++) {


arrayDeEnteros[j] = j;
System.out.println("[j] = " + arrayDeEnteros[j]);
}

Como se puede ver en el ejemplo anterior, para referirse a un elemento del


array, se añade corchetes cuadrados al nombre del array. Entre los corchetes
cuadrados se indica (bien con una variable o con una expresión) el índice del
elemento al que se quiere acceder. Observa que en Java, el índice del array
empieza en 0 y termina en la longitud del array menos uno.

Hay otro elemento interesante en el pequeño ejemplo anterior. El bucle for itera
sobre cada elemento de arrayDeEnteros asignándole valores e imprimiendo
esos valores. Observa el uso de arrayDeEnteros.length para obtener el
tamaño real del array. length es una propiedad proporcionada para todos los
arrays de Java.

Los arrays pueden contener cualquier tipo de dato legal en Java incluyendo los
tipos de referencia como son los objetos u otros array. Por ejemplo, el siguiente
ejemplo declara un array que puede contener diez objetos String.

String[] arrayDeStrings = new String[10];

Los elementos en este array son del tipo referencia, esto es, cada elemento
contiene una referencia a un objeto String. En este punto, se ha asignado
suficiente memoria para contener las referencias a los Strings, pero no se ha
asignado memoria para los propios strings. Si se intenta acceder a uno de los
elementos de arraydeStrings obtendrá una excepción 'NullPointerException'
porque el array está vacio y no contiene ni cadenas ni objetos String. Se debe
asignar memoria de forma separada para los objetos String.

for (int i = 0; i < arraydeStrings.length; i ++) {


arraydeStrings[i] = new String("Hello " + i);
}
EJEMPLO 1: arreglos
EJEMPLO 2: Asignación de una array a otro

Strings

Una secuencia de datos del tipo carácter se llama un string (cadena) y en el


entorno Java está implementada por la clase String (un miembro del paquete
java.lang).

String[] args;

Este código declara explícitamente un array, llamado args, que contiene


objetos del tipo String. Los corchetes vacíos indican que la longitud del array no
se conoce en el momento de la compilación, porque el array se pasa en el
momento de la ejecución.
El segundo uso de String es el uso de cadenas literales (una cadena de
caracteres entre comillas " y ").

"Hola mundo!"

El compilador asigna implícitamente espacio para un objeto String cuando


encuentra una cadena literal.

Los objetos String son inmutables - es decir, no se pueden modificar una vez
que han sido creados.

El paquete java.lang proporciona una clase diferente, StringBuffer, que se


podrá utilizar para crear y manipular caracteres al vuelo.

Concatenación de Cadenas

Definiciones

Antes de empezar vamos a definir algunos términos, que aunque no sean


definidos de una forma muy formal, permitirán una mejor comprensión del
texto:

 Cadena: Una instancia de la clase String. El objeto puede estar


asignado a una variable, una constante o no (cadenas anónimas)

 Cadenas Anónimas: Cadenas no asociadas a ningún objeto que se


crean y utilizan en la sentencia que se declaran, y luego son
descartadas. Por ejemplo en:

1. System.out.println("Hola Mundo");

la cadena “Hola Mundo” se crea y utiliza en el System.out.println y luego se


descarta.

Caso 1: Concatenación de cadenas anónimas

Aunque muchas veces parezca incorrecta o ineficiente la realización de


concatenación de dos cadenas anónimas en vez de solo utilizar una, resulta
ser lo mismo luego de pasar por el compilador, ya que si tenemos por ejemplo:

Se convertirá en:
Viendo la maquina virtual lo mismo que si hubiéramos asignado “Hola Mundo”
de primera intención.

Cuál puede ser el beneficio entonces de separar una cadena anónima en dos o
más pedazos?

El beneficio que encontramos no es al momento de correr nuestro programa,


sino al momento de mantenerlo, ya que en varias ocasiones permitirá una
mejor lectura del mismo:

1. String fragmento = "Por lo tanto, los que no son totalmente conscientes


de"
2. + " la desventaja de servirse de las armas no pueden ser totalmente con
scientes"
3. + " de las ventajas de utilizarlas";

Caso 2: Concatenación de constantes

Si tenemos definidas constantes y las concatenamos con alguna cadena


anónima o entre si, primero que nada el compilador realizará el intercambio de
las constantes por la cadena que representan y luego las trata como el caso
anterior. Por ejemplo:

Después de compilar tendremos:

Por lo que podemos ver que no importa el modificador de acceso o si es


estática o no, mientras el valor de la constante este disponible a la hora de
compilar, será reemplazado en la concatenación.

En este caso podemos ver que la ventaja que trae aparejado el uso de
constantes, que es permitirnos hacer mas legible nuestro código no va en
contraposición a la de la tener una buena eficiencia en la ejecución, ya que no
se perderá tiempo realizando concatenaciones porque fueron realizadas al
momento de la compilación.

Caso 3: Concatenación de variables finales

Al igual que en el caso anterior si tenemos definida un variable declarada


dentro de un método como final y esta la concatenamos, el compilador la
reemplazara la referencia por el valor que representa la variable final.

Por ejemplo:

Después de compilar obtendremos:

Otra vez tenemos las mismas ventajas del punto anterior.

Caso 4: Concatenación de variables

La concatenación de variables es distinta de los casos anteriores debido a que


en ningún caso el compilador puede suponer el valor almacenado en las
mismas. Como no sabe con que valores se contará, lo que se realiza a la hora
de compilar es armar un StringBuilder e irle agregando las cadenas que
queremos visualizar.

Esta vez la sentencia quedará preparada y la concatenación real se realizara


durante el momento de ejecución.

Por ejemplo:
Como se puede observar, no se puede asegurar de ninguna manera que el
valor de “v” va a seguir siendo “Mundo” al momento de concatenar, por lo que
el compilador genera:

Básicamente al ejecutarse realizará lo siguiente:

- creará una instancia de StringBuilder


- le agregará la cadena “Hola “
- le agregará el valor de la variable “v”
- obtendrá la cadena resultante
- asignará la cadena resultante a la variable “resultado”

Nuevamente lo que ganamos es expresión a la hora de analizar nuestro


código. Veamos un ejemplo ilustrativo de esto, es más difícil entender a simple
vista esto:

A esto:

Caso 5: Caso especial de concatenación de variables

Existe un caso especial a la hora de realizar optimizaciones que el compilador


no es capaz de darse cuenta, cuando a una variable debemos concatenarle
cadenas en varias sentencias

Ejemplo
En este caso el código generado será el siguiente:

Por lo tanto cada nueva iteración del bucle lleva aparejado la creación de un
StringBuilder para agregarles las cadenas y asignárselo a la variable “e”

Lo que se puede realizar es crear un StringBuilder e irlo asignando en cada


iteración, de la forma:

Entonces la ejecución se resume a:

- creará una instancia de StringBuilder con el texto inicial (“Hola”)


- le agregará la cadena “ mundo“ una vez por cada bucle
- obtendrá la cadena resultante
- asignará la cadena resultante a la variable “e”

Como pudimos ver en un post anterior la principal ventaja es la gran cantidad


de tiempo ganado durante la ejecución.

EJEMPLO 1: Clase Punto


TALLER DE JAVA N° 2

Introducción:

Vamos a aplicar lo visto hasta el momento en java. Por favor escriban y


resuelvan los siguientes ejercicios y entregarlos tanto en formato .java
como .class, no olvidar copiar las respuestas también en este archivo.
Tratar de entender las nuevas clases y tratar de explicar que novedades
hay en el código

Ejercicio N° 1: Suma de dos números

R//

Ejercicio N° 2: Ejercicio para resolver

Tomando en cuenta el ejercicio anterior haga una clase en java que me


multiplique dos números, otra que me divida, otra que me muestre el
modulo y una ultima que me reste. Tener en cuenta de que se debe
introducir el numero por pantalla y la salida debe ser por pantalla.

R//
Ejercicio N° 3: Promedio de Calificación

Ejercicio N° 4: Ejercicio para resolver

Haga una clase en java queme calcule el promedio de 10 notas, debe pedirme
el nombre y el apellido del alumno así como cada una de las notas.

R//

Ejercicio N° 5: Calculo del Cuadrado de un Número

Ejercicio N° 6: Ejercicio para resolver


Calcule el área y el perímetro de un círculo, sabiendo que el área = pi*r*r en
donde pi = 3.1416 y el radio hay que pedírselo al usuario, para el
perímetro = 2*pi*r

R//

Ejercicio N° 7: Calculo de los años de una Persona

Ejercicio N° 8: Ejercicio para resolver

Se debe revisar los ejercicios que se han hecho en el documento operadores y


expresiones.doc que se hizo la clase pasada. Se deben cambiar las
constantes por variables para que el usuario digite por teclado y la
respuesta también se debe mostrar por un panel.

R//

Potrebbero piacerti anche