You are on page 1of 25

Introduccin a la Programacin en Java

Franco Guidi Polanco


Escuela de Ingeniera Industrial
Pontificia Universidad Catlica de Valparaso, Chile
fguidi@ucv.cl
Act. 2012.08.01
01-08-12 Franco Guidi Polanco 2
Contenido
! Generalidades de Java
! Elementos de una aplicacin simple
! Una aplicacin simple interactiva
! Ingreso de datos por parmetros
! Consideraciones sobre tipos primitivos numricos
! Uso de arreglos unidimensionales y
multidimensionales
Hola mundo en Java
01-08-12 Franco Guidi Polanco 3
public class Saluda{
public static void main (String[] arg) {
System.out.println( "Hola mundo!" );
}
}
Otro ejemplo sencillo
01-08-12 Franco Guidi Polanco 4
public class Factorial {
public static void main( String arg[] ) {
int nmero, i=1, fact=1;
nmero = 3;
while( i <= nmero ) {
fact = fact * i;
i++;
}
System.out.println( "El factorial de " +
nmero + " es " + fact );
}
}
Desafo preliminar
! Escribir un programa en Java que muestre la suma
de los nmeros enteros contenidos entre 20 y 30,
con ambos lmites incluidos.
01-08-12 Franco Guidi Polanco 5
Un tercer ejemplo
01-08-12 Franco Guidi Polanco 6
import java.io.* ;
public class Decisin{
public static void main(String arg[]) throws IOException {
int nmero, i=1, fact=1;
BufferedReader lector = new BufferedReader( new
InputStreamReader(System.in ));
String ingresado;
System.out.println( "Ingrese nmero: " );
ingresado = lector.readLine( );
nmero = Integer.parseInt( ingresado );
if( nmero >= 4){
System.out.println( "Me gusta este nmero" );
System.out.println( "Es mayor o igual a cuatro");
}else{
System.out.println( "Odio el valor" + nmero );
System.out.println( "Es menor que cuatro );
}
}
Finalemente, un cuarto ejemplo
01-08-12 Franco Guidi Polanco 7
import java.io.* ;
public class Factorial2 {
public static void main(String arg[]) throws IOException {
int nmero, i=1, fact=1;
BufferedReader lector = new BufferedReader( new
InputStreamReader(System.in ));
String ingresado;
System.out.println( "Ingrese nmero: " );
ingresado = lector.readLine( );
nmero = Integer.parseInt( ingresado );
while( i <= nmero ) {
fact = fact * i;
i++;
}
System.out.println( "El factorial de " + nmero + " es "
+ fact );
}
}
Otros desafos
! Escribir un programa que reciba cinco puntajes. Si
la suma de los puntajes es superior a 70 puntos, el
programa deber mostrar la palabra GAN, en
caso contrario, la palabra PERDI.
! Escribir un programa que reciba un nmero, y que
muestre la secuencia de nmeros enteros positivos
desde el cero hasta el nmero ingresado.
01-08-12 Franco Guidi Polanco 8
Seccin 1
Generalidades de Java
01-08-12 Franco Guidi Polanco 10
Qu es JAVA?
! Java es:
" 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.
01-08-12 Franco Guidi Polanco 11
Para qu sirve JAVA?
! Java permite:
" 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).
http://java.sun.com/applets/jdk/1.4/demo/applets/DrawTest/example1.html
Ejemplo de applet:
01-08-12 Franco Guidi Polanco 12
Desarrollo y ejecucin de aplicaciones en otros
lenguajes
Compilador
para
Windows
Compilador
para
Linux
Compilador
para
Solaris
Cdigo fuente
111000 1
1110001000111111111
00011101111011010
0000110101100 00111
00011100010001000
0001110
11100000101100 00111
00000101000
0001111110111111010
Program Hola;
begin
i :=1;
writeln( i )
end.
Cdigo objeto
01-08-12 Franco Guidi Polanco 13
public class
Hola {
public static
...
i=1;
System.out..
}
}
1111000011
110000
0000111100
001111
Bytecode
Compilador
Java
Windows
Compilador
Java
Linux
Compilador
Java
Solaris
Intrprete
Java
Windows
Intrprete
Java
Linux
Intrprete
Java
Solaris
Cdigo fuente
111000 1
1110001000111111111
00011101111011010
0000110101100 00111
00011100010001000
0001110
11100000101100 00111
00000101000
0001111110111111010
Desarrollo y ejecucin de aplicaciones en JAVA
01-08-12 Franco Guidi Polanco 14
Intrprete Java: Java Virtual Machine (JVM)
JVM Windows
101001010
001001001
101011
1 11
1
0
JVM Linux
001010
1011 1
011
1
JVM Solaris
111111
1101
1001
1
Bytecode
01-08-12 Franco Guidi Polanco 15
Componentes de Java
! 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.)
! Lo anterior se encuentra en el SDK (Software
Development Kit) distribuido por SUN-
Microsystems (ahora Oracle)
01-08-12 Franco Guidi Polanco 16
Java en distintos tamaos
J2EE: Java 2
Enterprise Edition
J2SE: Java 2
Standard Edition
J2ME: Java 2
Micro Edition
Seccin 2
Elementos de una aplicacin simple en
Java
01-08-12 Franco Guidi Polanco 18
Cmo es una aplicacin en Java?
! El programa Hola Mundo:
public class Saluda{
public static void main (String[] arg) {
System.out.println( hello world );
}
}

