25
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 01-08-12 Franco Guidi Polanco 2 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 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 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 ); } }

Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

  • Upload
    lenhu

  • View
    220

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

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 01-08-12 Franco Guidi Polanco 2

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

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

Page 2: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

Desafío preliminar

! Escribir un programa en Java que muestre la suma de los números enteros contenidos entre 20 y 30, con ambos límites incluidos.

01-08-12 Franco Guidi Polanco 5

Un tercer ejemplo

01-08-12 Franco Guidi Polanco 6

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” );

} }

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

Otros desafíos…

! 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.

01-08-12 Franco Guidi Polanco 8

Page 3: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

Sección 1

Generalidades de Java

01-08-12 Franco Guidi Polanco 10

¿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

! 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 específicos de usuarios (funcionan stand-alone).

"  Construir applets: programas de menor envergadura que se ejecutan al momento de cargar una página 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 ejecución de aplicaciones en otros lenguajes

Compilador para

Windows

Compilador para Linux

Compilador para

Solaris

Código fuente

111000 1 1110001000111111111 00011101111011010

0000110101100 00111 00011100010001000 0001110

11100000101100 00111 00000101000 0001111110111111010

Program Hola; begin i :=1; writeln( i ) end.

Código objeto

Page 4: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

01-08-12 Franco Guidi Polanco 13

public class Hola { public static ... i=1; System.out.. } }

1111000011110000 0000111100001111

Bytecode

Compilador Java

Windows

Compilador Java Linux

Compilador Java

Solaris

Intérprete Java

Windows

Intérprete Java Linux

Intérprete Java

Solaris

Código fuente

111000 1 1110001000111111111 00011101111011010

0000110101100 00111 00011100010001000 0001110

11100000101100 00111 00000101000 0001111110111111010

Desarrollo y ejecución de aplicaciones en JAVA

01-08-12 Franco Guidi Polanco 14

Intérprete 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) "  Intérprete (Java) "  Biblioteca de clases (Java API o Application

Programmer Interface) "  Utilitarios de desarrollo (para debug, documentación,

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 tamaños

J2EE: Java 2 Enterprise Edition

J2SE: Java 2 Standard Edition

J2ME: Java 2 Micro Edition

Page 5: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

Sección 2

Elementos de una aplicación simple en Java

01-08-12 Franco Guidi Polanco 18

¿Cómo es una aplicación 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:\>

Código fuente

c:\>javac Saluda.java c:\>

Compilación

Ejecución

01-08-12 Franco Guidi Polanco 19

Desarrollo y ejecución e aplicación 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

Código 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 categorías:

"  Primitivos: sirven para definir variables que guardan valores numéricos, lógicos y caracteres unitarios.

"  Clases e interfaces: sirven para definir variables que almacenan tipos de datos estructurados y las funciones asociadas.

Page 6: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

01-08-12 Franco Guidi Polanco 21

Tipos de datos primitivos

! Java soporta los siguientes tipos de datos primitivos:

"  Entero "  Punto flotante "  Lógico "  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 hasta9.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 dígitos significativos (10-46, 1038)

double Punto flotante 64 bit 15 dígitos significativos (10-324, 10308)

! 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 Carácter Unicode

! Tipo lógico: boolean.

Tipo Almacena Rango

boolean Lógico false y true

Page 7: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

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 básicos para tipos primitivos

! Operador de asignación: =

! Operadores numéricos:

"  Binarios: + (suma), - (resta), * (multiplicación), / (división), % (módulo o resto de la división entera)

"  Unarios: ++ (autoincremento), -- (autodecremento)

01-08-12 Franco Guidi Polanco 27

Operadores básicos para tipos primitivos (cont.)

! Operadores relacionales: == (igual a) != (distinto de) < (menor que), <= (menor o igual que), > (mayor que), >= (mayor o igual que).

! Operadores lógicos: && (AND) || (OR) ! (NOT)

01-08-12 Franco Guidi Polanco 28

Estructuras de control

! Decisión "  Simple:

if ( condición ) instrucción

if ( condición )

instrucción 1 else

instrucción 2

"  Compleja:

if ( condición ) {

instrucción 1-1 instrucción 1-2

... } else {

instrucción 2-1 instrucción 2-2 ...

}

Page 8: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

01-08-12 Franco Guidi Polanco 29

Estructuras de control (cont.)

! Iteración "  Mientras - repetir:

while ( condición ) instrucción

while ( condición ) { instrucción 1 instrucción 2 ...

}

"  Hacer - mientras:

do instrucción

while ( condición )

