Contenido
Introduccin a la Programacin en Java
Generalidades de Java
Elementos de una aplicacin simple
Consideraciones sobre tipos primitivos numricos
Una aplicacin simple interactiva
Uso de arreglos con tipos primitivos
Franco Guidi Polanco
Escuela de Ingeniera Industrial
Pontificia Universidad Catlica de Valparaso, Chile
fguidi@[Link]
Franco Guidi Polanco
14/08/2007
Qu es JAVA?
Java es:
Seccin 1
Generalidades de Java
un lenguaje de programacin orientado a objetos;
y
una plataforma de ejecucin para programas
escritos en lenguaje Java
Java fue desarrollado por un equipo de
investigadores de SUN Microsystems.
Franco Guidi Polanco
14/08/2007
Desarrollo y ejecucin de aplicaciones en otros
lenguajes
Para qu sirve JAVA?
Java permite:
Compilador
para
Windows
Construir aplicaciones: programas computacionales
que apoyan el trabajo o resuelven problemas
especficos de usuarios (funcionan stand-alone).
Construir applets: programas de menor envergadura
que se ejecutan al momento de cargar una pgina
WEB (son ejecutados por un browser).
Program Hola;
begin
i :=1;
writeln( i )
end.
111000 1
1110001000111111111
00011101111011010
Compilador
para
Linux
0000110101100 00111
00011100010001000
0001110
Cdigo fuente
Ejemplo de applet:
[Link]
Compilador
para
Solaris
11100000101100 00111
00000101000
0001111110111111010
Cdigo objeto
Franco Guidi Polanco
14/08/2007
Desarrollo y ejecucin de aplicaciones en JAVA
14/08/2007
Intrprete Java: Java Virtual Machine (JVM)
Intrprete
Java
Windows
Compilador
Java
Windows
Franco Guidi Polanco
Bytecode
101001010
001001001
111000 1
1110001000111111111
00011101111011010
public class
Hola {
public static
...
i=1;
[Link]..
}
}
111100001
1110000
000011110
0001111
Compilador
Java
Linux
Bytecode
Intrprete
Java
Linux
JVM Windows
101011
1 11
1
0
0000110101100 00111
00011100010001000
0001110
Cdigo fuente
JVM Linux
JVM Solaris
001010
1011 1
011
1
111111
1101
1001
1
Intrprete
Java
Solaris
Compilador
Java
Solaris
11100000101100 00111
00000101000
0001111110111111010
Franco Guidi Polanco
14/08/2007
Franco Guidi Polanco
14/08/2007
Componentes de Java
Java en distintos tamaos
Java se compone de:
Compilador (Java-compiler)
Intrprete (Java)
Biblioteca de clases (Java API o Application
Programmer Interface)
Utilitarios de desarrollo (para debug, documentacin,
etc.)
J2ME: Java 2
Micro Edition
J2SE: Java 2
Standard Edition
Lo anterior se encuentra en el SDK distribuido
por SUN-Microsystems
J2EE: Java 2
Enterprise Edition
Franco Guidi Polanco
14/08/2007
Franco Guidi Polanco
14/08/2007
10
Cmo es una aplicacin en Java?
El programa Hola Mundo:
Cdigo fuente
Seccin 2
Compilacin
Elementos de una aplicacin simple en
Java
public class Saluda{
public static void main (String[] arg) {
[Link]( hello world );
}
}
c:\>javac [Link]
c:\>
Ejecucin
c:\>java Saluda
hello world
c:\>
Franco Guidi Polanco
14/08/2007
12
Desarrollo y ejecucin e aplicacin en Java
public class Saluda{
public static void main (String[] arg) {
[Link]( hello world );
}
}
Cdigo
fuente
Tipos de datos en Java
Los tipos de datos utilizados por programas en
Java se clasifican en:
[Link]
Compilador Java
[Link]
101001010
001001001
Bytecode
JVM Windows
101011
1 11
1
hello
0
world
Franco Guidi Polanco
JVM Linux
Clases e interfaces: sirven para definir variables que
almacenan tipos de datos estructurados, con las
funciones asociadas.
JVM Solaris
001010
1011 1
011
hello
1
world
111111
1101
1001
1 hello
14/08/2007
world
13
Tipos de datos primitivos
14/08/2007
14/08/2007
14
Tipo entero: byte, short, int y long.
Entero
Punto flotante
Lgico
Caracter
Franco Guidi Polanco
Franco Guidi Polanco
Tipos de datos primitivos (cont.)
Java soporta los siguientes tipos de datos
primitivos:
Primitivos: sirven para definir variables que guardan
valores numricos, lgicos y caracteres unitarios.
15
Tipo
Almacena
Rango
byte
Entero de 8 bit
-128 hasta 127
short
Entero de 16 bit
-32.768 hasta 32.767
int
Entero de 32 bit
long
Entero de 64 bit
-[Link] hasta [Link]
-[Link].854.755.808 hasta
[Link].854.755.807
Franco Guidi Polanco
14/08/2007
16
Tipos de datos primitivos (cont.)
Tipos de datos primitivos (cont.)
Tipo punto flotante: float y double.
Tipo
Almacena
Rango
float
Punto flotante 32 bit
7 dgitos significativos (10-46, 1038)
double
Punto flotante 64 bit
15 dgitos significativos (10-324, 10308)
Tipo caracter: char.
Tipo
Almacena
char
Rango
Carcter Unicode
Tipo lgico: boolean.
Franco Guidi Polanco
14/08/2007
17
Tipo
Almacena
Rango
boolean
Lgico
false y true
Franco Guidi Polanco
14/08/2007
18
Operadores bsicos para tipos primitivos
Tipo de dato String
Operador de asignacin:
El String es un tipo de dato que permite trabajar
con cadenas de caracteres, por ejemplo:
Hola mundo, Mario Mora, 12/10/99, A, .
Operadores numricos:
Es una clase, no un tipo primitivo, pero se utiliza
en forma muy similar a estos ltimos.
Binarios:
+ (suma), - (resta), * (multiplicacin), / (divisin),
% (mdulo o resto de la divisin entera)
Unarios:
++ (autoincremento), -- (autodecremento)
Franco Guidi Polanco
14/08/2007
19
Franco Guidi Polanco
14/08/2007
20
Operadores bsicos para tipos primitivos (cont.)
Estructuras de control
Decisin
Operadores relacionales:
== (igual a)
!= (distinto de)
< (menor que), <= (menor o igual que),
> (mayor que), >= (mayor o igual que).
if ( condicin )
if ( condicin ) {
instruccin 1-1
instruccin 1-2
... }
if ( condicin )
else {
instruccin 1
&& (AND)
|| (OR)
! (NOT)
instruccin 2-1
instruccin 2-2
else
instruccin 2
14/08/2007
21
Estructuras de control (cont.)
Mientras - repetir:
instruccin
while ( condicin )
do {
while ( condicin ) {
instruccin 1
instruccin 2
instruccin 1
instruccin 2
...
} while ( condicin )
...
}
14/08/2007
22
// comentario hasta fin de lnea
/* comentario
de mltiples lneas
*/
/** comentario de documentacin
@author
@exception
@see
@param
@return
@version
*/
do
instruccin
14/08/2007
Se pueden incluir comentarios en el cdigo usando
los siguientes marcadores:
Hacer - mientras:
while ( condicin )
Franco Guidi Polanco
... }
Comentarios y documentacin
Iteracin
Franco Guidi Polanco
Compleja:
instruccin
Operadores lgicos:
Franco Guidi Polanco
Simple:
23
Franco Guidi Polanco
14/08/2007
24
Identificadores
Declaracin de variables
JAVA es sensible a maysculas y minsculas.
Una variable se declara segn el formato:
Es decir, JAVA considera distinto Nombre y nombre
Un identificador vlido consiste en una combinacin
de de letras, dgitos y el carcter underscore. No
puede comenzar por un dgito.
Ejemplo:
Convencin: el identificador de una variable de tipo
primitivo comenzar en minsculas.
- Vlidos: edad, nota_Alumno, _peso, estadoSalud
- No vlidos: 1ero, km/hora, Alumno(s), peso total
Franco Guidi Polanco
14/08/2007
tipo identificador [=valor] [, identificador [ = valor ] ]
Por ejemplo:
int a, b, c
double peso = 7.05
char letra = T
byte edad = 20, veces = 3
Por ejemplo: edad, edadAlumno, estadoCivil, esElUltimo
25
Algunos mtodos (funciones) de utilidad
Franco Guidi Polanco
14/08/2007
26
Algunos mtodos (funciones) de utilidad (cont.)
Despliegue de datos (escribir):
Convertir de String a nmero :
[Link]()
[Link]()
[Link]()
[Link]()
[Link]()
[Link]()
[Link]()
Por ejemplo:
[Link]( Hola )
[Link]( Hola + nombre )
Por ejemplo:
x = [Link]( 50 )
y = [Link]( dato ) + 40
Franco Guidi Polanco
14/08/2007
27
Franco Guidi Polanco
14/08/2007
28
Estructura de una aplicacin simple
Ejemplo: programa no interactivo
/**
Programa ejemplo para clculo del Factorial de un nmero especfico.
@author Franco Guidi
*/
public class Factorial1 {
Identificador
public static void main( String arg[] ) {de la clase (programa)
Definicin
/**
de la
Ejemplo de una aplicacin
aplicacin
(clase)
*/
public class IdentificadorClase {
public static void main (String[ ] idArreglo ) {
int nmero, i=1, fact=1;
nmero = 3;
Identificadores
while( i <= nmero ) {
Mtodo main
de variables
fact = fact * i;
i++;
}
[Link]( "El factorial de " + nmero + " es " + fact );
...
} // Fin mtodo main
} // Fin clase
} // Fin mtodo main
Mtodo main
} // Fin clase
Franco Guidi Polanco
14/08/2007
29
Estructura de la aplicacin
Franco Guidi Polanco
14/08/2007
30
Valores literales
/**
Programa ejemplo para clculo del Factorial de un nmero especfico.
Clase
@author Franco Guidi
*/
public class Factorial1 {
public static void main( String arg[] ) {
int nmero, i=1, fact=1;
nmero = 3;
while( i <= nmero ) {
fact = fact * i;
i++;
}
[Link]( "El factorial de " + nmero + " es " + fact );
Son valores que aparecen explcitamente en
el cdigo fuente. Por ejemplo:
S : tipo char
S, Juan, 100 : tipo String
150 : tipo int
150.0 : tipo double
150.0f : tipo float
0150: tipo int octal
0x150: tipo int hexadecimal
} // Fin mtodo main
Mtodo main
} // Fin clase
Franco Guidi Polanco
14/08/2007
31
Franco Guidi Polanco
14/08/2007
32
Valores literales
Caractersticas generales de una aplicacin simple
/**
Programa ejemplo para clculo del Factorial de un nmero especfico.
@author Franco Guidi
literal
*/
public class Factorial1 {
public static void main( String arg[] ) {
int nmero, i=1, fact=1;
literal
nmero = 3;
while( i <= nmero ) {
literal
fact = fact * i;
literal i++;
}
[Link]( "El factorial de " + nmero + " es " + fact );
} // Fin mtodo main
} // Fin clase
Se estructura como una clase que tiene un mtodo
main.
El nombre de la clase debe ser el mismo que el del
archivo que la contiene.
El programa puede ser invocado desde la lnea de
comandos, invocando al intrprete Java junto con
el nombre de la aplicacin. Ejemplo:
c:\tmp>java Factorial1
literal
Intrprete
Franco Guidi Polanco
14/08/2007
33
Traspaso de datos por parmetro
Franco Guidi Polanco
Programa
14/08/2007
34
Traspaso de datos por parmetro
Un arreglo es una coleccin de datos de un mismo tipo,
referenciada por un nombre. Cada dato ocupa una posicin
dentro de la coleccin. La cantidad total de posiciones es
fija, y son accesibles por medio de un subndice, que se
inicia en cero (0).
Ejemplo: un arreglo de Strings llamado textos, de largo 4:
El mtodo main puede recibir parmetros desde la
lnea de comandos del intrprete. Estos se
almacenan en las posiciones del arreglo de String
indicado en la declaracin del mtodo.
Parmetro
textos
hola
c:\tmp>java Factorial2 3
23
luis
2rwr
3
textos[0] contiene hola
textos[1] contiene 23
textos[4] se encuentra indefinido (error al tratar de acceder)
Franco Guidi Polanco
14/08/2007
35
Franco Guidi Polanco
14/08/2007
36
Ejemplo: programa que acepta datos por
parmetro
Consideraciones importantes
Java requiere la declaracin de variables antes de
que sean utilizadas. El tipo de una variable no
puede ser modificado. Se dice que es un lenguaje
fuertemente tipificado.
/**
Programa ejemplo para clculo del Factorial de un nmero especfico,
acepta el nmero proporcionado por parmetro.
@author Franco Guidi
*/
public class Factorial2 {
public static void main( String arg[] ) {
int nmero, i=1, fact=1;
nmero = [Link]( arg[0] );
while( i <= nmero ) {
fact = fact * i;
i++;
}
[Link]( "El factorial de " + nmero + " es " + fact );
Java distingue entre maysculas y minsculas.
Las expresiones matemticas se evalan con
precedencia de * y / sobre + y -.
} // Fin mtodo main
} // Fin clase
Franco Guidi Polanco
14/08/2007
37
Caractersticas generales de una aplicacin simple
(cont.)
Las instrucciones se organizan de acuerdo con las
estructuras de control:
secuencia
decisin : if( cond ) ... else ...
Iteracin: do ... while( cond )
38
Recomendaciones generales
Adoptar convencin para definicin de
identificadores:
while( cond ) ...
Variables: primeraLetraEnMinscula
Clases: PrimeraLetraEnMayscula
Mtodos: primeraLetraEnMinscula
Los bloques son instrucciones agrupadas mediante
parntesis de llave ( { y } ). Se utilizan en decisiones e
iteraciones, y no llevan punto y coma al final (despus
de la llave de cierre).
14/08/2007
14/08/2007
Documentar los programas.
Las instrucciones se separan mediante un punto y coma
( ; ).
Franco Guidi Polanco
Franco Guidi Polanco
39
Franco Guidi Polanco
14/08/2007
40
Tipos de variables y valores: regla general
Las variables almacenan datos del mismo tipo que
han sido definidas.
pero...
Seccin 3
Bajo consideraciones especiales las variables
pueden recibir datos de otros tipos:
Promocin automtica de tipos
Casting
Consideraciones sobre tipos primitivos
numricos
Franco Guidi Polanco
14/08/2007
42
Cambio del tipo de un valor: promocin
automtica
Cambio del tipo de un valor: promocin
automtica
Promocin automtica de tipos (conversin
por ensanchamiento): una variable de un tipo de
dato puede recibir un valor de otro tipo si:
Ejemplo de promocin automtica de tipos: dato
tipo int es almacenado en una variable double.
los dos tipos son compatibles(*), y
el tipo de destino es de mayor jerarqua que el
tipo de origen
int x = 4;
4
x
double y;
(*)Tipos compatibles: los tipos numricos son compatibles
entre s.
y = x;
Franco Guidi Polanco
14/08/2007
43
Franco Guidi Polanco
4.0
y
14/08/2007
4
x
44
Evaluacin de expresiones numricas
Cambio del tipo de un valor: casting
Regla general: La operacin de dos nmeros de
un mismo tipo, genera un resultado tambin del
mismo tipo.
Se exceptan de la regla anterior las operaciones
sobre datos tipo byte o short.
Casting: permite convertir un valor de un tipo de mayor
jerarqua a otro de menor jerarqua (funciona si y slo si
el tipo de menor jerarqua puede contener al valor
convertido). El casting tiene prioridad sobre los
operadores +,-,* y /.
Formato: var1 = (tipo de var1) var2
int j=200;
byte i;
i = (byte) j;
double j=1.0;
int i;
i = (int) j;
casting
14/08/2007
45
byte i=2, j=3, k;
j ;
int
Franco Guidi Polanco
byte i=2, j=3;
int k;
k = i + j ;
int
Error: no puede almacenarse
un int en una variable byte.
14/08/2007
int
14/08/2007
46
El resultado de cualquier expresin es del tipo
correspondiente al del operando de mayor
jerarqua, en el orden:
Franco Guidi Polanco
Evaluacin de expresiones: resultado de una
operacin
La operacin de dos datos de tipo byte o short,
genera como resultado un int.
14
int
Evaluacin de expresiones: promocin
automtica de byte y short
int a=10, b=4, c;
c = a / b ;
Incorrecto: el mximo valor que puede contener
una variable byte es 127.
La variable i queda con valor incorrecto.
Franco Guidi Polanco
k =
int a=10, b=4, c;
c = a + b ;
double
float
long
int
Automticamente
es promovido a double
antes de realizarse
la operacin.
Correcto
47
Franco Guidi Polanco
int i=10, k;
double j=2.0;
k =
double
j ;
5.0
Error: no puede almacenarse
un double en una variable int.
14/08/2007
48
Ejemplos de resultados de operaciones (cont.)
Ejemplos de resultados de operaciones
Suponer variable x definida como double:
x
x
x
x
x
=
=
=
=
=
10 / 4;
10.0 / 4;
10.0f / 4;
(double) 10 / 4;
(double) (10/4);
Franco Guidi Polanco
Suponer variable x definida como float:
x = 10 / 4;
x = 10.0 / 4;
// x toma valor 2.0 double
// x toma valor 2.5 double
// x toma valor 2.5 double
x = 10.0f / 4;
x = (float) 10 / 4;
x = (double) (10/4);
// x toma valor 2.5 double
// x toma valor 2.0 double
14/08/2007
49
Precisin de los clculos
// x toma valor 2.5 float
// Error: x no puede almacenar
valor 2.0 double
14/08/2007
50
if( var1 == var2 )
[Link]( Son iguales );
else
[Link]( No son iguales );
Solucin: determinar si la diferencia en valor absoluto de
las variables es menor que un error predeterminado:
Ejemplos*:
0.9999999999999999
1.0
1.0000000000000007
if( [Link]( var1 - var2 )< 0.0000001 )
[Link]( Son iguales );
else
[Link]( No son iguales );
(*) pruebas efectuadas con variable double)
14/08/2007
// x toma valor 2.5 float
Las operaciones aritmticas con valores float o double
fallan en la evaluacin de igualdades:
Las operaciones aritmticas con tipos de punto
flotante (float o double), se realizan con menor
precisin.
Franco Guidi Polanco
// Error: x no puede
almacenar valor 2.5 double
Precisin de los clculos (cont.)
Las operaciones aritmticas con tipos enteros
(byte, short, int o long), se realizan con alta
precisin.
0.1 sumado 10 veces:
0.01 sumado 100 veces:
0.001 sumado 1000 veces:
Franco Guidi Polanco
// x toma valor 2.0 float
51
Franco Guidi Polanco
14/08/2007
52
Una aplicacin interactiva
/**
Programa ejemplo para clculo del Factorial de un nmero especfico,
solicita datos en forma interactiva.
@author Franco Guidi
*/
import [Link].* ;
public class Factorial3 {
public static void main( String arg[ ] ) throws IOException {
int nmero, i=1, fact=1;
BufferedReader lector = new BufferedReader( new InputStreamReader( [Link] ) );
String ingresado;
[Link]( "Ingrese nmero para clculo de factorial: " );
ingresado = [Link]( );
nmero = [Link]( ingresado );
while( i <= nmero ) {
fact = fact * i;
i++;
}
[Link]( "El factorial de " + nmero + " es " + fact );
} // Fin mtodo main
} // Fin clase
Seccin 4
Una aplicacin simple interactiva
Franco Guidi Polanco
Una aplicacin interactiva
14/08/2007
54
Importacin de clases desde las Java API
Debe explicitarse
/**
qu seejemplo
har con
eventuales
Programa
para
clculo del Factorial de un nmero especfico,
de I/O
Permite crear el objeto de la clase
solicita datoserrores
en forma
interactiva.
BufferedReader identificado como
@author Franco Guidi
con el nombre lector, que se encargar de leer.
*/
import [Link].* ;
public class Factorial3 {
public static void main( String arg[ ] ) throws IOException {
int nmero, i=1, fact=1;
BufferedReader lector = new BufferedReader( new InputStreamReader( [Link] ) );
String ingresado;
[Link]( "Ingrese nmero para clculo de factorial: " );
ingresado = [Link]( );
nmero = [Link]( ingresado );
while( i <= nmero ) {
fact = fact * i;
i++;
El objeto lector se encarga de leer datos del
} a Java
Indica
usuario.
leer +
invoca
mtodo
readLine( ) .
[Link](
"El factorial
de " Para
+ nmero
" es " el
+ fact
);
dnde encontrar
las
} // Fin
mtodo main
clases
requeridas
} // Fin clase
Franco Guidi Polanco
14/08/2007
55
Java API
package [Link]
class Factorial3
Clases de
[Link] se
importan
automticamente
class String
class Long
class System
class Integer
class Math
class Byte
class Double
class Short
class Float
...
package [Link]
import [Link].*
Otras clases deben
importarse explcitamente,
indicando el nombre del
package que las contiene
Franco Guidi Polanco
class InputStreamReader
class IOException
class BufferedReader
...
package . . .
14/08/2007
56
Componentes de la Java API
Instanciacin del objeto lector
Algunos de los packages de la Java API
son:
datos del usuario
[Link] : construccin de applets.
[Link] : desarrollo y reutilizacin de componentes.
[Link] : componentes visuales.
[Link] : entrada y salida de datos.
[Link] : clases de uso comn.
[Link] : soporte para tipos numricos con SQL.
[Link] : componentes para trabajos en red.
[Link] : invocacin remota de mtodos.
[Link] : soporte para JDBC.
[Link] : firma de applets y codificacin de datos.
[Link] : manejo de distintos tipos de textos .
[Link] : clases varias de utilidad.
Se crea una instancia de clase
aplicacin
clases del
package [Link]
objeto
lector
(Remitirse a documentacin del JDK para una descripcin detallada)
new
Franco Guidi Polanco
14/08/2007
57
Uso del objeto lector
Franco Guidi Polanco
BufferedReader
InputStreamReader
14/08/2007
58
Vocabulario mnimo
Puede utilizarse las veces que sea necesario:
En la aplicacin interactiva se observan las siguientes
instrucciones:
...
String dato;
int base, expo;
BufferedReader usuario = new BufferedReader
( new InputStreamReader( [Link] ) );
...
...
nmero = [Link]( ingresado );
[Link]( Ingrese base : );
dato = [Link]( ) ;
base = [Link]( dato );
[Link]( Ingrese exponente : );
dato = [Link]( ) ;
expo = [Link]( dato );
...
...
ingresado = [Link]( ) ;
int nmero;
String ingresado;
...
...
String ingresado;
BufferedReader lector = new BufferedReader
( new InputStreamReader( [Link] ) );
...
...
Franco Guidi Polanco
14/08/2007
59
Franco Guidi Polanco
14/08/2007
60
Vocabulario mnimo (cont.)
Vocabulario mnimo (cont.)
Argumento o parmetro actual
ingresado = [Link]( ) ;
nmero = [Link]( ingresado );
Objeto de la clase
BufferedReader,
tambin llamado
instancia de la clase
BufferedReader
Mtodo de la clase Integer
(los mtodos llevan
parntesis al final)
Clase Integer
El mtodo parseInt de la clase Integer retorna el
equivalente a int de un String recicibido como parmetro.
Este valor es asignado a la variable nmero.
Franco Guidi Polanco
14/08/2007
Mtodo del objeto lector
(este mtodo no recibe
parmetros, pero de todas
formas lleva parntesis)
El mtodo readLine() del objeto lector retorna un String
ingresado por el usuario. Este valor es asignado a la
variable ingresado.
61
Nota...
Franco Guidi Polanco
14/08/2007
62
Aplicacin interactiva: resumen
Se requiere:
La importacin de clases del package [Link].
El valor retornado por un mtodo puede usarse como
parmetro actual de otro mtodo:
import [Link].* ;
La indicacin del sistema de control de excepciones.
...
int base, expo;
BufferedReader usuario = new BufferedReader
( new InputStreamReader( [Link] ) );
public static void main (String[ ] arg) throws IOException { ...
La instanciacin de un objeto de la clase
BufferedReader.
...
[Link]( Ingrese base : );
base = [Link]( [Link]( ) );
[Link]( Ingrese exponente : );
expo = [Link]( [Link]( ) );
BufferedReader x = new BufferedReader
( new InputStreamReader( [Link] ) );
La invocacin del mtodo readLine() del objeto de la
clase BufferedReader.
...
[Link]() retorna un String
que es recibido como parmetro
por el mtodo parseInt de la clase Integer
Franco Guidi Polanco
14/08/2007
nombre = [Link]() ;
63
Franco Guidi Polanco
14/08/2007
64
Uso de clases y objetos: resumen de lo utilizado
Las clases nos permiten realizar determinadas
tareas.
Las clases se encuentran disponibles en packages,
que deben ser importados a los programas.
Normalmente se deben crear instancias de clase
(u objetos), para poder usar los mtodos que estas
proveen.
Existen, sin embargo, clases cuyos mtodos pueden
utilizarse sin haber instanciado objetos.
Franco Guidi Polanco
14/08/2007
Seccin 5
Uso de arreglos
con tipos primitivos
65
Arreglos en Java
Identificacin y tamao de un arreglo
Los arreglos son colecciones ordenadas de datos
del mismo tipo.
Cada arreglo se reconoce por un identificador y cada
dato se almacena en una posicin indexada.
Un arreglo de largo N, tiene posiciones indexadas
mediante enteros desde 0 hasta N-1.
Ejemplos:
Arreglo de bytes:
3 27 50
nombres
Ana
Arreglo de Strings:
Ana
Casa Auto
12
Posicin:
Franco Guidi Polanco
50.4
14/08/2007
0.0
Mario
4
El mximo largo posible para un arreglo corresponde
al mayor valor permitido para un int.
Arreglo de doubles:
3.0
Juan Pedro Pa
-4.3
67
Franco Guidi Polanco
14/08/2007
68
Pasos para crear un arreglo en Java
Creacin de un arreglo
1: Definir una variable que identifique al arreglo, indicando
la naturaleza de los datos que se almacenarn:
tipo[ ] variable
Define que la variable edades
referenciar un arreglo de enteros.
o alternativamente:
tipo variable[ ]
int[] edades;
edades = new int[8];
2: Instanciar el arreglo indicando el largo que tendr, y
asignarlo a la variable:
variable = new tipo[ entero ]
Instancia un arreglo de enteros de
8 posiciones.
Asigna el arreglo instanciado
a la variable edades.
Franco Guidi Polanco
14/08/2007
69
Ejemplos de creacin de arreglos
Franco Guidi Polanco
14/08/2007
70
Forma abreviada para crear arreglos
Arreglo de byte de largo 1000:
La definicin de variable, instanciacin del arreglo
y su asignacin a la variable puede realizarse en
una sola instruccin:
byte[] valores;
valores = new byte[1000];
tipo[ ] variable = new tipo[ entero ]
Arreglo de double de largo 4:
double nota[];
nota = new double[4];
Ejemplo:
Arreglo de String de largo 20:
double[] nota = new double[4];
int largo = 20;
String[] nombres;
nombres = new String[ largo ];
Franco Guidi Polanco
14/08/2007
71
Franco Guidi Polanco
14/08/2007
72
Otra forma para instanciar arreglos
Acceso a las posiciones de un arreglo
Se deben accesar mediante un subndice de tipo
entero (byte, short, int o long):
Tambin es posible instanciar arreglos
escribindolos como literales en el cdigo fuente:
...
int i;
long[] nmeros;
int[] nota ;
nota = { 23, 14, 55, 18 } ;
nmeros = new long[ 20 ];
...
i=0;
while( i < 20 ){
nmeros[ i ] = i ;
i++;
}
...
Instancia un arreglo de enteros de largo 4.
Franco Guidi Polanco
14/08/2007
73
Recorrer un arreglo
74
Tratar de accesar una posicin inexistente del
arreglo, por ejemplo, la posicin 10 de un arreglo
de largo 10.
Cuando lo anterior ocurre, se genera en tiempo de
ejecucin una excepcin denominada:
ArrayIndexOutOfBoundsException
...
int i;
long[] nmeros;
nmeros = new long[ 20 ];
...
i=0;
while( i < [Link] ) {
[Link]( nmeros[ i ] );
i++;
}
...
14/08/2007
14/08/2007
Error tpico en el manejo de arreglos
Se puede utilizar la propiedad length del arreglo
para controlar procesos iterativos sobre el mismo:
Franco Guidi Polanco
Franco Guidi Polanco
75
Franco Guidi Polanco
14/08/2007
76
Consideraciones respecto del largo de un arreglo
El arreglo de parmetros declarado al inicio
del mtodo main, es instanciado por Java al
momento de ejecutarse la aplicacin.
Una vez instanciado un arreglo, no puede
modificarse su largo.
length es una propiedad o atributo del arreglo
que contiene el largo del mismo.
El arreglo se instancia con un largo igual a la
cantidad de parmetros traspasados en la
lnea de comandos.
double[] nota;
nota = new double[4];
[Link]( El largo es + [Link] );
El arreglo debe ser declarado como arreglo de
Strings.
Las propiedades o atributos se consultan sin parntesis al final,
a diferencia de los mtodos.
Franco Guidi Polanco
14/08/2007
77
Resumen de arreglos
14/08/2007
78
Los arreglos son referenciados desde una variable.
Todas las posiciones del arreglo son del mismo
tipo.
La instanciacin ocurre de tres formas:
cuando se utiliza el operador new.
cuando el arreglo es declarado literalmente.
cuando se ejecuta la aplicacin, en el caso
particular del arreglo de parmetros del mtodo
main.
14/08/2007
Franco Guidi Polanco
Resumen de arreglos
Los arreglos se instancian.
Franco Guidi Polanco
Consideraciones respecto del arreglo de
parmetros
El atributo length permite acceder al largo del
arreglo.
Tratar de acceder una posicin inexistente del
arreglo genera una excepcin
ArrayIndexOutOfBoundsException.
79
Franco Guidi Polanco
14/08/2007
80
Matrices
Matrices
Un arreglo puede tener ms de una dimensin.
Los arreglos de ms de una dimensin se
denominan matrices.
El caso ms comn es la matriz bidimensional:
Java permite crear matrices de la siguiente forma:
tipo[ ] [ ] variable = new tipo[ entero1 ] [ entero2 ]
Por ejemplo:
int[ ][ ] utilidad;
utilidad = new double[10][15];
O mediante literales:
double[ ][ ] uti;
uti = { {-1, 7, 15}, {3, 0, 2}, {4, -3, 12} };
12
-3
55
700
-8
-2
14
Matriz de dos dimensiones
uti[1][2] contiene un 2.
Franco Guidi Polanco
14/08/2007
81
Caractersticas de una matriz
mediciones
Franco Guidi Polanco
-3
55
700
-8
-2
14
14/08/2007
14/08/2007
82
Convenciones respecto de las matrices
Todas las posiciones de una matriz son de un
mismo tipo (al igual que el caso de los arreglos).
La matrices se identifican por su nombre, y se
caracterizan adems por sus dimensiones.
Las dimensiones de una matriz no se pueden
modificar.
Ejemplo:
12
Franco Guidi Polanco
En el caso de las matrices de dos dimensiones,
llamaremos a la primera dimensin fila, y a la segunda,
columna.
Representaremos visualmente en nuestros ejemplos las
filas hacia abajo y las columnas hacia el lado.
La primera fila ser la fila 0 y la primera columna, la
columna 0.
Columnas
0
1
2
3
Matriz mediciones
de datos enteros,
de dimensiones 3 x 4
83
12
-3
55
Filas 1
700
-8
-2
14
Franco Guidi Polanco
14/08/2007
Matriz de 3 filas
y 4 columnas
84
Particularidades de los arreglos
multidimensionales en Java
Acceso a posiciones
Las posiciones de una matriz se acceden
independientemente (una a una).
Se utiliza un subndice para especificar cada dimensin
En una matriz de dos dimensiones, el primer subndice
representa la fila, y el segundo, la columna.
Ejemplo
mediciones
0
1
0
12
-3
2
4
3
55
700
-8
-2
14
Franco Guidi Polanco
14/08/2007
mediciones[0][0] contiene un 12
mediciones[0][3] contiene un 55
mediciones[2][0] contiene un 1
mediciones[2][3] contiene un 14
mediciones[1][2] contiene un 8
mediciones[2][1] contiene un 0
etc...
85
En rigor Java no provee arreglos multidimensionales.
Java los implementa mediante arreglos de arreglos.
Esto permite crear, por ejemplo, matrices
bidimensionales con cantidades de posiciones distintas
por fila:
int[ ][ ] nota;
nota = { {-1,7,15}, {3, 2}, {4,-3,12}, {3} };
Franco Guidi Polanco
14/08/2007
86