c:\>java Saluda
hello world

c:\>
Cdigo fuente

c:\>javac Saluda.java

c:\>
Compilacin
Ejecucin
01-08-12 Franco Guidi Polanco 19
Desarrollo y ejecucin e aplicacin en Java
JVM Windows
101001010
001001001
101011
1 11
1
0
JVM Linux
001010
1011 1
011
1
JVM Solaris
111111
1101
1001
1
Bytecode
hello
world
public class Saluda{
public static void main (String[] arg) {
System.out.println( hello world );
}
}
Compilador Java
Cdigo
fuente
Saluda.java
Saluda.class
hello
world
hello
world
01-08-12 Franco Guidi Polanco 20
Tipos de datos en Java
! Los tipos de datos utilizados por programas en
Java se clasifican en dos categoras:
" Primitivos: sirven para definir variables que guardan
valores numricos, lgicos y caracteres unitarios.
" Clases e interfaces: sirven para definir variables que
almacenan tipos de datos estructurados y las funciones
asociadas.
01-08-12 Franco Guidi Polanco 21
Tipos de datos primitivos
! Java soporta los siguientes tipos de datos
primitivos:
" Entero
" Punto flotante
" Lgico
" Caracter
01-08-12 Franco Guidi Polanco 22
Tipos de datos primitivos (cont.)
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 -2.147.483.648 hasta 2.147.483.647
long Entero de 64 bit
-9.223.372.036.854.755.808 hasta
9.223.372.036.854.755.807
! Familia de datos enteros: byte, short, int y long.
01-08-12 Franco Guidi Polanco 23
Tipos de datos primitivos (cont.)
Tipo Almacena Rango
float Punto flotante 32 bit 7 dgitos significativos (10
-46
, 10
38
)
double Punto flotante 64 bit 15 dgitos significativos (10
-324
, 10
308
)
! Familia de datos punto flotante: float y double.
01-08-12 Franco Guidi Polanco 24
Tipos de datos primitivos (cont.)
! Tipo caracter: char.
Tipo Almacena Rango
char Carcter Unicode
! Tipo lgico: boolean.
Tipo Almacena Rango
boolean Lgico false y true
01-08-12 Franco Guidi Polanco 25
Tipo de dato String
! El String es un tipo de dato que permite trabajar
con cadenas de caracteres, por ejemplo:
Hola mundo, Mario Mora, 12/10/99, A,
.