do { instrucción 1 instrucción 2 ...

} while ( condición )

01-08-12 Franco Guidi Polanco 30

Identificadores

! JAVA es sensible a mayúsculas y minúsculas. 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

01-08-12 Franco Guidi Polanco 31

Declaración de variables

! Una variable se declara según 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

! Convención: el identificador de una variable comenzará en minúsculas. Por ejemplo: edad, edadAlumno, estadoCivil, esElUltimo

01-08-12 Franco Guidi Polanco 32

Algunos métodos (funciones) de utilidad

! Despliegue de datos: System.out.print() : escribe. System.out.println() : escribe y cambia de línea. Por ejemplo:

System.out.println( �Hola� ) System.out.println( �Hola � + nombre )

Page 9: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

01-08-12 Franco Guidi Polanco 33

Algunos métodos (funciones) de utilidad (cont.)

! Convertir de String a número : 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 documentación

! Se pueden incluir comentarios en el código usando los siguientes marcadores:

// comentario hasta fin de línea /* comentario

de múltiples líneas */ /** comentario de documentación

@author @exception @see @param @return @version

*/

01-08-12 Franco Guidi Polanco 35

Estructura de una aplicación simple

/** Ejemplo de una aplicación */ public class IdentificadorClase { public static void main (String[ ] idArreglo ) { ... } // Fin método main } // Fin clase

Definición de la

aplicación (clase)

Método main

01-08-12 Franco Guidi Polanco 36

/** Programa ejemplo para cálculo del Factorial de un número específico. @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 ); } // Fin método main } // Fin clase

Ejemplo: programa no interactivo

Identificadores de variables

Identificador de la clase (programa)

Método main

Page 10: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

01-08-12 Franco Guidi Polanco 37

Estructura de la aplicación

/** Programa ejemplo para cálculo del Factorial de un número específico. @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 ); } // Fin método main } // Fin clase

Clase

Método main

01-08-12 Franco Guidi Polanco 38

Valores literales

! 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

01-08-12 Franco Guidi Polanco 39

Valores literales

/** Programa ejemplo para cálculo del Factorial de un número específico. @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 ); } // Fin método main } // Fin clase literal

literal

literal literal

literal

01-08-12 Franco Guidi Polanco 40

Características generales de una aplicación simple

! 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

Compilador Archivo

Page 11: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

01-08-12 Franco Guidi Polanco 41

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:

c:\tmp>java Factorial1

Intérprete Programa

Sección 3

Ingreso de datos por parámetro

01-08-12 Franco Guidi Polanco 43

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.

c:\tmp>java Factorial2 3

Parámetro

01-08-12 Franco Guidi Polanco 44

Traspaso de datos por parámetro

! 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:

�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)

Page 12: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

01-08-12 Franco Guidi Polanco 45

Ejemplo: programa que acepta datos por parámetro

/** 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 ); } // Fin método main } // Fin clase

01-08-12 Franco Guidi Polanco 46

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�.

! Java distingue entre mayúsculas y minúsculas.

! Las expresiones matemáticas se evalúan con precedencia de * y / sobre + y -.

01-08-12 Franco Guidi Polanco 47

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 while( cond ) ...

! Las instrucciones se separan mediante un punto y coma ( ; ).

! 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 Franco Guidi Polanco 48

Recomendaciones generales

! Documentar los programas.

! Adoptar convención para definición de identificadores:

"  Variables: primeraLetraEnMinúscula "  Clases: PrimeraLetraEnMayúscula "  Métodos: primeraLetraEnMinúscula

Page 13: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

Sección 4

Aplicaciones �interactivas� (interfaz de consola)

01-08-12 Franco Guidi Polanco 50

Una aplicación interactiva

�����/,%/�*��#(#*-),�-�/��!:)!2),�"#)���!1,/'�)�"#�2+�+>*#/,�#0-#!<$'!,���0,)'!'1��"�1,0�#+�$,/*��'+1#/�!1'3������21&,/��/�+!,��2'"'���'*-,/1���(�3��',��� �-2 )'!�!)�00���!1,/'�)��7�����-2 )'!�01�1'!�3,'"�*�'+���1/'+%��/%������1&/,40������5!#-1',+�7���������'+1�+>*#/,��'���$�!1� ����������2$$#/#"�#�"#/�)#!1,/���+#4���2$$#/#"�#�"#/��+#4��+-21�1/#�*�#�"#/���601#*�'+���� ����������1/'+%�'+%/#0�", ����������601#*�,21�-/'+1)+����+%/#0#�+>*#/,�-�/��!:)!2),�"#�$�!1,/'�)����� ���������'+%/#0�",���)#!1,/�/#�"�'+#���� ���������+>*#/,����+1#%#/�-�/0#�+1��'+%/#0�",�� ���������4&')#��'����+>*#/,���7������������$�!1���$�!1���' ������������'�� ���������8����������601#*�,21�-/'+1)+����)�$�!1,/'�)�"#�����+>*#/,�����#0�����$�!1�� �����8���'+�*;1,",�*�'+�8���'+�!)�0#�

01-08-12 Franco Guidi Polanco 51

Una aplicación interactiva

�����/,%/�*��#(#*-),�-�/��!:)!2),�"#)���!1,/'�)�"#�2+�+>*#/,�#0-#!<$'!,���0,)'!'1��"�1,0�#+�$,/*��'+1#/�!1'3������21&,/��/�+!,��2'"'���'*-,/1���(�3��',��� �-2 )'!�!)�00���!1,/'�)��7�����-2 )'!�01�1'!�3,'"�*�'+���1/'+%��/%������1&/,40������5!#-1',+�7���������'+1�+>*#/,��'���$�!1� ����������2$$#/#"�#�"#/�)#!1,/���+#4���2$$#/#"�#�"#/��+#4��+-21�1/#�*�#�"#/���601#*�'+���� ����������1/'+%�'+%/#0�", ����������601#*�,21�-/'+1)+����+%/#0#�+>*#/,�-�/��!:)!2),�"#�$�!1,/'�)����� ���������'+%/#0�",���)#!1,/�/#�"�'+#���� ���������+>*#/,����+1#%#/�-�/0#�+1��'+%/#0�",�� ���������4&')#��'����+>*#/,���7������������$�!1���$�!1���' ������������'�� ���������8����������601#*�,21�-/'+1)+����)�$�!1,/'�)�"#�����+>*#/,�����#0�����$�!1�� �����8���'+�*;1,",�*�'+�8���'+�!)�0#�

�)�, (#1,��)#!1,/��0#�#+!�/%��"#�)##/�"�1,0�"#)��202�/',����/��)##/�'+3,!��#)�*;1,",�/#�"�'+#�������

�#/*'1#�!/#�/�#)�, (#1,�"#�)��!)�0#���2$$#/#"�#�"#/�'"#+1'$'!�",�!,*,��

!,+�#)�+,* /#���)#!1,/���.2#�0#�#+!�/%�/:�"#�)##/���

�+"'!������3���"=+"#�#+!,+1/�/�)�0��!)�0#0�/#.2#/'"�0��

�# #�#5-)'!'1�/0#��.2;�0#�&�/:�!,+�#3#+12�)#0��

#//,/#0�"#����

01-08-12 Franco Guidi Polanco 52

Importación 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 automática-

mente

Otras clases deben importarse explícitamente, indicando el nombre del package que las contiene

package . . .

Page 14: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

01-08-12 Franco Guidi Polanco 53

Componentes de la Java API

! Algunos de los packages de la Java API son: "  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.

(Remitirse a documentación del JDK para una descripción detallada)

01-08-12 Franco Guidi Polanco 54

Instanciación del objeto lector

clases del package java.io

aplicación

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 mínimo

! En la aplicación interactiva se observan las siguientes instrucciones:

. . . int número; String ingresado; . . . número = Integer.parseInt( ingresado ); . . .

. . . String ingresado; BufferedReader lector = new BufferedReader ( new InputStreamReader( System.in ) ); . . . ingresado = lector.readLine( ) ; . . .

Page 15: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

01-08-12 Franco Guidi Polanco 57

Vocabulario mínimo (cont.)

�Clase Integer� �Método de la clase Integer�

(los métodos llevan paréntesis al final)

número = Integer.parseInt( ingresado );

�Argumento� o �parámetro actual�

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.

01-08-12 Franco Guidi Polanco 58

Vocabulario mínimo (cont.)

ingresado = lector.readLine( ) ;

�Objeto de la clase BufferedReader�, también llamado �instancia de la clase

BufferedReader�

�Método del objeto lector� (este método no recibe

parámetros, pero de todas formas lleva paréntesis)

El método 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 método puede usarse como parámetro actual de otro método:

usuario.readLine() retorna un String que es recibido como parámetro

por el método parseInt de la clase Integer

01-08-12 Franco Guidi Polanco 60

Aplicación interactiva: resumen

Se requiere: ! La importación de clases del package java.io.

! La indicación del sistema de control de excepciones.

! La instanciación de un objeto de la clase BufferedReader.

! La invocación del método readLine() del objeto de la clase BufferedReader.

'*-,/1�(�3��',��� �

�2$$#/#"�#�"#/�5���+#4��2$$#/#"�#�"#/�������������������������������������������������������+#4��+-21�1/#�*�#�"#/���601#*�'+���� �

-2 )'!�01�1'!�3,'"�*�'+���1/'+%�����/%��1&/,40����5!#-1',+�7������

+,* /#���5�/#�"�'+#��� �

Page 16: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

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 métodos que estas proveen.

! Existen, sin embargo, clases cuyos métodos pueden utilizarse sin haber instanciado objetos.

Sección 5

Consideraciones sobre tipos primitivos numéricos

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: "  Promoción automática de tipos "  Casting

01-08-12 Franco Guidi Polanco 64

Cambio del tipo de un valor: promoción automática

! 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:

"  los dos tipos son compatibles(*), y "  el tipo de destino es �de mayor jerarquía� que el

tipo de origen

(*)Tipos compatibles: los tipos numéricos son compatibles entre sí.

Page 17: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

01-08-12 Franco Guidi Polanco 65

Cambio del tipo de un valor: promoción automática

int x = 4; double y; y = x;

4 x y

4.0 y

4 x

! Ejemplo de promoción automática 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 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 /. 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 máximo 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 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.

Evaluación de expresiones numéricas

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

Evaluación de expresiones: promoción automática de byte y short

! La operación 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

Page 18: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

01-08-12 Franco Guidi Polanco 69

Evaluación de expresiones: resultado de una operación

! El resultado de cualquier expresión es del tipo correspondiente al del operando de mayor jerarquía, 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 Automáticamente es promovido a double

antes de realizarse la operación.

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

Precisión de los cálculos

! Las operaciones aritméticas con tipos enteros (byte, short, int o long), se realizan con alta precisión.

! Las operaciones aritméticas con tipos de punto flotante (float o double), se realizan con menor precisión.

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)

Page 19: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

01-08-12 Franco Guidi Polanco 73

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( �Son iguales� ); else System.out.println( �No son iguales� );

! Solución: 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� );

Sección 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

Identificación y tamaño de un arreglo

! 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.

! El máximo largo posible para un arreglo corresponde al mayor valor permitido para un int.

�Juan� �Pía��� �Mario� �Pedro� �Ana��

nombres

Posición: 0 1 2 3 4

Page 20: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

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 almacenarán:

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

Creación 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 creación 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 definición de variable, instanciación del arreglo y su asignación a la variable puede realizarse en una sola instrucción:

tipo[ ] variable = new tipo[ entero ]

double[] nota = new double[4];

Ejemplo:

Page 21: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

01-08-12 Franco Guidi Polanco 81

Otra forma para instanciar arreglos

! También es posible instanciar arreglos escribiéndolos como literales en el código 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[] números; números = new long[ 20 ]; ... i=0; while( i < 20 ){ números[ i ] = i ; i++; } ...

! Se deben accesar mediante un subíndice de tipo entero (byte, short, int o long):

01-08-12 Franco Guidi Polanco 83

Recorrer un arreglo

... int i; long[] números; números = new long[ 20 ]; ... i=0; while( i < números.length ) { System.out.println( números[ 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 típico en el manejo de arreglos

! 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

Page 22: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

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 paréntesis al final, a diferencia de los métodos.

01-08-12 Franco Guidi Polanco 86

Consideraciones respecto del arreglo de parámetros

! 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.

! El arreglo debe ser declarado como arreglo de Strings.

01-08-12 Franco Guidi Polanco 87

Resumen de arreglos

! Los arreglos se instancian.

! 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 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 posición inexistente del arreglo genera una excepción ArrayIndexOutOfBoundsException.

Page 23: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

01-08-12 Franco Guidi Polanco 89

Matrices

! 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

Matriz de dos dimensiones

01-08-12 Franco Guidi Polanco 90

Características 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 además 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 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.

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

Creación 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.

Page 24: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

01-08-12 Franco Guidi Polanco 93

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

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 más de dos dimensiones.

! Ejemplo (un cubo):

int[][][] dato = new int[4][10][6];

01-08-12 Franco Guidi Polanco 96

Page 25: Banco de Chile - Transferenciaeii.ucv.cl/pers/guidi/cursos/ti/Java-Introduccion.pdf · !Escribir un programa en Java que muestre la suma de los números enteros contenidos ... programa

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).

01-08-12 Franco Guidi Polanco 97