Download Introducción a la programación en Java

Document related concepts
no text concepts found
Transcript
Contenido
! Generalidades de Java
! Elementos de una aplicación simple
! Una aplicación simple interactiva
! Ingreso de datos por parámetros
! Consideraciones sobre tipos primitivos numéricos
! Uso de arreglos unidimensionales y
multidimensionales
Introducción a la Programación en Java
Franco Guidi Polanco
Escuela de Ingeniería Industrial
Pontificia Universidad Católica de Valparaíso, Chile
[email protected]
Act. 2012.08.01
Hola mundo… en Java
01-08-12
01-08-12
2
Otro ejemplo sencillo
public class Factorial {
public static void main( String arg[] ) {
int número, i=1, fact=1;
número = 3;
while( i <= número ) {
fact = fact * i;
i++;
}
System.out.println( "El factorial de " +
número + " es " + fact );
}
}
public class Saluda{
public static void main (String[] arg) {
System.out.println( "Hola mundo!" );
}
}
Franco Guidi Polanco
Franco Guidi Polanco
3
Franco Guidi Polanco
01-08-12
4
Desafío preliminar
Un tercer ejemplo
! Escribir un programa en Java que muestre la suma
de los números enteros contenidos entre 20 y 30,
con ambos límites incluidos.
Franco Guidi Polanco
01-08-12
import java.io.* ;
public class Decisión{
public static void main(String arg[]) throws IOException {
int número, i=1, fact=1;
BufferedReader lector = new BufferedReader( new
InputStreamReader(System.in ));
String ingresado;
System.out.println( "Ingrese número: " );
ingresado = lector.readLine( );
número = Integer.parseInt( ingresado );
if( número >= 4){
System.out.println( "Me gusta este número" );
System.out.println( "Es mayor o igual a cuatro");
}else{
System.out.println( "Odio el valor" + número );
System.out.println( "Es menor que cuatro” );
}
}
5
Finalemente, un cuarto ejemplo
01-08-12
01-08-12
6
Otros desafíos…
import java.io.* ;
public class Factorial2 {
public static void main(String arg[]) throws IOException {
int número, i=1, fact=1;
BufferedReader lector = new BufferedReader( new
InputStreamReader(System.in ));
String ingresado;
System.out.println( "Ingrese número: " );
ingresado = lector.readLine( );
número = Integer.parseInt( ingresado );
while( i <= número ) {
fact = fact * i;
i++;
}
System.out.println( "El factorial de " + número + " es "
+ fact );
}
}
Franco Guidi Polanco
Franco Guidi Polanco
7
! 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 número, y que
muestre la secuencia de números enteros positivos
desde el cero hasta el número ingresado.
Franco Guidi Polanco
01-08-12
8
¿Qué es JAVA?
! Java es:
"  un lenguaje de programación orientado a objetos;
y
"  una plataforma de ejecución para programas
escritos en lenguaje Java
Sección 1
! Java fue desarrollado por un equipo de
investigadores de SUN Microsystems.
Generalidades de Java
Franco Guidi Polanco
01-08-12
10
Desarrollo y ejecución de aplicaciones en otros
lenguajes
¿Para qué sirve JAVA?
! Java permite:
"  Construir aplicaciones: programas computacionales
que apoyan el trabajo o resuelven problemas
específicos de usuarios (funcionan stand-alone).
Program Hola;
begin
i :=1;
writeln( i )
end.
"  Construir applets: programas de menor envergadura
que se ejecutan al momento de cargar una página
WEB (son ejecutados por un browser).
Compilador
para
Windows
111000 1
1110001000111111111
00011101111011010
Compilador
para
Linux
0000110101100 00111
00011100010001000
0001110
Código fuente
Ejemplo de applet:
http://java.sun.com/applets/jdk/1.4/demo/applets/DrawTest/example1.html
Compilador
para
Solaris
11100000101100 00111
00000101000
0001111110111111010
Código objeto
Franco Guidi Polanco
01-08-12
11
Franco Guidi Polanco
01-08-12
12
Desarrollo y ejecución de aplicaciones en JAVA
Intérprete Java: Java Virtual Machine (JVM)
Intérprete
Java
Windows
Compilador
Java
Windows
Bytecode
101001010
001001001
111000 1
1110001000111111111
00011101111011010
public class
Hola {
public static
...
i=1;
System.out..
}
}
1111000011
110000
0000111100
001111
Compilador
Java
Linux
Bytecode
Intérprete
Java
Linux
JVM Windows
101011
1 11
1
0
0000110101100 00111
00011100010001000
0001110
Código fuente
Intérprete
Java
Solaris
Compilador
Java
Solaris
JVM Linux
JVM Solaris
001010
1011 1
011
1
111111
1101
1001
1
11100000101100 00111
00000101000
0001111110111111010
Franco Guidi Polanco
01-08-12
13
Componentes de Java
Franco Guidi Polanco
01-08-12
14
Java en distintos tamaños
! Java se compone de:
"  Compilador (Java-compiler)
"  Intérprete (Java)
"  Biblioteca de clases (Java API o Application
Programmer Interface)
"  Utilitarios de desarrollo (para debug, documentación,
etc.)
J2ME: Java 2
Micro Edition
J2SE: Java 2
Standard Edition
! Lo anterior se encuentra en el SDK (Software
Development Kit) distribuido por SUNMicrosystems (ahora Oracle)
Franco Guidi Polanco
01-08-12
J2EE: Java 2
Enterprise Edition
15
Franco Guidi Polanco
01-08-12
16
¿Cómo es una aplicación en Java?
! El programa Hola Mundo:
Código fuente
Sección 2
Compilación
Elementos de una aplicación simple en
Java
public class Saluda{
public static void main (String[] arg) {
System.out.println( “hello world” );
}
}
c:\>javac Saluda.java
c:\>
Ejecución
c:\>java Saluda
hello world
c:\>
Franco Guidi Polanco
Desarrollo y ejecución e aplicación en Java
public class Saluda{
public static void main (String[] arg) {
System.out.println( “hello world” );
}
}
Código
fuente
! Los tipos de datos utilizados por programas en
Java se clasifican en dos categorías:
Saluda.java
"  Primitivos: sirven para definir variables que guardan
valores numéricos, lógicos y caracteres unitarios.
JVM Windows
101011
1 11
1
hello
0
world
Franco Guidi Polanco
Saluda.class
101001010
001001001
JVM Linux
world
01-08-12
"  Clases e interfaces: sirven para definir variables que
almacenan tipos de datos estructurados y las funciones
asociadas.
JVM Solaris
001010
1011 1
011
hello
1
18
Tipos de datos en Java
Compilador Java
Bytecode
01-08-12
111111
1101
1001
1 hello
world
19
Franco Guidi Polanco
01-08-12
20
Tipos de datos primitivos
Tipos de datos primitivos (cont.)
! Java soporta los siguientes tipos de datos
primitivos:
! Familia de datos enteros: byte, short, int y long.
"  Entero
"  Punto flotante
"  Lógico
"  Caracter
Franco Guidi Polanco
01-08-12
21
Tipos de datos primitivos (cont.)
Almacena
Rango
float
Punto flotante 32 bit
7 dígitos significativos (10-46, 1038)
double
Punto flotante 64 bit
15 dígitos significativos (10-324, 10308)
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
-2.147.483.648 hasta 2.147.483.647
-9.223.372.036.854.755.808 hasta
9.223.372.036.854.755.807
Franco Guidi Polanco
01-08-12
22
Tipos de datos primitivos (cont.)
! Familia de datos punto flotante: float y double.
Tipo
Tipo
! Tipo caracter: char.
Tipo
Almacena
Rango
char
Carácter Unicode
! Tipo lógico: boolean.
Franco Guidi Polanco
01-08-12
23
Tipo
Almacena
Rango
boolean
Lógico
false y true
Franco Guidi Polanco
01-08-12
24
Operadores básicos para tipos primitivos
Tipo de dato String
! El String es un tipo de dato que permite trabajar
con cadenas de caracteres, por ejemplo:
! Operador de asignación:
=
Hola mundo , Mario Mora , 12/10/99 , A ,
.
! Operadores numéricos:
"  Binarios:
+ (suma), - (resta), * (multiplicación), / (división),
% (módulo o resto de la división entera)
! Es una clase, no un tipo primitivo, pero se utiliza
en forma muy similar a estos últimos.
"  Unarios:
++ (autoincremento), -- (autodecremento)
Franco Guidi Polanco
01-08-12
25
Operadores básicos para tipos primitivos (cont.)
01-08-12
26
Estructuras de control
! Decisión
! Operadores relacionales:
== (igual a)
!= (distinto de)
< (menor que), <= (menor o igual que),
> (mayor que), >= (mayor o igual que).
"  Simple:
"  Compleja:
if ( condición )
instrucción
if ( condición ) {
instrucción 1-1
instrucción 1-2
...
} else {
instrucción 2-1
instrucción 2-2
...
if ( condición )
instrucción 1
else
! Operadores lógicos:
&& (AND)
|| (OR)
! (NOT)
Franco Guidi Polanco
Franco Guidi Polanco
instrucción 2
}
01-08-12
27
Franco Guidi Polanco
01-08-12
28
Estructuras de control (cont.)
Identificadores
! JAVA es sensible a mayúsculas y minúsculas.
! Iteración
"  Mientras - repetir:
"  Hacer - mientras:
while ( condición )
instrucción
do
instrucción
while ( condición )
while ( condición ) {
instrucción 1
instrucción 2
...
}
do {
instrucción 1
instrucción 2
...
} while ( condición )
Franco Guidi Polanco
01-08-12
Es decir, JAVA considera distinto Nombre y nombre
! Un identificador válido consiste en una combinación
de de letras, dígitos y el carácter underscore. No
puede comenzar por un dígito.
Ejemplo:
- Válidos: edad, nota_Alumno, _peso, estadoSalud
- No válidos: 1ero, km/hora, Alumno(s), peso total
29
Franco Guidi Polanco
01-08-12
30
Algunos métodos (funciones) de utilidad
Declaración de variables
! Despliegue de datos:
! Una variable se declara según el formato:
System.out.print()
System.out.println()
tipo identificador [=valor] [, identificador [ = valor ] ]
Por ejemplo:
int a, b, c
double peso = 7.05
char letra = T
byte edad = 20, veces = 3
: escribe.
: escribe y cambia de línea.
Por ejemplo:
System.out.println( Hola )
System.out.println( Hola + nombre )
! Convención: el identificador de una variable
comenzará en minúsculas.
Por ejemplo: edad, edadAlumno, estadoCivil,
esElUltimo
Franco Guidi Polanco
01-08-12
31
Franco Guidi Polanco
01-08-12
32
Algunos métodos (funciones) de utilidad (cont.)
Comentarios y documentación
! Convertir de String a número :
! Se pueden incluir comentarios en el código usando
los siguientes marcadores:
Byte.parseByte()
Short.parseShort()
Integer.parseInt()
Float.parseFloat()
Double.parseDouble()
// comentario hasta fin de línea
/* comentario
de múltiples líneas
*/
/** comentario de documentación
@author
@exception
@see
@param
@return
@version
*/
Por ejemplo:
x = Integer.parseInt( 50 )
y = Integer.parseInt( dato ) + 40
Franco Guidi Polanco
01-08-12
33
Estructura de una aplicación simple
Franco Guidi Polanco
01-08-12
34
Ejemplo: programa no interactivo
Definición
/**
de la
Ejemplo de una aplicación
aplicación
(clase)
*/
public class IdentificadorClase {
public static void main (String[ ] idArreglo ) {
/**
Programa ejemplo para cálculo del Factorial de un número específico.
@author Franco Guidi
*/
public class Factorial1 {
Identificador
public static void main( String arg[] ) {de la clase (programa)
int número, i=1, fact=1;
número = 3;
Identificadores
while( i <= número ) {
Método main
de variables
fact = fact * i;
i++;
}
System.out.println( "El factorial de " + número + " es " + fact );
...
} // Fin método main
} // Fin clase
} // Fin método main
Método main
} // Fin clase
Franco Guidi Polanco
01-08-12
35
Franco Guidi Polanco
01-08-12
36
Estructura de la aplicación
Valores literales
/**
Programa ejemplo para cálculo del Factorial de un número específico.
Clase
@author Franco Guidi
*/
public class Factorial1 {
public static void main( String arg[] ) {
int número, i=1, fact=1;
número = 3;
while( i <= número ) {
fact = fact * i;
i++;
}
System.out.println( "El factorial de " + número + " es " + fact );
! Son valores que aparecen explícitamente en
el código 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 método main
Método main
} // Fin clase
Franco Guidi Polanco
01-08-12
37
Valores literales
01-08-12
public static void main( String arg[] ) {
int número, i=1, fact=1;
literal
número = 3;
while( i <= número ) {
literal
fact = fact * i;
literal i++;
}
System.out.println( "El factorial de " + número + " es " + fact );
} // Fin método main
! Se estructura como una clase que tiene un método
main.
! El nombre de la clase debe ser el mismo que el del
archivo que la contiene.
! La aplicación se compila invocando al compilador
Java junto con el nombre del archivo. Ejemplo:
c:\tmp>javac Factorial1.java
literal
Compilador
Franco Guidi Polanco
38
Características generales de una aplicación simple
/**
Programa ejemplo para cálculo del Factorial de un número específico.
@author Franco Guidi
literal
*/
public class Factorial1 {
} // Fin clase
Franco Guidi Polanco
01-08-12
39
Franco Guidi Polanco
01-08-12
Archivo
40
Características generales de una aplicación simple
! El programa puede ser invocado desde la línea de
comandos, invocando al intérprete Java junto con
el nombre de la aplicación. Ejemplo:
Sección 3
c:\tmp>java Factorial1
Intérprete
Franco Guidi Polanco
Ingreso de datos por parámetro
Programa
01-08-12
41
Traspaso de datos por parámetro
Traspaso de datos por parámetro
! El método main puede recibir parámetros desde la
línea de comandos del intérprete. Estos se
almacenan en las posiciones del arreglo de String
indicado en la declaración del método.
! Un arreglo es una colección de datos de un mismo tipo,
referenciada por un nombre. Cada dato ocupa una posición
dentro de la colección. La cantidad total de posiciones es
fija, y son accesibles por medio de un subíndice, que se
inicia en cero (0).
! Ejemplo: un arreglo de Strings llamado textos, de largo 4:
Parámetro
textos
hola
c:\tmp>java Factorial2 3
0
23
luis
1
2
2rwr
3
textos[0] contiene “hola”
textos[1] contiene “23”
textos[4] se encuentra indefinido (error al tratar de acceder)
Franco Guidi Polanco
01-08-12
43
Franco Guidi Polanco
01-08-12
44
Ejemplo: programa que acepta datos por
parámetro
Consideraciones importantes
! Java requiere la declaración 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 cálculo del Factorial de un número específico,
acepta el número proporcionado por parámetro.
@author Franco Guidi
*/
public class Factorial2 {
public static void main( String arg[] ) {
int número, i=1, fact=1;
número = Integer.parseInt( arg[0] );
while( i <= número ) {
fact = fact * i;
i++;
}
System.out.println( "El factorial de " + número + " es " + fact );
! Java distingue entre mayúsculas y minúsculas.
! Las expresiones matemáticas se evalúan con
precedencia de * y / sobre + y -.
} // Fin método main
} // Fin clase
Franco Guidi Polanco
01-08-12
45
Características generales de una aplicación simple
(cont.)
! Las instrucciones se organizan de acuerdo con las
estructuras de control:
"  secuencia
"  decisión : if( cond ) ... else ...
"  Iteración: do ... while( cond )
o
46
Recomendaciones generales
! Adoptar convención para definición de
identificadores:
while( cond ) ...
"  Variables: primeraLetraEnMinúscula
"  Clases: PrimeraLetraEnMayúscula
"  Métodos: primeraLetraEnMinúscula
! Los bloques son instrucciones agrupadas mediante
paréntesis de llave ( { y } ). Se utilizan en decisiones e
iteraciones, y no llevan punto y coma al final (después
de la llave de cierre).
01-08-12
01-08-12
! Documentar los programas.
! Las instrucciones se separan mediante un punto y coma
( ; ).
Franco Guidi Polanco
Franco Guidi Polanco
47
Franco Guidi Polanco
01-08-12
48
Una aplicación interactiva
Sección 4
Aplicaciones interactivas
(interfaz de consola)
Franco Guidi Polanco
Una aplicación interactiva
01-08-12
50
Importación de clases desde las Java API
Java API
package java.lang
class Factorial3
Clases de
java.lang se
importan
automáticamente
class String
class Long
class System
class Integer
class Math
class Byte
class Double
class Short
class Float
...
package java.io
import java.io.*
Otras clases deben
importarse explícitamente,
indicando el nombre del
package que las contiene
Franco Guidi Polanco
01-08-12
51
Franco Guidi Polanco
class InputStreamReader
class IOException
class BufferedReader
...
package . . .
01-08-12
52
Componentes de la Java API
Instanciación del objeto lector
! Algunos de los packages de la Java API
son:
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
datos del usuario
java.applet : construcción de applets.
Java.beans : desarrollo y reutilización de componentes.
java.awt : componentes visuales.
java.io : entrada y salida de datos.
java.lang : clases de uso común.
java.math : soporte para tipos numéricos con SQL.
java.net : componentes para trabajos en red.
java.rmi : invocación remota de métodos.
java.sql : soporte para JDBC.
java.security : firma de applets y codificación de datos.
java.text : manejo de distintos tipos de textos .
java.util : clases varias de utilidad.
Se crea una instancia de clase
aplicación
clases del
package java.io
objeto
lector
(Remitirse a documentación del JDK para una descripción detallada)
new
Franco Guidi Polanco
01-08-12
53
Uso del objeto lector
Franco Guidi Polanco
BufferedReader
InputStreamReader
01-08-12
54
Vocabulario mínimo
! Puede utilizarse las veces que sea necesario:
!  En la aplicación interactiva se observan las siguientes
instrucciones:
...
String dato;
int base, expo;
BufferedReader usuario = new BufferedReader
( new InputStreamReader( System.in ) );
...
int número;
String ingresado;
...
número = Integer.parseInt( ingresado );
...
System.out.println( Ingrese base : );
dato = usuario.readLine( ) ;
base = Integer.parseInt( dato );
System.out.println( Ingrese exponente : );
dato = usuario.readLine( ) ;
expo = Integer.parseInt( dato );
...
...
String ingresado;
BufferedReader lector = new BufferedReader
( new InputStreamReader( System.in ) );
...
ingresado = lector.readLine( ) ;
...
...
Franco Guidi Polanco
01-08-12
55
Franco Guidi Polanco
01-08-12
56
Vocabulario mínimo (cont.)
Vocabulario mínimo (cont.)
Argumento o parámetro actual
ingresado = lector.readLine( ) ;
número = Integer.parseInt( ingresado );
Objeto de la clase
BufferedReader ,
también llamado
instancia de la clase
BufferedReader
Método de la clase Integer
(los métodos llevan
paréntesis al final)
Clase Integer
El método parseInt de la clase Integer retorna el
equivalente a int de un String recicibido como parámetro.
Este valor es asignado a la variable número.
Franco Guidi Polanco
01-08-12
El método readLine() del objeto lector retorna un String
ingresado por el usuario. Este valor es asignado a la
variable ingresado.
57
Nota...
01-08-12
58
Se requiere:
! La importación de clases del package java.io.
...
! La indicación del sistema de control de excepciones.
int base, expo;
BufferedReader usuario = new BufferedReader
( new InputStreamReader( System.in ) );
! La instanciación de un objeto de la clase
BufferedReader.
...
System.out.println( Ingrese base : );
base = Integer.parseInt( usuario.readLine( ) );
System.out.println( Ingrese exponente : );
expo = Integer.parseInt( usuario.readLine( ) );
Franco Guidi Polanco
Franco Guidi Polanco
Aplicación interactiva: resumen
!  El valor retornado por un método puede usarse como
parámetro actual de otro método:
...
Método del objeto lector
(este método no recibe
parámetros, pero de todas
formas lleva paréntesis)
! La invocación del método readLine() del objeto de la
clase BufferedReader.
usuario.readLine() retorna un String
que es recibido como parámetro
por el método parseInt de la clase Integer
01-08-12
59
Franco Guidi Polanco
01-08-12
60
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 métodos que estas
proveen.
! Existen, sin embargo, clases cuyos métodos pueden
utilizarse sin haber instanciado objetos.
Franco Guidi Polanco
01-08-12
Sección 5
Consideraciones sobre tipos primitivos
numéricos
61
Cambio del tipo de un valor: promoción
automática
Tipos de variables y valores: regla general
! Las variables almacenan datos del mismo tipo que
han sido definidas.
! Promoción automática de tipos (conversión
por ensanchamiento): una variable de un tipo de
dato puede recibir un valor de otro tipo si:
pero...
"  los dos tipos son compatibles(*), y
! Bajo consideraciones especiales las variables
pueden recibir datos de otros tipos:
"  el tipo de destino es de mayor jerarquía que el
tipo de origen
"  Promoción automática de tipos
"  Casting
(*)Tipos compatibles: los tipos numéricos son compatibles
entre sí.
Franco Guidi Polanco
01-08-12
63
Franco Guidi Polanco
01-08-12
64
Cambio del tipo de un valor: promoción
automática
Cambio del tipo de un valor: casting
! Casting: permite convertir un valor de un tipo de mayor
jerarquía a otro de menor jerarquía (funciona si y sólo si
el tipo de menor jerarquía puede contener al valor
convertido). El casting tiene prioridad sobre los
operadores +,-,* y /.
! Ejemplo de promoción automática de tipos: dato
tipo int es almacenado en una variable double.
Formato: var1 = (tipo de var1) var2
int x = 4;
4
x
double y;
y
4.0
y = x;
4
y
Franco Guidi Polanco
casting
x
01-08-12
65
! Regla general: La operación de dos números de
un mismo tipo, genera un resultado también del
mismo tipo.
! Se exceptúan de la regla anterior las operaciones
sobre datos tipo byte o short.
Franco Guidi Polanco
01-08-12
int a=10, b=4, c;
c = a + b ;
int a=10, b=4, c;
c = a / b ;
14
2
byte i=2, j=3, k;
i
+
j ;
int
byte i=2, j=3;
int k;
k = i + j ;
5
5
int
Error: no puede almacenarse
un int en una variable byte.
int
01-08-12
66
! La operación de dos datos de tipo byte o short,
genera como resultado un int.
k =
Franco Guidi Polanco
Incorrecto: el máximo valor que puede contener
una variable byte es 127.
La variable i queda con valor incorrecto.
Evaluación de expresiones: promoción
automática de byte y short
Evaluación de expresiones numéricas
int
int j=200;
byte i;
i = (byte) j;
double j=1.0;
int i;
i = (int) j;
67
Franco Guidi Polanco
01-08-12
Correcto
68
Evaluación de expresiones: resultado de una
operación
Ejemplos de resultados de operaciones
! El resultado de cualquier expresión es del tipo
correspondiente al del operando de mayor
jerarquía, en el orden:
" 
" 
" 
" 
double
float
long
int
Automáticamente
es promovido a double
antes de realizarse
la operación.
Franco Guidi Polanco
int i=10, k;
double j=2.0;
k =
i
/
! Suponer variable x definida como double:
x
x
x
x
x
double
j ;
// x toma valor 2.0 double
// x toma valor 2.5 double
// x toma valor 2.5 double
// x toma valor 2.5 double
// x toma valor 2.0 double
Error: no puede almacenarse
un double en una variable int.
01-08-12
69
Franco Guidi Polanco
01-08-12
70
Precisión de los cálculos
! Las operaciones aritméticas con tipos enteros
(byte, short, int o long), se realizan con alta
precisión.
!  Suponer variable x definida como float:
x = 10.0f / 4;
x = (float) 10 / 4;
x = (double) (10/4);
10 / 4;
10.0 / 4;
10.0f / 4;
(double) 10 / 4;
(double) (10/4);
5.0
Ejemplos de resultados de operaciones (cont.)
x = 10 / 4;
x = 10.0 / 4;
=
=
=
=
=
// x toma valor 2.0 float
// Error: x no puede
almacenar valor 2.5 double
! Las operaciones aritméticas con tipos de punto
flotante (float o double), se realizan con menor
precisión.
// x toma valor 2.5 float
// x toma valor 2.5 float
// Error: x no puede almacenar
valor 2.0 double
Ejemplos*:
0.1 sumado 10 veces:
0.01 sumado 100 veces:
0.001 sumado 1000 veces:
0.9999999999999999
1.0
1.0000000000000007
(*) pruebas efectuadas con variable double)
Franco Guidi Polanco
01-08-12
71
Franco Guidi Polanco
01-08-12
72
Precisión de los cálculos (cont.)
! Las operaciones aritméticas con valores float o double
fallan en la evaluación de igualdades:
if( var1 == var2 )
System.out.println(
else
System.out.println(
Son iguales
);
No son iguales
Sección 6
);
! Solución: determinar si la diferencia en valor absoluto de
las variables es menor que un error predeterminado:
Uso de arreglos
con tipos primitivos
if( Math.abs( var1 - var2 )< 0.0000001 )
System.out.println( Son iguales );
else
System.out.println( No son iguales );
Franco Guidi Polanco
01-08-12
73
Arreglos en Java
Identificación y tamaño 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 posición indexada.
! Un arreglo de largo N, tiene posiciones indexadas
mediante enteros desde 0 hasta N-1.
"  Ejemplos:
Arreglo de bytes:
3 27 50
1
0
4
nombres
Ana
Arreglo de Strings:
Ana
Casa
Auto
12
Posición:
$#!
Franco Guidi Polanco
50.4
01-08-12
0.0
Juan
Pedro
1
2
Pía
3
Mario
4
! El máximo largo posible para un arreglo corresponde al
mayor valor permitido para un int.
Arreglo de doubles:
3.0
0
-4.3
75
Franco Guidi Polanco
01-08-12
76
Pasos para crear un arreglo en Java
Creación de un arreglo
1º: Definir una variable que identifique al arreglo, indicando
la naturaleza de los datos que se almacenarán:
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
01-08-12
77
Ejemplos de creación de arreglos
Franco Guidi Polanco
01-08-12
78
Forma abreviada para crear arreglos
! Arreglo de byte de largo 1000:
! La definición de variable, instanciación del arreglo
y su asignación a la variable puede realizarse en
una sola instrucción:
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
01-08-12
79
Franco Guidi Polanco
01-08-12
80
Otra forma para instanciar arreglos
Acceso a las posiciones de un arreglo
! Se deben accesar mediante un subíndice de tipo
entero (byte, short, int o long):
! También es posible instanciar arreglos
escribiéndolos como literales en el código fuente:
...
int i;
long[] números;
int[] nota = { 23, 14, 55, 18 } ;
números = new long[ 20 ];
...
i=0;
while( i < 20 ){
números[ i ] = i ;
i++;
}
...
Instancia un arreglo de enteros de largo 4.
Franco Guidi Polanco
01-08-12
81
Recorrer un arreglo
82
! Tratar de accesar una posición inexistente del
arreglo, por ejemplo, la posición 10 de un arreglo
de largo 10.
Cuando lo anterior ocurre, se genera en tiempo de
ejecución una excepción denominada:
ArrayIndexOutOfBoundsException
...
int i;
long[] números;
números = new long[ 20 ];
...
i=0;
while( i < números.length ) {
System.out.println( números[ i ] );
i++;
}
...
01-08-12
01-08-12
Error típico 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
83
Franco Guidi Polanco
01-08-12
84
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
! El arreglo de parámetros declarado al inicio
del método main, es instanciado por Java al
momento de ejecutarse la aplicación.
! El arreglo se instancia con un largo igual a la
cantidad de parámetros traspasados en la
línea de comandos.
+ nota.length );
! El arreglo debe ser declarado como arreglo de
Strings.
Las propiedades o atributos se consultan sin paréntesis al final,
a diferencia de los métodos.
Franco Guidi Polanco
01-08-12
85
Resumen de arreglos
01-08-12
86
! Los arreglos son referenciados desde una variable.
! Todas las posiciones del arreglo son del mismo
tipo.
! La instanciación ocurre de tres formas:
"  cuando se utiliza el operador new.
"  cuando el arreglo es declarado literalmente.
"  cuando se ejecuta la aplicación, en el caso
particular del arreglo de parámetros del
método main.
01-08-12
Franco Guidi Polanco
Resumen de arreglos
! Los arreglos se instancian.
Franco Guidi Polanco
Consideraciones respecto del arreglo de
parámetros
! El atributo length permite acceder al largo del
arreglo.
! Tratar de acceder una posición inexistente del
arreglo genera una excepción
ArrayIndexOutOfBoundsException.
87
Franco Guidi Polanco
01-08-12
88
Matrices
Características de una matriz
! Un arreglo puede tener más de una dimensión.
! Los arreglos de más de una dimensión se
denominan matrices.
! El caso más común es la matriz bidimensional:
12
-3
4
55
4
700
-8
0
1
0
-2
14
! 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 además por sus dimensiones.
! Las dimensiones de una matriz no se pueden
modificar.
! Ejemplo:
Matriz de dos dimensiones
Franco Guidi Polanco
mediciones
01-08-12
89
Convenciones respecto de las matrices
12
-3
4
55
Filas 1
4
700
-8
0
2
1
0
-2
14
Franco Guidi Polanco
01-08-12
-3
4
55
4
700
-8
0
1
0
-2
14
Franco Guidi Polanco
Matriz mediciones
de datos enteros,
de dimensiones 3 x 4
01-08-12
90
Creación de Matrices
! En el caso de las matrices de dos dimensiones,
llamaremos a la primera dimensión “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
0
12
Matriz de 3 filas
y 4 columnas
! Para crear matrices:
tipo[ ] [ ] variable = new tipo[ entero1 ] [ entero2 ]
Por ejemplo:
int[ ][ ] utilidad;
utilidad = new int[10][15];
! O mediante literales:
double[ ][ ] uti = { {-1, 7, 15}, {3, 0, 2}, {4, -3, 12} };
uti[1][2] contiene un 2.
91
Franco Guidi Polanco
01-08-12
92
Particularidades de los arreglos
multidimensionales en Java
Acceso a posiciones
! Las posiciones de una matriz se acceden
independientemente (una a una).
! Se utiliza un subíndice para especificar cada dimensión
! En una matriz de dos dimensiones, el primer subíndice
representa la fila, y el segundo, la columna.
! Ejemplo
mediciones
0
1
0
12
-3
2
4
3
55
1
4
700
-8
0
2
1
0
-2
14
Franco Guidi Polanco
! 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:
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...
01-08-12
int[ ][ ] nota = { {-1,7,15}, {3, 2}, {4,-3,12}, {3} };
93
Es decir, lo anterior queda así…
7
3
2
4
-3
01-08-12
94
Matrices N-dimensionales
! Se pueden crear matrices de más de dos
dimensiones.
int[ ][ ] nota = { {-1,7,15}, {3, 2}, {4,-3,12}, {3} };
-1
Franco Guidi Polanco
! Ejemplo (un cubo):
15
int[][][] dato = new int[4][10][6];
12
3
Franco Guidi Polanco
01-08-12
95
Franco Guidi Polanco
01-08-12
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 dimensión (cantidad de filas)
• datos[0].length : contiene el largo de la
fila 0 (cantidad de columnas).
Franco Guidi Polanco
01-08-12
97