! Es una clase, no un tipo primitivo, pero se utiliza
en forma muy similar a estos ltimos.

01-08-12 Franco Guidi Polanco 26
Operadores bsicos para tipos primitivos
! Operador de asignacin:
=

! Operadores numricos:
" Binarios:
+ (suma), - (resta), * (multiplicacin), / (divisin),
% (mdulo o resto de la divisin entera)
" Unarios:
++ (autoincremento), -- (autodecremento)
01-08-12 Franco Guidi Polanco 27
Operadores bsicos para tipos primitivos (cont.)
! Operadores relacionales:
== (igual a)
!= (distinto de)
< (menor que), <= (menor o igual que),
> (mayor que), >= (mayor o igual que).


! Operadores lgicos:
&& (AND)
|| (OR)
! (NOT)

01-08-12 Franco Guidi Polanco 28
Estructuras de control
! Decisin
" Simple:


if ( condicin )
instruccin


if ( condicin )
instruccin 1
else
instruccin 2
" Compleja:

if ( condicin ) {
instruccin 1-1
instruccin 1-2
...
} else {
instruccin 2-1
instruccin 2-2
...
}
01-08-12 Franco Guidi Polanco 29
Estructuras de control (cont.)
! Iteracin
" Mientras - repetir:

while ( condicin )
instruccin



while ( condicin ) {
instruccin 1
instruccin 2
...
}

" Hacer - mientras:
do
instruccin
while ( condicin )


do {
instruccin 1
instruccin 2
...
} while ( condicin )
01-08-12 Franco Guidi Polanco 30
Identificadores
! JAVA es sensible a maysculas y minsculas.
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:
- Vlidos: edad, nota_Alumno, _peso, estadoSalud
- No vlidos: 1ero, km/hora, Alumno(s), peso total
01-08-12 Franco Guidi Polanco 31
Declaracin de variables
! Una variable se declara segn el formato:
tipo identificador [=valor] [, identificador [ = valor ] ]
Por ejemplo: int a, b, c
double peso = 7.05
char letra = T
byte edad = 20, veces = 3


! Convencin: el identificador de una variable
comenzar en minsculas.
Por ejemplo: edad, edadAlumno, estadoCivil,
esElUltimo

01-08-12 Franco Guidi Polanco 32
Algunos mtodos (funciones) de utilidad
! Despliegue de datos:
System.out.print() : escribe.
System.out.println() : escribe y cambia de lnea.

Por ejemplo:
System.out.println( Hola )
System.out.println( Hola + nombre )
01-08-12 Franco Guidi Polanco 33
Algunos mtodos (funciones) de utilidad (cont.)
! Convertir de String a nmero :
Byte.parseByte()
Short.parseShort()
Integer.parseInt()
Float.parseFloat()
Double.parseDouble()

Por ejemplo:
x = Integer.parseInt( 50 )
y = Integer.parseInt( dato ) + 40
01-08-12 Franco Guidi Polanco 34
Comentarios y documentacin
! Se pueden incluir comentarios en el cdigo usando
los siguientes marcadores:
// comentario hasta fin de lnea
/* comentario
de mltiples lneas
*/
/** comentario de documentacin
@author
@exception
@see
@param
@return
@version
*/
01-08-12 Franco Guidi Polanco 35
Estructura de una aplicacin simple
/**
Ejemplo de una aplicacin
*/
public class IdentificadorClase {
public static void main (String[ ] idArreglo ) {

...

} // Fin mtodo main
} // Fin clase
Definicin
de la
aplicacin (clase)
Mtodo main
01-08-12 Franco Guidi Polanco 36
/**
Programa ejemplo para clculo del Factorial de un nmero especfico.
@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++;
}
System.out.println( "El factorial de " + nmero + " es " + fact );

} // Fin mtodo main

} // Fin clase
Ejemplo: programa no interactivo
Identificadores
de variables
Identificador
de la clase (programa)
Mtodo main
01-08-12 Franco Guidi Polanco 37
Estructura de la aplicacin
/**
Programa ejemplo para clculo del Factorial de un nmero especfico.
@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++;
}
System.out.println( "El factorial de " + nmero + " es " + fact );

} // Fin mtodo main

} // Fin clase
Clase
Mtodo main
01-08-12 Franco Guidi Polanco 38
Valores literales
! 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
01-08-12 Franco Guidi Polanco 39
Valores literales
/**
Programa ejemplo para clculo del Factorial de un nmero especfico.
@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++;
}
System.out.println( "El factorial de " + nmero + " es " + fact );

} // Fin mtodo main

} // Fin clase
literal
literal
literal
literal
literal
01-08-12 Franco Guidi Polanco 40
Caractersticas generales de una aplicacin simple
! 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.
! La aplicacin se compila invocando al compilador
Java junto con el nombre del archivo. Ejemplo:


c:\tmp>javac Factorial1.java

Compilador Archivo
01-08-12 Franco Guidi Polanco 41
Caractersticas generales de una aplicacin simple
! 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

Intrprete Programa
Seccin 3
Ingreso de datos por parmetro
01-08-12 Franco Guidi Polanco 43
Traspaso de datos por parmetro
! 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.

c:\tmp>java Factorial2 3

Parmetro
01-08-12 Franco Guidi Polanco 44
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:
hola 23 luis 2rwr
textos
0 1 2 3
textos[0] contiene hola
textos[1] contiene 23
textos[4] se encuentra indefinido (error al tratar de acceder)
01-08-12 Franco Guidi Polanco 45
Ejemplo: programa que acepta datos por
parmetro
/**
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 = Integer.parseInt( arg[0] );
while( i <= nmero ) {
fact = fact * i;
i++;
}
System.out.println( "El factorial de " + nmero + " es " + fact );

} // Fin mtodo main

} // Fin clase
01-08-12 Franco Guidi Polanco 46
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.
! Java distingue entre maysculas y minsculas.
! Las expresiones matemticas se evalan con
precedencia de * y / sobre + y -.
01-08-12 Franco Guidi Polanco 47
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 ) o while( cond ) ...
! Las instrucciones se separan mediante un punto y coma
( ; ).
! 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).
01-08-12 Franco Guidi Polanco 48
Recomendaciones generales
! Documentar los programas.
! Adoptar convencin para definicin de
identificadores:
" Variables: primeraLetraEnMinscula
" Clases: PrimeraLetraEnMayscula
" Mtodos: primeraLetraEnMinscula
Seccin 4
Aplicaciones interactivas
(interfaz de consola)
01-08-12 Franco Guidi Polanco 50
Una aplicacin interactiva
/**
Programa ejemplo para clculo del Factorial de un nmero especfico,
solicita datos en forma interactiva.
@author Franco Guidi
*/
import java.io.* ;
public class Factorial3 {
public static void main( String arg[ ] ) throws lOException {
int nmero, i=1, fact=1;
BufferedReader lector = new BufferedReader( new lnputStreamReader( System.in ) );
String ingresado;
System.out.println( "lngrese nmero para clculo de factorial: " );
ingresado = lector.readLine( );
nmero = lnteger.parselnt( ingresado );
while( i <= nmero ) {
fact = fact * i;
i++;
}
System.out.println( "El factorial de " + nmero + " es " + fact );
} // Fin mtodo main
} // Fin clase
01-08-12 Franco Guidi Polanco 51
Una aplicacin interactiva
/**
Programa ejemplo para clculo del Factorial de un nmero especfico,
solicita datos en forma interactiva.
@author Franco Guidi
*/
import java.io.* ;
public class Factorial3 {
public static void main( String arg[ ] ) throws lOException {
int nmero, i=1, fact=1;
BufferedReader lector = new BufferedReader( new lnputStreamReader( System.in ) );
String ingresado;
System.out.println( "lngrese nmero para clculo de factorial: " );
ingresado = lector.readLine( );
nmero = lnteger.parselnt( ingresado );
while( i <= nmero ) {
fact = fact * i;
i++;
}
System.out.println( "El factorial de " + nmero + " es " + fact );
} // Fin mtodo main
} // Fin clase
El objeto lector se encarga de leer datos del
usuario. Para leer invoca el mtodo readLine( ) .
Permite crear el objeto de la clase
BufferedReader identificado como
con el nombre lector, que se encargar de leer.
lndica a Java
dnde encontrar las
clases requeridas
Debe explicitarse
qu se har con eventuales
errores de l/O
01-08-12 Franco Guidi Polanco 52
Importacin de clases desde las Java API
class Factorial3

class String
class System
class Math
class Double
class Float
class Short
class Integer
class Long
class Byte
. . .
package java.lang
class BufferedReader
class InputStreamReader class IOException
. . .
package java.io
Java API
import java.io.*
Clases de
java.lang se
importan
automtica-
mente
Otras clases deben
importarse explcitamente,
indicando el nombre del
package que las contiene
package . . .
01-08-12 Franco Guidi Polanco 53
Componentes de la Java API
! Algunos de los packages de la Java API
son:
" java.applet : construccin de applets.
" Java.beans : desarrollo y reutilizacin de componentes.
" java.awt : componentes visuales.
" java.io : entrada y salida de datos.
" java.lang : clases de uso comn.
" java.math : soporte para tipos numricos con SQL.
" java.net : componentes para trabajos en red.
" java.rmi : invocacin remota de mtodos.
" java.sql : soporte para JDBC.
" java.security : firma de applets y codificacin de datos.
" java.text : manejo de distintos tipos de textos .
" java.util : clases varias de utilidad.
(Remitirse a documentacin del JDK para una descripcin detallada)
01-08-12 Franco Guidi Polanco 54
Instanciacin del objeto lector
clases del
package java.io
aplicacin

new
objeto
lector

datos del usuario

Se crea una instancia de clase
BufferedReader
InputStreamReader
01-08-12 Franco Guidi Polanco 55
Uso del objeto lector
. . .
String dato;
int base, expo;
BufferedReader usuario = new BufferedReader
( new InputStreamReader( System.in ) );
. . .
System.out.println( Ingrese base : );
dato = usuario.readLine( ) ;
base = Integer.parseInt( dato );
System.out.println( Ingrese exponente : );
dato = usuario.readLine( ) ;
expo = Integer.parseInt( dato );
. . .
! Puede utilizarse las veces que sea necesario:
01-08-12 Franco Guidi Polanco 56
Vocabulario mnimo
! En la aplicacin interactiva se observan las siguientes
instrucciones:
. . .
int nmero;
String ingresado;
. . .
nmero = Integer.parseInt( ingresado );
. . .
. . .
String ingresado;
BufferedReader lector = new BufferedReader
( new InputStreamReader( System.in ) );
. . .
ingresado = lector.readLine( ) ;
. . .
01-08-12 Franco Guidi Polanco 57
Vocabulario mnimo (cont.)
Clase Integer
Mtodo de la clase Integer
(los mtodos llevan
parntesis al final)
nmero = Integer.parseInt( ingresado );
Argumento o parmetro actual
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.
01-08-12 Franco Guidi Polanco 58
Vocabulario mnimo (cont.)
ingresado = lector.readLine( ) ;
Objeto de la clase
BufferedReader,
tambin llamado
instancia de la clase
BufferedReader
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.
01-08-12 Franco Guidi Polanco 59
Nota...
. . .
int base, expo;
BufferedReader usuario = new BufferedReader
( new InputStreamReader( System.in ) );
. . .
System.out.println( Ingrese base : );
base = Integer.parseInt( usuario.readLine( ) );
System.out.println( Ingrese exponente : );
expo = Integer.parseInt( usuario.readLine( ) );
. . .
! El valor retornado por un mtodo puede usarse como
parmetro actual de otro mtodo:
usuario.readLine() retorna un String
que es recibido como parmetro
por el mtodo parseInt de la clase Integer
01-08-12 Franco Guidi Polanco 60
Aplicacin interactiva: resumen
Se requiere:
! La importacin de clases del package java.io.
! La indicacin del sistema de control de excepciones.
! La instanciacin de un objeto de la clase
BufferedReader.
! La invocacin del mtodo readLine() del objeto de la
clase BufferedReader.
import java.io.* ;
BufferedReader x = new BufferedReader
( new lnputStreamReader( System.in ) );
public static void main (String[ ] arg) throws lOException { ...
nombre = x.readLine() ;
01-08-12 Franco Guidi Polanco 61
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.
Seccin 5
Consideraciones sobre tipos primitivos
numricos
01-08-12 Franco Guidi Polanco 63
Tipos de variables y valores: regla general
! Las variables almacenan datos del mismo tipo que
han sido definidas.
pero...
! Bajo consideraciones especiales las variables
pueden recibir datos de otros tipos:
" Promocin automtica de tipos
" Casting
01-08-12 Franco Guidi Polanco 64
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:
" los dos tipos son compatibles(*), y
" el tipo de destino es de mayor jerarqua que el
tipo de origen
(*)Tipos compatibles: los tipos numricos son compatibles
entre s.
01-08-12 Franco Guidi Polanco 65
Cambio del tipo de un valor: promocin
automtica
int x = 4;


double y;


y = x;
4
x

y
4.0
y
4
x
! Ejemplo de promocin automtica de tipos: dato
tipo int es almacenado en una variable double.
01-08-12 Franco Guidi Polanco 66
Cambio del tipo de un valor: casting
! 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
double j=1.0;
int i;
i = (int) j;
casting
int j=200;
byte i;
i = (byte) j;
Incorrecto: el mximo valor que puede contener
una variable byte es 127.
La variable i queda con valor incorrecto.
01-08-12 Franco Guidi Polanco 67
! 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.



Evaluacin de expresiones numricas
int a=10, b=4, c;
c = a + b ;



14
int a=10, b=4, c;
c = a / b ;



2
int
int
01-08-12 Franco Guidi Polanco 68
Evaluacin de expresiones: promocin
automtica de byte y short
! La operacin de dos datos de tipo byte o short,
genera como resultado un int.



byte i=2, j=3, k;

k = i + j ;



5
int
Error: no puede almacenarse
un int en una variable byte.

byte i=2, j=3;
int k;
k = i + j ;



int
5
Correcto
01-08-12 Franco Guidi Polanco 69
Evaluacin de expresiones: resultado de una
operacin
! El resultado de cualquier expresin es del tipo
correspondiente al del operando de mayor
jerarqua, en el orden:
" double
" float
" long
" int


int i=10, k;
double j=2.0;

k = i / j ;



double
Error: no puede almacenarse
un double en una variable int.
5.0
Automticamente
es promovido a double
antes de realizarse
la operacin.
01-08-12 Franco Guidi Polanco 70
Ejemplos de resultados de operaciones
! Suponer variable x definida como double:
x = 10 / 4; // x toma valor 2.0 double
x = 10.0 / 4; // x toma valor 2.5 double
x = 10.0f / 4; // x toma valor 2.5 double
x = (double) 10 / 4; // x toma valor 2.5 double
x = (double) (10/4); // x toma valor 2.0 double

01-08-12 Franco Guidi Polanco 71
Ejemplos de resultados de operaciones (cont.)
! Suponer variable x definida como float:
x = 10 / 4; // x toma valor 2.0 float
x = 10.0 / 4; // Error: x no puede
almacenar valor 2.5 double
x = 10.0f / 4; // x toma valor 2.5 float
x = (float) 10 / 4; // x toma valor 2.5 float
x = (double) (10/4); // Error: x no puede almacenar
valor 2.0 double
01-08-12 Franco Guidi Polanco 72
Precisin de los clculos
! Las operaciones aritmticas con tipos enteros
(byte, short, int o long), se realizan con alta
precisin.
! Las operaciones aritmticas con tipos de punto
flotante (float o double), se realizan con menor
precisin.
Ejemplos*:

0.1 sumado 10 veces: 0.9999999999999999
0.01 sumado 100 veces: 1.0
0.001 sumado 1000 veces: 1.0000000000000007

(*) pruebas efectuadas con variable double)
01-08-12 Franco Guidi Polanco 73
Precisin de los clculos (cont.)
! Las operaciones aritmticas con valores float o double
fallan en la evaluacin de igualdades:
if( var1 == var2 )
System.out.println( Son iguales );
else
System.out.println( No son iguales );
! Solucin: determinar si la diferencia en valor absoluto de
las variables es menor que un error predeterminado:
if( Math.abs( var1 - var2 )< 0.0000001 )
System.out.println( Son iguales );
else
System.out.println( No son iguales );
Seccin 6
Uso de arreglos
con tipos primitivos
01-08-12 Franco Guidi Polanco 75
Arreglos en Java
! Los arreglos son colecciones ordenadas de datos
del mismo tipo.
" Ejemplos:
3 27 50 1 0 4
Arreglo de bytes:
Casa 12 $#! Auto Ana
Arreglo de Strings:
3.0 50.4 0.0 -4.3
Arreglo de doubles:
01-08-12 Franco Guidi Polanco 76
Identificacin y tamao de un arreglo
! 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.
! El mximo largo posible para un arreglo corresponde al
mayor valor permitido para un int.
Juan Pa Mario Pedro Ana
nombres
Posicin: 0 1 2 3 4
01-08-12 Franco Guidi Polanco 77
Pasos para crear un arreglo en Java
1: Definir una variable que identifique al arreglo, indicando
la naturaleza de los datos que se almacenarn:
tipo[ ] variable
o alternativamente:
tipo variable[ ]



2: Instanciar el arreglo indicando el largo que tendr, y
asignarlo a la variable:
variable = new tipo[ entero ]
01-08-12 Franco Guidi Polanco 78
Creacin de un arreglo

int[] edades;
edades = new int[8];

Define que la variable edades
referenciar un arreglo de enteros.
Instancia un arreglo de enteros de
8 posiciones.
Asigna el arreglo instanciado
a la variable edades.
01-08-12 Franco Guidi Polanco 79
Ejemplos de creacin de arreglos
byte[] valores;
valores = new byte[1000];
int largo = 20;
String[] nombres;
nombres = new String[ largo ];
double nota[];
nota = new double[4];
! Arreglo de byte de largo 1000:
! Arreglo de double de largo 4:
! Arreglo de String de largo 20:
01-08-12 Franco Guidi Polanco 80
Forma abreviada para crear arreglos
! La definicin de variable, instanciacin del arreglo
y su asignacin a la variable puede realizarse en
una sola instruccin:
tipo[ ] variable = new tipo[ entero ]
double[] nota = new double[4];
Ejemplo:
01-08-12 Franco Guidi Polanco 81
Otra forma para instanciar arreglos
! Tambin es posible instanciar arreglos
escribindolos como literales en el cdigo fuente:

int[] nota = { 23, 14, 55, 18 } ;
Instancia un arreglo de enteros de largo 4.
01-08-12 Franco Guidi Polanco 82
Acceso a las posiciones de un arreglo
...
int i;
long[] nmeros;
nmeros = new long[ 20 ];
...
i=0;
while( i < 20 ){
nmeros[ i ] = i ;
i++;
}
...
! Se deben accesar mediante un subndice de tipo
entero (byte, short, int o long):
01-08-12 Franco Guidi Polanco 83
Recorrer un arreglo
...
int i;
long[] nmeros;
nmeros = new long[ 20 ];
...
i=0;
while( i < nmeros.length ) {
System.out.println( nmeros[ i ] );
i++;
}
...
! Se puede utilizar la propiedad length del arreglo
para controlar procesos iterativos sobre el mismo:
01-08-12 Franco Guidi Polanco 84
Error tpico en el manejo de arreglos
! 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
01-08-12 Franco Guidi Polanco 85
Consideraciones respecto del largo de un arreglo
! Una vez instanciado un arreglo, no puede
modificarse su largo.
! length es una propiedad o atributo del arreglo
que contiene el largo del mismo.

double[] nota;
nota = new double[4];
System.out.println( El largo es + nota.length );

Las propiedades o atributos se consultan sin parntesis al final,
a diferencia de los mtodos.
01-08-12 Franco Guidi Polanco 86
Consideraciones respecto del arreglo de
parmetros
! El arreglo de parmetros declarado al inicio
del mtodo main, es instanciado por Java al
momento de ejecutarse la aplicacin.
! El arreglo se instancia con un largo igual a la
cantidad de parmetros traspasados en la
lnea de comandos.
! El arreglo debe ser declarado como arreglo de
Strings.
01-08-12 Franco Guidi Polanco 87
Resumen de arreglos
! Los arreglos se instancian.
! 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.
01-08-12 Franco Guidi Polanco 88
Resumen de arreglos
! Los arreglos son referenciados desde una variable.
! Todas las posiciones del arreglo son del mismo
tipo.
! El atributo length permite acceder al largo del
arreglo.
! Tratar de acceder una posicin inexistente del
arreglo genera una excepcin
ArrayIndexOutOfBoundsException.
01-08-12 Franco Guidi Polanco 89
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:
12 -3 4 55
4 700 -8 0
1 0 -2 14
Matriz de dos dimensiones
01-08-12 Franco Guidi Polanco 90
Caractersticas de una matriz
! 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 -3 4 55
4 700 -8 0
1 0 -2 14
Matriz mediciones
de datos enteros,
de dimensiones 3 x 4
mediciones
01-08-12 Franco Guidi Polanco 91
Convenciones respecto de las matrices
! 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.
12 -3 4 55
4 700 -8 0
1 0 -2 14
Filas
Columnas
Matriz de 3 filas
y 4 columnas
0 1 2 3
0

1

2
01-08-12 Franco Guidi Polanco 92
Creacin de Matrices
! Para crear matrices:
tipo[ ] [ ] variable = new tipo[ entero1 ] [ entero2 ]

Por ejemplo:
int[ ][ ] utilidad;
utilidad = new int[10][15];

double[ ][ ] uti = { {-1, 7, 15}, {3, 0, 2}, {4, -3, 12} };

! O mediante literales:
uti[1][2] contiene un 2.
01-08-12 Franco Guidi Polanco 93
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
12 -3 4 55
4 700 -8 0
1 0 -2 14
mediciones
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...
0

1

2
0 1 2 3
01-08-12 Franco Guidi Polanco 94
Particularidades de los arreglos
multidimensionales en Java
! 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 = { {-1,7,15}, {3, 2}, {4,-3,12}, {3} };

Es decir, lo anterior queda as
01-08-12 Franco Guidi Polanco 95
-1 7 15

int[ ][ ] nota = { {-1,7,15}, {3, 2}, {4,-3,12}, {3} };

3 2
4 -3 12
3



Matrices N-dimensionales
! Se pueden crear matrices de ms de dos
dimensiones.
! Ejemplo (un cubo):
int[][][] dato = new int[4][10][6];
01-08-12 Franco Guidi Polanco 96
Para conocer las dimensiones de una matriz
! Se utiliza la propiedad length.
! Ejemplo:
" Si datos es una matriz bidimensional:
datos.length : contiene el largo de la
primera dimensin (cantidad de filas)
datos[0].length : contiene el largo de la
fila 0 (cantidad de columnas).
01-08-12 Franco Guidi Polanco 97

You might also like