java atraves de ejemplos-necesario

Upload: barto667

Post on 07-Apr-2018

232 views

Category:

Documents


1 download

TRANSCRIPT

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    1/339

    PRLOGO

    Introduccin

    Java a travs de ejemplos presenta los conceptos bsicos del lenguaje deprogramacin Java y muestra sus posibilidades ms relevantes para el desarrollo deaplicaciones. El libro se centra en la explicacin detallada de los fundamentos dellenguaje, evitando los temas de carcter especializado.

    La didctica de esta publicacin se basa en el aprendizaje guiado medianteejemplos comentados y grficos de apoyo a las explicaciones, evitndose lasaclaraciones puramente tericas y el uso de un nivel de detalle excesivo en lainformacin suministrada.

    Este libro, por tanto, resulta especialmente adecuado para los lectores que noposeen unos conocimientos previos del lenguaje o para aquellos cuyo principal

    objetivo es adquirir los fundamentos de Java para, posteriormente, poder afrontarcon una base slida el aprendizaje de aspectos especficos tales como lascomunicaciones, acceso a bases de datos, presentaciones multimedia, etc.

    Se incluyen dos apndices con ms de 500 preguntas y sus respuestasbasadas en los conceptos fundamentales de Java. Estas cuestiones permiten que ellector pueda comprobar la correccin y completitud con los que va asimilando lasdiferentes materias.

    Los contenidos del libro se han dividido en 9 captulos que contienen 38lecciones; cada una de estas lecciones forma una unidad de estudio que convieneafrontar de manera individualizada. Para facilitar la comprensin de estas unidades,las lecciones se han diseado con un tamao reducido: de unas 8 pginas portrmino medio.

    En el siguiente apartado se presenta una relacin de las lecciones, agrupadasen captulos y con la referencia del nmero de pgina donde comienza cada una.

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    2/339

    XIV JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    Lecciones incluidas en la publicacin

    Captulo 1: toma de contacto, variables, tipos de datos y operadoresLECCIN 1: Instalacin del entorno de desarrolloLECCIN 2: Primer programa en java: Hola mundoLECCIN 3: Variables y tipos de datosLECCIN 4: Operadores

    Captulo 2: estructuras de control

    LECCIN 5: El bucle FORLECCIN 6: El bucle WHILELECCIN 7: La instruccin condicional IFLECCIN 8: La instruccin condicional SWITCHLECCIN 9: Ejemplos

    Captulo 3: mtodos y estructuras de datosLECCIN 10: MtodosLECCIN 11: StringsLECCIN 12: Matrices (arrays, vectores)LECCIN 13: Ejemplos de programacin

    Captulo 4: programacin orientada a objetos usando clasesLECCIN 14: Definicin de clases e instancias LECCIN 15: Sobrecarga de mtodos y constructores LECCIN 16: EjemplosLECCIN 17: Clases utilizadas como Parmetros

    LECCIN 18: Propiedades y mtodos de clase y de instancia LECCIN 19: Paquetes y atributos de accesoLECCIN 20: Ejemplo: mquina expendedora

    Captulo 5: programacin orientada a objetos usando herenciaLECCIN 21: HerenciaLECCIN 22: EjemplosLECCIN 23: Polimorfismo LECCIN 24: Clases abstractas e interfaces

    Captulo 6: excepcionesLECCIN 25: Excepciones predefinidasLECCIN 26: Excepciones definidas por el programador

    Captulo 7: interfaz grfico de usuarioLECCIN 27: Creacin de ventanas LECCIN 28: Paneles y objetos de disposicin (layouts)

    LECCIN 29: Etiquetas, campos y reas de textoLECCIN 30: Cajas de verificacin, botones de radio y listas

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    3/339

    JESS BOBADILLA SANCHO ([email protected]) PRLOGO XV

    LECCIN 31: Diseo de formularios

    LECCIN 32: Dilogos y mensCaptulo 8: eventos

    LECCIN 33: Mecanismo de eventos en javaLECCIN 34: Eventos de ratn y de movimiento de ratnLECCIN 35: Eventos de teclado y de ventanaLECCIN 36: Eventos de accin, enfoque y elemento

    Captulo 9: aplicaciones de ejemploLECCIN 37: Ejemplo: calculadoraLECCIN 38: Ejemplo: editor

    Planificacin en el estudio de las lecciones

    01 0902 03 04 10

    05 06

    07

    08

    11

    12

    13 14 15 16 17 18 19

    20 21 22 23 24 25 26 27 28

    29

    30

    31 32 33 34

    36

    36

    37 38

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    4/339

    XVI JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    El diagrama presentado en la pgina anterior nos muestra la secuencia de las

    lecciones contenidas en el libro. El estudio de las lecciones que presentan fondo decolor blanco es importante para conseguir un nivel adecuado de conocimientos en ellenguaje Java.

    Las lecciones del grfico que tienen fondo gris pueden ser omitidas en casode necesidad; esto es posible debido a que se corresponden con ejercicios deconsolidacin de los temas anteriores o porque se refieren a caractersticas dellenguaje que se utilizan con menos frecuencia. En cualquier caso, el estudio de estaslecciones resulta importante para conseguir una mejor asimilacin de los conceptos

    explicados, por lo que es muy conveniente acudir a ellas una vez comprendidas laslecciones que les preceden.

    Los cuadrados grises contienen lecciones que pueden ser abordadas encualquier orden, por ejemplo, despus de la leccin 10, podemos estudiar en primerlugar la 12 y despus la 11 o viceversa.

    Esperamos que estas indicaciones puedan ayudar a ahorrar tiempo a los

    lectores que desean estudiar en primer lugar las caractersticas ms relevantes dellenguaje, pudiendo profundizar posteriormente en dichos conceptos y en algn otromenos utilizado en la programacin general.

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    5/339

    NDICE

    PRLOGO .........................................................................................XIII

    CAPTULO 1: TOMA DE CONTACTO, VARIABLES, TIPOS DEDATOS Y OPERADORES ........................................ 1

    1.1 Instalacin del entorno de desarrollo................................... ........................................11.2 Primer programa en java: Hola mundo ........................................................................51.3 Variables y tipos de datos...................................................................................................7

    1.3.1 Variables ......................................................................................................................71.3.2 Tipos de datos.............................................................................................................91.3.3 Tipos numricos enteros .........................................................................................101.3.4 Tipos numricos decimales ....................................................................................12

    1.3.5 Tipo booleano...........................................................................................................131.3.6 Tipo carcter .............................................................................................................141.3.7 Conversin exp lcita de tipos (Casting)...............................................................15

    1.4 Operadores ..........................................................................................................................161.4.1 Introduccin..............................................................................................................161.4.2 Operadores aritmticos............................................................................................171.4.3 Operadores lgicos ..................................................................................................181.4.4 Operadores de comparacin...................................................................................19

    CAPTULO 2: ESTRUCTURAS DE CONTROL ............................. 21

    2.1 El bucle FOR......................................................................................................................212.1.1 Sintaxis .......................................................................................................................212.1.2Ejemplos de aprendizaje ..........................................................................................222.1.3 Situaciones errneas.................................................................................................242.1.4 Ejemplos de resolucin de problemas...................................................................26

    2.2 El bucle WHILE ................................................................................................................292.2.1 Sintaxis .......................................................................................................................30

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    6/339

    VIII JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    2.2.2 Ejemplos de aprendizaje..........................................................................................30

    2.2.3 Ejemplos de resolucin de problemas...................................................................322.3 La instruccin condicional IF ..........................................................................................352.3.1 Sintaxis .......................................................................................................................352.3.2 Ejemplos de aprendizaje..........................................................................................362.3.3 If anidados .................................................................................................................372.3.4 Situaciones errneas.................................................................................................382.3.5 Ejemplo de resolucin de problemas ....................................................................39

    2.4 La instruccin condicional SWITCH .............................................................................402.4.1 Sintaxis .......................................................................................................................40

    2.4.2 Ejemplos de aprendizaje..........................................................................................412.4.3 Switch anidados........................................................................................................442.4.4 Situaciones errneas.................................................................................................462.4.5 Ejemplo de resolucin de problemas ....................................................................47

    2.5 Ejemplos..............................................................................................................................492.5.1 Clculo de la hipotenusa de un tringulo .............................................................502.5.2 Punto de corte de dos rectas situadas en el espacio bidimensional..................522.5.3 Soluciones de una ecuacin de segundo g rado...................................................55

    CAPTULO 3: MTODOS Y ESTRUCTURAS DE DATOS ......... 57

    3.1 Mtodos...............................................................................................................................573.1.1 Sintaxis ......................................................................................................................583.1.2 Ejemplo 1...................................................................................................................593.1.3 Resultados del ejemplo 1........................................................................................603.1.4 Ejemplo 2...................................................................................................................603.1.5 Resultados del ejemplo 2........................................................................................61

    3.1.6 Paso de argumentos por valor y por referencia ...................................................613.2 Strings..................................................................................................................................623.2.1 Sintaxis ......................................................................................................................623.2.2 Ejemplo bsico..........................................................................................................643.2.3 Resultado...................................................................................................................65 3.2.4 Ejemplo de utilizacin de la clase String .............................................................653.2.5 Resultados..................................................................................................................66

    3.3 Matrices (arrays, vectores)...............................................................................................663.3.1 Sintaxis ......................................................................................................................673.3.2 Acceso a los datos de una matriz..........................................................................683.3.3 Ejemplo 1...................................................................................................................693.3.4 Resultados del ejemplo 1 ........................................................................................703.3.5 Ejemplo 2...................................................................................................................703.3.6 Resultados del ejemplo 2 ........................................................................................723.3.7 Ejemplo ......................................................................................................................72

    3.4 Ejemplos de programacin...............................................................................................743.4.1 Obtencin de nmeros primos ...............................................................................743.4.2 Revienta claves.....................................................................................................763.4.3 Estadsticas................................................................................................................78

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    7/339

    JESS BOBADILLA SANCHO ([email protected]) NDICE IX

    CAPTULO 4: PROGRAMACIN ORIENTADA A OBJETOS

    USANDO CLASES...................................................... 83

    4.1 Definicin de clases e instancias.....................................................................................834.1.1 Sintaxis .......................................................................................................................834.1.2 Representacin grfica ............................................................................................844.1.3 Instancias de una clase.............................................................................................844.1.4 Utilizacin de los mtodos y propiedades de una clase.....................................864.1.5 Ejemplo completo ....................................................................................................874.1.6 Resultado...................................................................................................................89

    4.2 Sobrecarga de mtodos y constructores .........................................................................894.2.1 Sobrecarga de mtodos............................................................................................894.2.2 Ejemplo ......................................................................................................................904.2.3 Resultado ...................................................................................................................934.2.4 Constructores.............................................................................................................93

    4.3 Ejemplos..............................................................................................................................964.3.1 Figura genrica .........................................................................................................964.3.2 Agenda de telfono ..................................................................................................984.3.3 Ejercicio de logstica.............................................................................................100

    4.4 Clases utilizadas como Parmetros..............................................................................1044.4.1 Cdigo .....................................................................................................................1054.4.2 Resultados...............................................................................................................109

    4.5 Propiedades y mtodos de clase y de instancia .........................................................1094.5.1 Propiedades de instancia ......................................................................................1094.5.2 Propiedades de clase............................................................................................. 1114.5.3 Mtodos de instancia ............................................................................................ 1134.5.4 Mtodos de clase................................................................................................... 1134.5.5 Ejemplo que utiliza propiedades de clase .........................................................1154.5.6 Cdigo del ejemplo ...............................................................................................116

    4.5.7 Resultados...............................................................................................................1204.6 Paquetes y atributos de acceso.....................................................................................120

    4.6.1 Definicin de paquetes .........................................................................................1214.6.2 Utilizacin de las clases de un paquete..............................................................1224.6.3 Proceso de compilacin cuando se utilizan paquetes ......................................1234.6.4 Atributos de acceso a los miembros (propiedades y mtodos) de una clase124

    4.7 Ejemplo: mquina expendedora .................................................................................. 125

    CAPTULO 5: PROGRAMACIN ORIENTADA A OBJETOSUSANDO HERENCIA.............................................. 137

    5.1 Herencia............................................................................................................................1375.1.1 Funcionamiento bsico.........................................................................................1375.1.2 Accesibilidad a los miembros heredados en una subclase.............................1405.1.3 Constructores de las subclases ............................................................................ 1415.1.4 El modificador final..............................................................................................145

    5.2 Ejemplos...........................................................................................................................146

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    8/339

    X JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    5.2.1 Figuras geomtricas .............................................................................................. 146

    5.2.2 Vehculos................................................................................................................ 1505.3 Polimorfismo ...................................................................................................................1555.3.1 Conceptos...............................................................................................................1555.3.2 Ejemplo ...................................................................................................................157

    5.4 Clases abstractas e interfaces ........................................................................................ 1605.4.1 Mtodos abstractos................................................................................................1605.4.2 Clases abstractas ....................................................................................................1615.4.3 Interfaces................................................................................................................. 1645.4.4 Ejercicio ...................................................................................................................167

    CAPTULO 6: EXCEPCIONES........................................................ 171

    6.1 Excepciones predefinidas .............................................................................................. 1716.1.1 Introduccin ...........................................................................................................1716.1.2 Sintaxis y funcionamiento con una sola excepcin .........................................1746.1.3 Ejemplo con una sola excepcin.........................................................................1766.1.4 Sintaxis y funcionamiento con ms de una excepcin ....................................177

    6.1.5 El bloque finally ....................................................................................................1806.1.6 Propagacin de excepciones ................................................................................1806.1.7 Estado de una excepcin ......................................................................................182

    6.2 Excepciones definidas por el programador ................................................................1846.2.1 Introduccin ...........................................................................................................1846.2.2 Definicin de una excepcin definida por el programador ............................ 1856.2.3 Utilizacin de una excepcin definida por el programador ........................... 1866.2.4 Ejemplo ...................................................................................................................187

    CAPTULO 7: INTERFAZ GRFICO DE USUARIO .................. 193

    7.1 Creacin de ventanas ......................................................................................................1937.1.1 Introduccin ...........................................................................................................1937.1.2 Utilizacin de la clase Frame .............................................................................. 1957.1.3 Creacin y posicionamiento de mltiples ventanas........................................ 196

    7.2 Paneles y objetos de disposicin (layouts).................................................................1997.2.1 Introduccin ...........................................................................................................1997.2.2 Utilizacin bsica de paneles .............................................................................. 2027.2.3 Objeto de disposicin (Layout): FlowLayout...................................................2037.2.4 Objeto de disposicin (Layout): BorderLayout ...............................................2057.2.5 Objeto de disposicin (Layout): GridLayout....................................................208

    7.3 Etiquetas, campos y reas de texto .............................................................................. 2117.3.1 Introduccin ...........................................................................................................2117.3.2 Etiqueta (Label) .....................................................................................................2117.3.3 Campo de texto (TextField)................................................................................. 2157.3.4 rea de texto (TextArea) .....................................................................................218

    7.3.5 Fuentes (Font)........................................................................................................219

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    9/339

    JESS BOBADILLA SANCHO ([email protected]) NDICE XI

    7.4 Cajas de verificacin, botones de radio y listas.........................................................221

    7.4.1 Introduccin ...........................................................................................................2217.4.2 Cajas de verificac in (Checkbox) ....................................................................... 2217.4.3 Botones de radio (CheckboxGroup)...................................................................2237.4.4 Lista (List) .............................................................................................................. 2267.4.5 Lista desplegable (Choice)...................................................................................229

    7.5 Diseo de formularios....................................................................................................2307.5.1 Diseo del interfaz grfico deseado................................................................... 2307.5.2 Implementacin en una sola clase...................................................................... 2327.5.3 Implementacin en varias clases.........................................................................235

    7.6 Dilogos y mens ...........................................................................................................2407.6.1 Introduccin ...........................................................................................................2407.6.2 Dilogo (Dialog)....................................................................................................2417.6.3 Dilogo de carga / almacenamiento de ficheros (FileDialog) ....................... 2437.6.4 Mens (Menu y MenuBar) .................................................................................. 245

    CAPTULO 8: EVENTOS.................................................................. 247

    8.1 Mecanismo de eventos en java..................................................................................... 2478.1 Introduccin............................................................................................................... 2478.2 Arquitectura de los eventos..................................................................................... 2488.3 Interfaces que soportan el mecanismo de eventos .............................................. 2508.4 Esquema general de programacin ........................................................................ 253

    8.2 Eventos de ratn y de movimiento de ratn............................................................... 2578.2.1 Introduccin ...........................................................................................................2578.2.2 Eventos de ratn ....................................................................................................2598.2.3 Eventos de movimiento de ratn ........................................................................ 267

    8.3 Eventos de teclado y de ventana.................................................................................. 2728.3.1 Introduccin ...........................................................................................................2728.3.2 Eventos de teclado.................................................................................................2748.3.3 Eventos de ventana................................................................................................276

    8.4 Eventos de accin, enfoque y elemento ......................................................................2788.4.1 Introduccin ...........................................................................................................2788.4.2 Eventos de accin.................................................................................................. 2808.4.3 Eventos de enfoque............................................................................................... 2848.4.4 Eventos de elemento............................................................................................. 287

    CAPTULO 9: APLICACIONES DE EJEMPLO ........................... 293

    9.1 Ejemplo: calculadora ......................................................................................................2939.1.1 Definicin del ejemplo .........................................................................................2939.1.2 Diseo del interfaz grfico de usuario ...............................................................2949.1.3 Implementacin del interfaz grfico de usuario ...............................................2969.1.4 Diseo del tratamiento de eventos...................................................................... 300

    9.1.5 Implementacin de las clases de tratamiento de eventos................................302

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    10/339

    XII JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    9.1.6 Diseo del control ................................................................................................. 305

    9.1.7 Implementacin del control................................................................................. 3079.2 Ejemp lo: editor................................................................................................................ 3169.2.1 Definicin del ejemplo .........................................................................................3169.2.2 Estructura de la aplicacin ................................................................................... 3189.2.3 Propiedades de la clase.........................................................................................3219.2.4 Constructores .......................................................................................................... 3229.2.5 Mtodo PreparaMenus..........................................................................................3249.2.6 Mtodo PreparaZonaInferior...............................................................................3259.2.7 Clase Colores .........................................................................................................325

    9.2.8 Tratamiento de las opciones de men................................................................3279.2.9 Tratamiento de las opciones Buscar y Reemplazar .................................3299.2.10 Tratamiento de los botones de radio Color texto y Color fondo.........3319.2.11 Tratamiento a las pulsaciones de los botones de colores ............................. 331

    APNDICES

    A: CUESTIONES DE AUTOEVALUACIN.................................. 333

    B: SOLUCIONES A LAS CUESTIONES DE AUTOEVALUACIN............................................................................................ .............. 359

    NDICE ALFABTICO ............................................................. ....... 361

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    11/339

    CAPTULO 1

    TOMA DE CONTACTO, VARIABLES,

    TIPOS DE DATOS Y OPERADORES

    1.1 INSTALACIN DEL ENTORNO DE DESARROLLOPara poder realizar programas en lenguaje Java es necesario disponer de un

    mnimo de herramientas que nos permitan editar, compilar e interpretar el cdigoque diseamos. Para escribir fsicamente los programas podemos utilizar cualquiereditor de texto (por ejemplo el bloc de notas, el WordPad, etc.). Para compilar yejecutar los programas existen dos opciones:

    Utilizar un entorno integrado de desarrollo (por ejemplo JBuilderdeBorland, Visual J++ deMicrosoft, etc.)

    Emplear el software bsico de desarrollo (SDK) de Sun MicrosystemsLa primera opcin resulta especialmente interesante para afrontar la creacin

    de aplicaciones de manera eficiente, puesto que estos entornos facilitanenormemente el diseo, escritura y depuracin de los programas. La segunda opcines mucho ms adecuada para aprender a programar en Java, porque no existe lageneracin automtica de cdigo que incorporan los entornos integrados dedesarrollo.

    El SDK de Sun Microsystems puede ser obtenido de forma gratuita (es unsoftware de libre distribucin) en la direccin www.sun.com; una vez que se disponedel fichero con el SDK (por ejemploj2sdk-1_4_0-win.exe) basta con ejecutarlo paraconseguir que el software se instale en su ordenador.

    En primer lugar se descomprime automticamente la informacin:

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    12/339

    2 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    Por defecto, el software se instalar a partir de un directorio cuyo nombretiene que ver con la versin del SDK (en este caso j2sdk1.4.0), aunque siemprepuede elegirse una ubicacin personalizada (con la opcin Browse).

    La propia instalacin rellenar la variable de entorno CLASSPATHcon losvalores adecuados (donde el entorno debe buscar los ficheros compilados .class). Lavariable de entorno PATH la deberemos actualizar para que el sistema operativoencuentre los ficheros ejecutables del SDK, que en nuestro caso estn ubicados en eldirectorio c:\j2sdk1.4.0\bin (suponiendo que hemos realizado la instalacin sobre eldisco c: y el directorioj2sdk1.4.0).

    Para asegurarse de que la variable CLASSPATHse encuentra correctamenteestablecida, podemos consultar su valor de la siguiente manera:

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    13/339

    BOBADILLA CAPTULO 1: CONCEPTOS BSICOS, VARIABLES, TIPOS DE DATOS Y OPERADORES 3

    Sun Microsystems proporciona, adems, ayuda en lnea sobre las

    caractersticas del lenguaje y las clases ms comunes para el desarrollo deaplicaciones. Escribiendo programas en Java resulta necesario instalar esta ayudapara poder consultar los mtodos y clases disponibles. La ayuda puede ser obtenidaen Internet a travs del sitio Web de Sun (www.sun.com). Una vez instalada, seaccede a ella a travs de su pgina principal (index.html).Para escribir programas enJava, el enlace ms importante de esta pgina es:Java 2 Platform API Specification,correspondiente al apartadoAPI & Language Documentation.

    El software de desarrollo SDK funciona en modo texto sobre una ventana deconsola del sistema operativo. En Windows, para acceder a la consola se debe pulsarsobre el smbolo de MS-DOS (habitualmente accesible a travs del botn deInicio).Una vez en la consola, dirigirse al directorio de trabajo (en el ejemploC:\CursoJava\Introduccin), tal y como aparece en la siguiente figura:

    Podemos configurar la consola en cuanto al tamao con el que aparece,memoria que utiliza, fuentes que emplea, etc. Para realizar esta configuracin bastacon acceder al smbolo de MS-DOS y, en lugar de pulsar con el botn izquierdo delratn, hacerlo con el derecho y seleccionar Propiedades.

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    14/339

    4 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    En concreto, nos interesa seleccionar la solapa Programa y variar el valordel campo de texto Carpeta de trabajo, introduciendo el directorio sobre el que

    solemos trabajar, con ello conseguimos que la consola se abra directamente en esedirectorio. En nuestro ejemplo, hemos introducido el valorC:\CursoJava\Introduccin.

    Como veremos en el siguiente apartado, el fichero javac.exe es elcompilador de java. Se encuentra en el directorio c:\j2sdk1.4.0\bin (hacia dondehemos apuntado la variable PATH). Si todo se encuentra correctamente al invocar elcompilador sin parmetros nos indica la forma de uso correcta, tal y como apareceen la siguiente figura:

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    15/339

    BOBADILLA CAPTULO 1: CONCEPTOS BSICOS, VARIABLES, TIPOS DE DATOS Y OPERADORES 5

    1.2 PRIMER PROGRAMA EN JAVA: HOLA MUNDO

    El aprendizaje de todo lenguaje de programacin pasa por la etapaobligatoria de realizar un primer programa, lo ms sencillo posible, que muestre:

    La estructura sintctica mnima a la que obliga el lenguaje La manera de introducir, traducir y ejecutar el programa La validez del entorno en el que se sustentarn los desarrollos (para

    nosotros el SDK)

    Nuestro programa nicamente escribir el texto Hola mundo, pero servirpara asentar cada uno de los puntos expuestos en el prrafo anterior.

    Pasos detallados:1 Abrir un editor de texto (por ejemplo el WordPad)

    Habitualmente a travs del botn de Inicio: (Inicio ProgramasAccesorios WordPad).

    2 Introducir el cdigo (sin incluir los nmeros de lnea):1 public class HolaMundo {2 public static void main (String[] args) {3 System.out.println("Hola Mundo");4 }5 }

    Es necesario respetar la condicin mayscula/minscula de cada letradel programa, puesto que en este lenguaje una letra en minscula esdiferente a su correspondiente en maysculas.

    La lnea 1 define la clase (objeto) HolaMundo. Java es un lenguajeorientado a objetos, donde toda las aplicaciones se estructuran engrupos de objetos (clases en Java). La clase se define como public(publica), indicando que ser accesible a cualquier otra clase. Elltimo carcter de la lnea 1 es una llave de comienzo; indica elcomienzo de la clase. La clase termina en la lnea 5 (con la llave defin).

    La lnea 2 define un mtodo (procedimiento, subrutina) de la claseHolaMundo . Este mtodo es especial, le indica al entorno de Java elcomienzo de nuestra aplicacin. Su nombre (identificador) es: main(mtodo principal). Este mtodo siempre lleva un parmetro String[]que identifica un conjunto de literales (textos); por ahora noemplearemos esta caracterstica, aunque debemos respetar su sintaxis.El mtodo es pblico y esttico (atributos que veremos en detalle enlos temas siguientes).

    El contenido del mtodomain

    , en nuestro ejemplo, se encuentradelimitado entre la llave de inicio situada en la lnea 2 y la llave de fin

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    16/339

    6 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    situada en la lnea 4. nicamente contiene la instruccin situada en la

    lnea 3, que imprime el literal (texto) que aparece entre comillas ycomo parmetro de la llamada al mtodo println. Obsrvese elcarcter ; que se debe utilizar obligatoriamente para separarinstrucciones.

    El sangrado de cada una de las lneas no es necesario, pero resultamuy conveniente para hacer ms legible los programas. Su funcinprincipal es facilitar la identificacin visual de cada bloque de cdigo.

    3 Grabar el cdigo en el fichero HolaMundo.java y con formato de texto

    Es absolutamente necesario que la extensin sea .java, que el ficheroeste grabado con formato de texto y que el nombre de la clasecoincida EXACTAMENTE con el nombre del fichero (en nuestrocaso HolaMundo). Finalmente, en el WordPad nos quedar unaventana similar a la siguiente:

    4 Compilar el programaEn la ventana de MS-DOS, en el directorio donde hemos grabado elfichero HolaMundo.java, debemos ejecutar el compilador (javac)poniendo como argumento el nombre del fichero CON LAEXTENSIN .java (javac HolaMundo.java). Si existen errores, seobtendr un listado de los mismos. Si no los hay, como en nuestro

    caso, no aparece nada:

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    17/339

    BOBADILLA CAPTULO 1: CONCEPTOS BSICOS, VARIABLES, TIPOS DE DATOS Y OPERADORES 7

    Tras la compilacin con xito del programa, obtenemos el ficheroobjetoHolaMundo.class:

    5 Ejecutar el programaEn el directorio en el que estamos trabajando, ejecutar el intrprete de java (java) suministrando como parmetro el nombre de la clase(HolaMundo) SIN la extensin .class ( java HolaMundo). Nosaparecer el texto Hola Mundo correspondiente a la impresin dedatos por consola que codificamos en la lnea 3 de nuestro programa:

    1.3 VARIABLES Y TIPOS DE DATOS

    1.3.1 Variables

    Las variables se utilizan para almacenar datos asociados a nombres. Cada

    variable tiene un nombre que sirve de referencia para introducir datos o acceder a los

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    18/339

    8 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    mismos. Un ejemplo de utilizacin de variable es: Edad_Pedro = 23; en este caso,

    introducimos el valor numrico 23 en la variable con nombreEdad_Pedro. A partirde ahora podemos utilizar la variable a travs de su nombre (Edad_Pedro) parareferirnos a su valor (23), por ejemplo estableciendo Edad_Ana = Edad_Pedro 2;donde Ana podra ser la hermana pequea de Pedro, que es dos aos ms joven quel.

    Los nombres de las variables, en Java, pueden tener cualquier longitud ydeben comenzar con una letra, el smbolo de subrayado _ o el dlar $. El restode los caracteres del nombre pueden ser cualquiera, salvo los que pueden dar lugar a

    confusin, como los operadores (+,-,*,etc.). Por ejemplo, sera correcto el nombreMiAmigoMasQuerido, pero no el nombre MiAmigo+Querido, puesto que en esteltimo caso el compilador interpretara que hay que sumar el contenido de lavariableMiAmigo con el contenido de la variable Querido.

    Los nombres de variables no deben tener espacios en blanco, puesto que elcompilador identificara ms de una variable; por ejemplo,NumeroDeAciertos es unnombre de variable correcto, sin embargo Numero De Aciertos no lo es, porque el

    compilador identificara tres variables diferentes: Numero,De yAciertos.Por ltimo, los nombres de variables no deben coincidir con palabras

    reservadas (tales como public, static, class, void, main, etc.), puesto que estosidentificadores tienen un significado especial para el compilador.

    En Java, los identificadores de variables suelen definirse empezando por uncarcter en minscula, por ejemplo contador. Si en el identificador existe ms deuna palabra, los comienzos del resto de las palabras se ponen con maysculas,ejemplo: contadorDeAciertos. En este curso seguiremos una notacin parecida,aunque no idntica; comenzaremos todas las palabras con maysculas:ContadorDeAciertos .

    Para asentar los conceptos expresados en este apartado, veamos una serie decasos de identificadores de variables correctos e incorrectos:

    LaCasaDeLaPradera identificador correcto

    El Hombre Sin Rostro

    identificador incorrecto, no debe existir ningnespacio en blanco en un nombre de variable

    3Deseos identificador incorrecto, el nombre no empieza por una letra(sino por un nmero)

    TresDeseos identificador correcto

    _4 identificador correcto

    $ identificador correcto

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    19/339

    BOBADILLA CAPTULO 1: CONCEPTOS BSICOS, VARIABLES, TIPOS DE DATOS Y OPERADORES 9

    $Ganado identificador correcto

    public identificador incorrecto, public es un nombre reservado por ellenguaje

    Los identificadores deben intentar ser representativos de los datos quealbergan, de esta manera ValorAcumulado, NumeroAlumnos, CantidadEuros, Edad,Potencia son variables que determinan de forma adecuada el significado de suscontenidos, mientras que los nombres Variable, Valor, V1, V2 , no sonrepresentativos de sus contenidos.

    La longitud de los identificadores no debe ser excesivamente larga, para nodificultar la legibilidad de las instrucciones, por ejemplo resulta mucho ms legibleStock = LibrosEditados LibrosVendidos, que StockTotalDeLibrosEnAlmacen = LibrosEditadosEnElAoEnCurso LibrosVendidosYSacadosDelAlmacen.

    Los identificadores en maysculas se suelen reservar para nombres

    (normalmente cortos) de constantes, de esta manera las instrucciones (basadasmayoritariamente en operaciones con variables) son ms legibles, al utilizarseminsculas. Comprese Stock = LibrosEditados LibrosVendidos con STOCK =LIBROSEDITADOS LIBROSVENDIDOS.

    1.3.2 Tipos de datos

    Las variables albergan datos de diferentes tipos (numrico decimal,numrico entero, caracteres, etc.). Para indicar el tipo de dato que contendrn lasvariables debemos declarar las mismas, indicando sus tipos. Este mecanismopermite que el traductor (compilador) realice comprobaciones estticas de validez,como por ejemplo que no empleamos en el programa una variable que no ha sidodeclarada, que no asignemos un carcter a una variable de tipo numrico, que nosumemos un carcter a un valor numrico, etc.

    A continuacin se establece una relacin de los tipos de datos primitivos(los que proporciona el lenguaje):

    TIPOS PRIMITIVOS

    Nombre del tipo Tamao en bytes Rango

    Tipos numricos enteros

    byte 1 -128 a 127

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    20/339

    10 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    short 2 -32768 a 32767

    int 4 -231

    a 231

    long 8 -263 a 263

    Tipos numricos decimales

    float 4 -3.4x1038 a 3.4x1038 double 8 -1.7x10308 a 1.7x10308

    Tipo carcter

    char 2 Conjunto de caracteres

    Tipo lgico (booleano)

    boolean 1 true, false

    Para declarar una variable se emplea la sintaxis:tipo identificador;tipo identificador [=valor];tipo identificador1,identificador2,identificador3,etc.;tipo identificador1 = valor1,identificador2 = valor2, etc.;

    Por ejemplo:byte EdadPedro = 60;short SueldoMensual;float PrecioEnEuros, Cateto1, Cateto2, Hipotenusa;boolean Adquirido = false, Finalizado = true;

    1.3.3 Tipos numricos enteros

    A continuacin se proporcionan diversos programas comentados quemuestran la manera de utilizar los tipos numricos enteros:

    En el primer ejemplo TiposNumericos1, se declaran las variables de tipobyte EdadJuan yEdadPedro (lneas 3 y 4) y las variables de tipo shortSueldoBase yComplementos (lneas 6 y 7). La lnea 9 muestra, a modo de ejemplo, el valor deSueldoBase, que es 1980.

    Obsrvese que se ha seleccionado el tipo byte para albergar edades, por loque asumimos que nunca tendremos que introducir un valor superior a 127; delmismo modo empleamos el tipo shortpara contener sueldos (en euros), por lo que

    no podremos pasar de 32767, lo que puede ser vlido si nos referimos a sueldos

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    21/339

    BOBADILLA CAPTULO 1: CONCEPTOS BSICOS, VARIABLES, TIPOS DE DATOS Y OPERADORES 11

    mensuales. Si estamos indicando sueldos anuales, sera conveniente pasar al

    siguiente tipo en tamao (int).

    1 public class TiposEnteros1 {2 public static void main (String[] args) {3 byte EdadJuan = 20;4 byte EdadPedro = 22;56 short SueldoBase = 1980;7 short Complementos = 400;8

    9 System.out.println(SueldoBase);10 }11 }

    Si al inicializar el valor de una variable nos pasamos en el rango permitido,el compilador nos dar un error, indicndonos el tipo que deberamos emplear:

    En el siguiente ejemplo TiposEnteros2 se define una variable de tipo entero(int) y otra de tipo entero largo (long), cada una de ellas con valores adecuados altipo de datos que representan. Es importante saber que los valores numricos enterosno pueden ser representados con puntos (ejemplo 4.000.000 en lugar de 4000000),puesto que se confundiran con valores numricos decimales.

    En la lnea 4 del ejemplo, se define el valor 5000000000L acabado en laletra L. Esta letra indica que el valor debe ser tomado como long antes de ser

    asignado a la variable. Si no ponemos esta indicacin, el valor numrico se tomacomo int(por defecto) y el compilador muestra un error indicando que el nmero esdemasiado grande para pertenecer a este tipo.

    1 public class TiposEnteros2 {2 public static void main (String[] args) {3 int HabitantesEnMadrid = 4000000;4 long HabitantesEnElMundo = 5000000000L;56 System.out.println(HabitantesEnElMundo);

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    22/339

    12 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    7 }8

    }

    1.3.4 Tipos numricos decimales

    Existe una gran cantidad de valores numricos que, por su naturaleza,requieren la utilizacin de decimales; Java proporciona los tipos de datos floatydouble para albergar este tipo de valores. Como ejemplos de valores que requierendecimales podemos establecer: el precio en euros (con centimos) de un artculo, elpeso en kilos (con precisin de gramos) de una persona, la medida en metros (conprecisin de centmetros) de un objeto, etc.

    El siguiente ejemplo (TiposDecimales) muestra la manera de declarar yutilizar variables de tipofloaty double. En las lneas 3 y 4 establecemos el precio deuna pieza de pan en 0.87 euros y el del kilo de queso en 1.93 euros; la letra f conla que terminamos las declaraciones le indica al compilador que los literales

    numricos (0.87 y 1.93) son de tipo float, si no pusiramos esta indicacin, elcompilador los tomara (por defecto) como de tipo double , con lo que la asignacinfloat= double resultara fallida.

    En la lnea de cdigo 6 introducimos en la variable $Bocadillo el precio deun bocadillo que contiene 150 gramos de queso.

    Las lneas 8 y 9 muestran la manera de definir e inicializar variables quecontienen nmeros realmente grandes (6 elevado a 100) y nmeros realmentepequeos (2.45 elevado a 95), para estos casos utilizamos el tipo double.

    1 public class TiposDecimales {2 public static void main (String[] args) {3 float $PiezaPan = 0.87f;4 float $KiloQueso = 1.93f;56 float $Bocadillo = $PiezaPan + $KiloQueso * 0.15f;78 double NumeroHormigas = 6E+100;9 double DistanciaSubAtomica = 2.45E-95;1011 System.out.println($Bocadillo);12 }13 }

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    23/339

    BOBADILLA CAPTULO 1: CONCEPTOS BSICOS, VARIABLES, TIPOS DE DATOS Y OPERADORES 13

    1.3.5 Tipo booleano

    El tipo de datos lgico (booleano) nos permite declarar y definir variablescuyo contenido es binario. Sus nicos valores posibles son true (verdadero) y false(falso). Estas variables resultan especialmente tiles para definir condiciones lgicasaplicables al control de flujo de los programas, por ejemplo: si (Encontrado) haceruna cosa, en caso contrario hacer otra, siendo Encontrado una variable de tipoboolean que se modifica a lo largo del programa.

    En el siguiente ejemplo (TipoBooleano) se utilizan diversas variables de estetipo. En la lnea 3 se definen e inicializan (a true yfalse) dos variables booleanas. Enla lnea 5 se establece el contenido de una variable Triste como el contrario (negado)de la variable Contento , para ello se emplea el operador ! que detallaremos msadelante.

    1 public class TipoBooleano {2 public static void main (String[] args) {3 boolean Contento = true, MenorDeEdad = false;45 boolean Triste = !Contento;67 System.out.println(Triste);8 }9 }

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    24/339

    14 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    1.3.6 Tipo carcter

    En Java tenemos la posibilidad de utilizar variables de tipo carcter, capacesde contener, cada variable, un carcter (A, B, a, *, 8, etc.). En la lnea 2 dela clase TipoCaracterse declaran las variablesAMayuscula yAMinuscula , en dondeintroducimos los valores A y a.

    La lnea 4 define la variableBmayuscula , introduciendo el valor siguiente aldeAmayuscula, para ello hay que realizar una conversin de tipos que nos sirve para

    ilustrar los conceptos que justamente se explican en el apartado siguiente. En la lnea6 se imprime una nueva lnea y en la 7 el carcter B.

    1 public class TipoCaracter {2 public static void main (String[] args) {3 char AMayuscula = 'A', AMinuscula = 'a';4 char BMayuscula = (char) (AMayuscula + 1);56 System.out.println('\n');7

    System.out.println(BMayuscula);8 }

    9 }Tambin existe la posibilidad de utilizar caracteres que no podemos

    conseguir con facilidad en nuestro teclado, para ello se utiliza la secuencia deescape: \. Podemos, de esta manera, definir cualquier carcter de codificacinunicode (codificacin ms extensa que ASCII) de la siguiente manera: \uxxxx,donde las equis se sustituyen por el valor numrico en hexadecimal del carcter. Por

    ejemplo \u0041 se corresponde con la A mayscula.

    Otros caracteres especiales son: \b espacio hacia atrs \n nueva lnea \r retorno de carro \t tabulador

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    25/339

    BOBADILLA CAPTULO 1: CONCEPTOS BSICOS, VARIABLES, TIPOS DE DATOS Y OPERADORES 15

    1.3.7 Conversin explcita de tipos (Casting)

    Resulta muy habitual que en los programas nos encontremos con lanecesidad de mezclar tipos de datos, por ejemplo al trabajar con una bibliotecamatemtica que obliga a utilizar tipos de datos double , cuando nosotros las variableslas tenemos de tipofloat; o ms sencillo todava, al intentar sumar un 1 (por defectoint) a una variable de tipo short. Java, en algunos casos, realiza una conversinimplcita de datos, sin embargo, por regla general, nos veremos obligados aprogramar conversiones explcitas de tipos.

    Para modificar el tipo de un valor, basta con indicar el nuevo tipo entreparntesis antes del valor, por ejemplo:

    (byte) 1 convierte el 1 (int) a byte (double)MiVariableDeTipoFloat convierte a double una variable detipofloat(short) (VariableDeTipoByte + VariableDeTipoByte) convierte a short elresultado de sumar dos variables de tipo byte. Obsrvese que al sumarse dosvariables de tipo byte, el resultado puede que no quepa en otra variable detipo byte.

    En el ejemplo siguiente: Casting, se realizan dos conversiones explcitas detipo: la primera en la lnea 4, donde al sumarseEdadJuan (byte) a 1 (int) el resultadoes inty por lo tanto lo debemos convertir al tipo de la variableEdadPedro (byte); eneste caso debemos estar muy seguros de que EdadJuan es distinto a 127 (lmite deltipo byte). En la lnea 11 convertimos a short, debido a que la operacin de sumatrabaja con el tipo (int) y por lo tanto realiza una conversin implcita de shorta int

    en las variables SueldoBase y Complementos. El casting que realizamos nosconvierte de int(resultado de la suma) a short(tipo de la variable SueldoTotal).

    1 public class Casting {2 public static void main (String[] args) {3 byte EdadJuan = 20;4 byte EdadPedro = (byte) (EdadJuan + 1);56 short SueldoBase = 1980;7 short Complementos = 400;89 short SueldoTotal;1011 SueldoTotal = (short) (SueldoBase + Complementos);1213 System.out.println(SueldoTotal);14 }15 }

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    26/339

    16 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    A menudo, en los programas escritos en Java se utiliza intensivamente el

    tipo int, cuando, en principio, sera ms adecuado hacer uso de otros tipos que seajusten mejor en tamao a la naturaleza de los datos. La razn es evitar operacionesde conversin explicita de tipos.

    1.4 OPERADORES

    1.4.1 Introduccin

    Los operadores nos permiten realizar operaciones sobre los operandosestudiados en el apartado anterior. Existen operadores unarios y binarios; un ejemplode operador unario que ya hemos utilizado es la negacin lgica (!), lo vimos alexplicar el tipo de datos booleano y lo empleamos en la instruccin: boolean Triste= !Contento; donde el operador negacin se aplica a un nico operando (la variableContento). El ejemplo de operador binario que ms hemos utilizado es la suma, quese aplica sobre dos operandos.

    Los operadores tienen unas reglas de precedencia que resulta importantetener en cuenta. En el apartado anterior, calculbamos el precio de un bocadillo de lasiguiente manera: float $Bocadillo = $PiezaPan + $KiloQueso * 0.15f; en estecaso utilizamos dos operadores binarios: la suma (+) y la multiplicacin (*). Eloperador de multiplicacin tiene mayor precedencia que el de suma, por lo que, deforma correcta, primero se obtiene el precio del queso y luego se realiza la suma del

    pan ms el queso. Si el operador de suma se hubiera aplicado primero, se habrasumado $PiezaPan + $KiloQueso y, posteriormente, el resultado se habramultiplicado por 0.15f, lo que nos proporcionara un resultado incorrecto. Cuandoexisten varios operadores con la misma precedencia, se aplican de izquierda aderecha.

    La precedencia de los operadores se puede variar usando los parntesis. Lasoperaciones que se encuentren entre parntesis se realizan primero. En el ejemplodel bocadillo, si suponemos que ya contbamos con 0.1f kilos de queso, el nuevoprecio lo podemos obtener de la siguiente manera: float $Bocadillo = $PiezaPan +$KiloQueso * (0.15f-0.1f); primero se realizar la resta, despus la multiplicacin ypor ltimo la suma.

    Los operadores pueden ser clasificados atendiendo al tipo de operandossobre los que actan, de esta manera realizaremos una breve descripcin de losoperadores aritmticos, lgicos y de comparacin, obviando a los operadores de bitsque se utilizan con muy poca frecuencia.

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    27/339

    BOBADILLA CAPTULO 1: CONCEPTOS BSICOS, VARIABLES, TIPOS DE DATOS Y OPERADORES 17

    1.4.2 Operadores aritmticos

    Los operadores aritmticos ms comunes son la suma (+) , resta (-),multiplicacin (*) y divisin (/) binarios, aunque tambin se utilizan los operadoresunarios (+) y (-), y el operador binario que obtiene el mdulo de una divisin (%).Finalmente, disponemos de operadores aritmticos de preincremento,postincremento, predecremento y postdecremento, que permiten acortar el tamaode ciertas instrucciones y facilitar la optimizacin de cdigo por parte delcompilador.

    Operacin sintaxis significadoPreincremento ++Variable; Variable = Variable + 1; (antes de asignacin)Postincremento Variable++; Variable = Variable + 1; (despus de asignacin)Predecremento --Variable; Variable = Variable 1; (antes de asignacin)Postdecremento Variable--; Variable = Variable 1; (despus de asignacin)

    Para ilustrar los conceptos expuestos se proporciona la claseOperadoresAritmeticos. La lnea 3 hace uso de la multiplicacin y suma binarios,

    con resultado 7.2, mostrado en la lnea 16. En la lnea 4, primero acta el operadorunario (-), despus el operador binario (/) y por ltimo la suma; el resultado,mostrado en la lnea 17 es 2. Las lneas de cdigo 5 y 6 muestran, respectivamente,la divisin y resto enteros, obtenindose resultados 5 y 1 en las lneas 18 y 19.

    Las lneas 8 a 14 del cdigo utilizan los operadores de pre/postincremento/decremento. A la variable PostIncremento de la lnea 8 se le asigna elvalor 9, debido a que primero se realiza la asignacin PostIncremento = Nueve yposteriormente la operacin de postincremento. La variable PreIncremento (en lalnea 10) albergar el valor 10, puesto que primero se realiza el preincremento ydespus la asignacin. Como cabe esperar, la variable PostDecremento recibe elvalor 9 y la variable PreDecremento el valor 8.

    1 public class OperadoresAritmeticos {2 public static void main (String[] args) {3 float Impuesto = 2.2f * 1.0f + 5.0f;4 int Impuesto2 = -8 + 12 / 2;5 int Cociente = 16 / 3;6 int Resto = 16 % 3;7 int Nueve = 9;8 int PostIncremento = Nueve++;9 Nueve = 9;10 int PreIncremento = ++Nueve;11 Nueve = 9;12 int PostDecremento = Nueve--;13 Nueve = 9;14 int PreDecremento = --Nueve;15

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    28/339

    18 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    16 System.out.println(Impuesto);17

    System.out.println(Impuesto2);18 System.out.println(Cociente);

    19 System.out.println(Resto);20 System.out.println(PostIncremento);21 System.out.println(PreIncremento);22 System.out.println(PostDecremento);23 System.out.println(PreDecremento);24 }25 }

    1.4.3 Operadores lgicos

    Los operadores lgicos nos permiten combinar operandos booleanos,obteniendo, as mismo, resultados booleanos. Los operandos lgicos y sussignificados son:

    Operador Sintaxis Ejemplo FuncionamientoNegacin ! Calor = !Frio !false truetrue false

    Y && Oportunidad = Bueno &&Bonito && Barato

    && false truefalse 0 0true 0 1

    O || Mojado = Llueve || Riego || false truefalse 0 1

    true 1 1

    En la clase OperadoresLogicos se programan las operaciones incluidas en lacolumna Ejemplo de la tabla anterior. El resultado en todos los casos es: true.

    1 public class OperadoresLogicos {2 public static void main (String[] args) {3 boolean Calor, Frio = false, Oportunidad, Bueno = true,4 Bonito = true, Barato = true, Llueve = true,

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    29/339

    BOBADILLA CAPTULO 1: CONCEPTOS BSICOS, VARIABLES, TIPOS DE DATOS Y OPERADORES 19

    5 Riego = false;6

    7 Oportunidad = Bueno && Bonito && Barato;89 System.out.println(!Frio);10 System.out.println(Oportunidad);11 System.out.println(Llueve || Riego);12 }13 }

    1.4.4 Operadores de comparacin

    Los operadores de comparacin se utilizan frecuentemente para dirigir laevolucin del flujo de control en los programas. A continuacin se proporciona unatabla en la que se definen estos operadores:

    Operador Sintaxis Ejemplo

    Menor= (Cateto1 >= Cateto2)Igual == (Contador == 8)Distinto != (Contador != 8)Instancia de instanceof (Valor instanceof float)

    El operador instanceof nos indica si una variable pertenece un tipo dado

    (siendo el tipo una clase o array). Las clases y arrays se explicarn ms adelante.Enel ejemplo siguiente se hace uso de las comparaciones mostradas en la tabla. Todoslos resultados que se muestran en las lneas 6 a 11 son true, salvo la 10 que esfalse.

    1 public class OperadoresComparacion {2 public static void main (String[] args) {3 int EdadJuan = 6, EdadPedro = 21, Contador = 14;4 float Hipotenusa = 105.6f, Cateto1 = 13.2f,5 Cateto2 = 5.7f;67 System.out.println(EdadJuan < 18);8 System.out.println(EdadJuan 8.0f * 6.2f + 5.7f);10 System.out.println(Cateto1 >= Cateto2);11 System.out.println(Contador == 8);12 System.out.println(Contador != 8);1314 }15 }

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    30/339

    20 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    31/339

    CAPTULO 2

    ESTRUCTURAS DE CONTROL

    2.1 EL BUCLE FOR

    Hasta ahora, todos los programas que hemos visto son estrictamentesecuenciales, es decir, a la ejecucin de una instruccin inexorablemente le sigue laejecucin de la siguiente instruccin en secuencia. Esta situacin es excesivamenterestrictiva, puesto que lo habitual es que surja la necesidad de variar el flujo decontrol del programa para tomar decisiones y/o repetir cmputos.

    En la mayor parte de los lenguajes de programacin existe una serie deinstrucciones que permiten variar la secuencialidad del flujo de control. En Java laspodemos dividir en el grupo de instrucciones condicionales, el grupo de

    instrucciones repetitivas y las llamadas a mtodos. El bucle forque se explica eneste apartado pertenece al grupo de instrucciones repetitivas.

    2.1.1 Sintaxis

    Cuando deseamos ejecutar un grupo de instrucciones un nmero

    determinado de veces, la instruccin fores la que mejor se adapta a esta tarea. Lasintaxis de esta instruccin es:for (inicializacin; condicin de continuidad; expresin de variacin) {

    Instrucciones a ejecutar de forma repetitiva

    }

    La semntica (significado) de la instruccin es la siguiente: se inicializa unavariable (inicializacin), se evala la condicin de continuidad y, si se cumple, se

    ejecutan las instrucciones situadas entre las llaves, finalmente se ejecuta la expresin

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    32/339

    22 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    de variacin y se repite el ciclo hasta que la condicin de continuidad se evala

    comofalse. Este proceso se puede entender mucho mejor con una serie de ejemplos:

    2.1.2 Ejemplos de aprendizaje

    1 public class BucleFor1 {2 public static void main (String[] args) {3 int i;4 for (i=1;i

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    33/339

    JESS BOBADILLA SANCHO ([email protected]) CAPTULO 2: ESTRUCTURAS DE CONTROL 23

    La expresin de variacin puede definirse de cualquier manera que nos sea

    til. Por ejemplo, si deseamos imprimir los 10 primeros nmeros impares negativos,podemos programar el siguiente bucle:

    1 public class BucleFor2 {2 public static void main (String[] args) {3 for (int i=-1;i>-20;i=i-2)4 System.out.println(i);5 }6 }

    Primera iteracin i almacena el valor -1 i>-20 se evala como true Se imprime: -1Segunda iteracin i almacena el valor -3 i>-20 se evala como true Se imprime: -3

    .................... ....................... ............................ ...............Dcima iteracin i almacena el valor -19 i>-20 se evala como true Se imprime: -19Finalizacin i almacena el valor -21 i>-20 se evala como

    false----------------

    Es habitual, en programacin, utilizar en la medida de lo posible buclessencillos, aunque esto conlleve que las instrucciones interiores al bucle contenganexpresiones un poco ms complejas. Los bucles sencillos (secuenciales) facilitan ladepuracin del cdigo cuando existen errores en los programas. El ejemploBucleFor2 puede ser codificado de la siguiente manera:

    1 public class BucleFor3 {2 public static void main (String[] args) {3 for (int i=1;i

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    34/339

    24 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    En este caso no podemos prescindir de las llaves de comienzo y final (llaves

    delimitadoras) de bloque, puesto que si lo hiciramos slo se ejecutararepetitivamente la instruccin 5. La instruccin 6 se ejecutara una sola vez, alacabar el bucle.

    2.1.3 Situaciones errneas

    En este apartado vamos a ilustrar una serie de actuaciones errneas que sonmuy habituales entre las personas que empiezan a programar. Resulta especialmenteconveniente prestar atencin en este apartado para evitar, en la medida de lo posible,codificar los programas con errores.

    La primera situacin que vamos a analizar son los bucles infinitos (productosiempre de un error en la programacin). En el siguiente ejemplo (BucleFor5) seproduce esta situacin, debido a que la condicin de continuidad del bucle nunca seevala comofalse. Analizando el programa, llegamos fcilmente a la conclusin de

    que la variable i albergar nicamente valores pares positivos, por lo que lacondicin de continuidad i!=21 nunca se evaluar comofalse y por lo tanto nunca sesaldr del bucle.

    1 public class BucleFor5 {2 public static void main (String[] args) {3 for (int i=0;i!=21;i=i+2)4 System.out.println(i);5 }

    6 }

    Para cortar la ejecucin de un programa basta con pulsar la combinacin deteclas Ctrl.+Ccon la consola de MS-DOS activa (donde se ejecuta el programa). Latecla Ctrl. se debe pulsar primero, y manteniendo esta tecla pulsada presionar latecla C.

    El siguiente programa es correcto. Imprime los primeros 20 nmeros enterospositivos:

    1 public class BucleFor6 {2 public static void main (String[] args) {3 for (int i=1;i!=21;i=i+1)4 System.out.println(i);5 }

    6 }

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    35/339

    JESS BOBADILLA SANCHO ([email protected]) CAPTULO 2: ESTRUCTURAS DE CONTROL 25

    En BucleFor6 la condicin de continuidad es correcta; la iteracin se

    produce para i=1, 2, 3, ..., 20. Con i valiendo 21, la condicin se evala comofalse(21!=21 esfalse). Si pusiramos como condicin de finalizacin i 20, por ejemplo, nos sacara del bucle deforma inmediata, puesto que en la primera iteracin la condicin de continuidad seevaluara comofalse. Aqu tenemos otro ejemplo tpico de programacin errnea: unbucleforcuya condicin de evaluacin, mal programada, nos saca del bucle en laprimera iteracin.

    for (int i=1;i>20;i=i+1)

    El siguiente programa (BucleFor7) contiene un error muy comn y muydifcil de detectar. El problema reside en haber mezclado la expresin depostincremento (i++) con la de asignacin (i=i+1), obteniendo la expresin,errnea, i=i++.

    1 public class BucleFor7 {2 public static void main (String[] args) {3 for (int i=1;i!=21;i=i++)4 System.out.println(i);5 }6 }

    El programa codificado en la clase BucleFor8 realiza la suma de los 1000primeros nmeros naturales (1+2+3+4+ .... +1000), imprimiendo por cada suma elresultado parcial obtenido. Este programa est correctamente codificado.

    1 public class BucleFor8 {2 public static void main (String[] args) {3 int Suma = 0;4 for (int i=1;i

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    36/339

    26 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    Segunda

    iteracin

    i almacena el

    valor 2

    Suma almacena

    el valor 3

    i

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    37/339

    JESS BOBADILLA SANCHO ([email protected]) CAPTULO 2: ESTRUCTURAS DE CONTROL 27

    1 public class Factorial {2 public static void main (String[] args) {3 int Numero = 6;4 int Factorial = 1;5 for (int i=2;i

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    38/339

    28 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    1 Adquirir un almacn pequeo en el centro de la ciudad (para 200

    electrodomsticos, por trmino medio).2 Adquirir almacenes en anillos concntricos de 5 kilmetros a partir

    del centro de la ciudad, cada almacn podr contener un stock deldoble de electrodomsticos que el almacn anterior (es decir, de 400electrodomsticos a 5 Km. del ncleo urbano, de 800electrodomsticos a 10 kilmetros, etc.).

    Se pide: indicar a cuantos kilmetros se encontrar el ltimo almacn en unaciudad que requiere una capacidad total de 100000 electrodomsticos en stock. Los100000 electrodomsticos estarn repartidos entre todos los almacenes adquiridos.

    Solucin:

    1 public class Logistica {2 public static void main (String[] args) {3 int CapacidadAlmacen = 200;

    4 int CapacidadTotal = CapacidadAlmacen;5 for (int i=2;i

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    39/339

    JESS BOBADILLA SANCHO ([email protected]) CAPTULO 2: ESTRUCTURAS DE CONTROL 29

    Se puede observar como con 9 almacenes (incluido el del centro urbano) sealcanza la capacidad acumulada de 100000 electrodomsticos (concretamente102200); por lo tanto hemos tenido que comprar 8 almacenes fuera del centrourbano, situndose el ltimo a 8*5 = 40 kilmetros de la ciudad.

    Para realizar este ejercicio hubiera sido mucho ms elegante emplear unaestructura de control de flujo en bucle que nos permitiera iterar mientras (o hasta)que se cumpla una condicin determinada: (que CapacidadTotal >=100000). Elbucle forno nos resuelve esta situacin adecuadamente, puesto que est diseado

    para indicar a priori el nmero de iteraciones, aunque tampoco resulta imposibleutilizarlo de otra manera:

    1 public class Logistica2 {2 public static void main (String[] args) {3 int CapacidadAlmacen = 200;4 int CapacidadTotal = CapacidadAlmacen;5 int i;6 for (i=2;CapacidadTotal

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    40/339

    30 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    2.2.1 Sintaxis

    El bucle while tiene dos posibles sintaxis:

    while (condicin de continuidad) {

    Instrucciones a ejecutar de forma repetitiva

    }

    do {

    Instrucciones a ejecutar de forma repetitiva

    } while (condicin de continuidad);

    En ambos casos se itera mientras que la condicin de continuidad secumpla, abandonndose el bucle cuando la condicin se evala como false. En elprimer caso puede ocurrir que las instrucciones interiores del bucle nunca seejecuten (si la primera vez que se evala la condicin resulta false); en el segundocaso las instrucciones interiores al bucle se ejecutan al menos una vez.

    2.2.2 Ejemplos de aprendizaje

    En el siguiente ejemplo se muestra una implementacin muy sencilla delbucle while en la que se pretende imprimir los nmeros 1, 2, 3 y 4. Puesto queconocemos a priori el nmero de iteraciones sera ms adecuado utilizar un buclefor, pero se ha escogido este ejemplo sencillo para mostrar una primeraimplementacin del bucle while.

    1 public class BucleWhile1 {2 public static void main (String[] args) {3 int i=1;4 while (i

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    41/339

    JESS BOBADILLA SANCHO ([email protected]) CAPTULO 2: ESTRUCTURAS DE CONTROL 31

    incrementarlo. Ntese como se estn codificando las distintas expresiones y

    condiciones del buclefor: for (i=1; i

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    42/339

    32 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    6 i++;

    7 Suma = Suma + i;8 } while (Suma

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    43/339

    JESS BOBADILLA SANCHO ([email protected]) CAPTULO 2: ESTRUCTURAS DE CONTROL 33

    10 } while(Divisor

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    44/339

    34 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    embargo, cuanto ms nos alejamos, ms nos cuesta el precio de distribucin que

    cada da hay que abonar a los transportistas que nos trasladan los electrodomsticosde la periferia al centro (donde se realizan la mayora de las compras).

    La estrategia que adoptaremos es la siguiente:1 Adquirir un almacn pequeo en el centro de la ciudad (para 200

    electrodomsticos, por trmino medio).

    2 Adquirir almacenes en anillos concntricos de 5 kilmetros a partirdel centro de la ciudad, cada almacn podr contener un stock del

    doble de electrodomsticos que el almacn anterior (es decir, de 400electrodomsticos a 5 Km. del ncleo urbano, de 800electrodomsticos a 10 kilmetros, etc.).

    Se pide: indicar a cuantos kilmetros se encontrar el ltimo almacn en unaciudad que requiere una capacidad total de 100000 electrodomsticos en stock. Los100000 electrodomsticos estarn repartidos entre todos los almacenes adquiridos.

    Solucin:

    1 public class LogisticaWhile {2 public static void main (String[] args) {3 int CapacidadAlmacen = 200, Km = 0;4 int CapacidadTotal = CapacidadAlmacen;5 do {6 CapacidadAlmacen = CapacidadAlmacen * 2;7 CapacidadTotal = CapacidadTotal + CapacidadAlmacen;

    8 Km = Km +5;9 } while(CapacidadTotal

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    45/339

    JESS BOBADILLA SANCHO ([email protected]) CAPTULO 2: ESTRUCTURAS DE CONTROL 35

    El resultado de la ejecucin del programa nos muestra 40 kilmetros y una

    capacidad acumulada de 102200 electrodomsticos.

    2.3 LA INSTRUCCIN CONDICIONAL IF

    Para poder programar aplicaciones no nos basta con ejecutar instrucciones

    secuencialmente, ni siquiera aunque tengamos la posibilidad de definir bucles;tambin resulta esencial poder tomar decisiones en base a condiciones. Lasinstrucciones condicionales nos permiten ejecutar distintas instrucciones en base a laevaluacin de condiciones.

    2.3.1 Sintaxis

    La instruccin ifpuede emplearse de diversas maneras:if (condicin)

    Instruccin

    if (condicin) {

    Instrucciones

    }

    if (condicin)Instruccin de la rama then

    else

    Instruccin de la rama else

    if (condicin) {

    Instrucciones de la rama then

    } else {

    Instrucciones de la rama else

    }

    En el primer caso, la instruccin se ejecuta slo si la condicin se evalacomo true. En el segundo caso, el conjunto de instrucciones slo se ejecuta si lacondicin se evala como true. Como el lector habr observado, el primer caso no esms que una situacin particular del segundo, en el que, al existir una solainstruccin se pueden omitir las llaves (tal y como hacamos con los bucles).

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    46/339

    36 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    En las dos ltimas sintaxis de la instruccin if, se introduce una rama else,

    cuyo significado es: si la condicin se evala como true se ejecuta el grupo deinstrucciones de la primera rama (llammosla then), en caso contrario (lacondicin se evala como false) se ejecuta el grupo de instrucciones de la segundarama (la rama else).

    Obviamente se pueden programar situaciones en las que slo hay unainstruccin en la rama then y varias en la rama else o viceversa. En generalpodemos tomar como sintaxis la del ltimo caso de los 4 presentados, sabiendo quela rama else es opcional y que si slo existe una instruccin en alguna rama del if,

    podemos prescindir del uso de las llaves en esa rama.

    2.3.2 Ejemplos de aprendizaje

    El primer ejemplo presenta la forma ms simple de instruccin condicional.Establecemos una condicin sencilla y una instruccin que se ejecuta si la condicin

    se evala como cierta.

    1 public class If1 {2 public static void main (String[] args) {3 int EdadJuan = 20, EdadAna =25;45 if (EdadJuan

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    47/339

    JESS BOBADILLA SANCHO ([email protected]) CAPTULO 2: ESTRUCTURAS DE CONTROL 37

    1 public class If3 {2 public static void main (String[] args) {3 float Presion = 2.3f;45 if (Presion > 2f) {6 System.out.println ("Abrir valvula de seguridad");7 System.out.println ("Reducir la temperatura");8 } else9 System.out.println ("Todo en orden");

    10 }11 }

    Las condiciones pueden programarse todo lo complejas que sea necesario:

    1 public class If4 {

    2 public static void main (String[] args) {3 float Presion = 2.3f, Temperatura = 90f;

    45 if (Presion > 2f && Temperatura > 200f) {6 System.out.println ("Abrir valvula de seguridad");7 System.out.println ("Reducir la temperatura");8 System.out.println ("Llamar a los bomberos");9 } else10 System.out.println ("Todo en orden");

    11 }12 }

    2.3.3 if anidados

    En muchas ocasiones resulta conveniente insertar un ifdentro de otro if. Si,por ejemplo, quisiramos saber si Juan es mayor, menor o de la misma edad queAna, normalmente recurriramos a la utilizacin de ifanidados:

    1 public class If5 {2 public static void main (String[] args) {3 int EdadJuan = 30, EdadAna =25;45 if (EdadJuan

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    48/339

    38 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    11 System.out.println ("Juan es mayor que Ana");

    12 }13 }

    EnIf5, en la lnea 3, se declaran dos variables de tipo inty se inicializan a 30y 25; representarn las edades de Juan y de Ana. En la lnea 5 se pregunta si la edadde Juan es menor que la de Ana; si lo es, se imprime el mensaje adecuado, y si no,pueden ocurrir dos cosas: que tengan la misma edad o que Ana sea mayor; estoobliga a realizar en este punto una nueva pregunta: Tienen la misma edad?, la lnea

    8 realiza esta pregunta dentro de la rama else del primer if.

    El ejemplo anterior se podra haber resuelto sin hacer uso de sentenciascondicionales anidadas:

    1 public class If6 {2 public static void main (String[] args) {3 int EdadJuan = 30, EdadAna =25;4

    5 if (EdadJuan < EdadAna)6 System.out.println ("Juan es mas joven que Ana");7

    8 if (EdadJuan > EdadAna)9 System.out.println ("Juan es mayor que Ana");1011 if (EdadJuan == EdadAna)12 System.out.println ("Juan tiene la edad de Ana");13

    14 }15 }

    La solucin de la claseIf6resuelve el mismo problema que el ejemplo de laclaseIf5; adems la solucin es ms legible y fcil de depurar en caso de errores, sinembargo es importante darse cuenta de que en este ltimo caso el ordenador siempretiene que evaluar tres condiciones, mientras que en la solucin aportada en If5 bastacon evaluar 1 2 condiciones (dependiendo de las edades de Juan y Ana), por lo

    cual los ifanidados proporcionan una solucin ms eficiente.

    2.3.4 Situaciones errneas

    Utilizando instrucciones if, los principales errores de programacin que secometen son:

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    49/339

    JESS BOBADILLA SANCHO ([email protected]) CAPTULO 2: ESTRUCTURAS DE CONTROL 39

    Situacin errnea Comentario

    Omisin de los parntesis en lascondiciones Los parntesis son sintcticamente obligatorios en lascondiciones de todas las instruccionesConfundir el operador relacional== con el operador deasignacin =

    Este es un error muy tpico y difcil de detectar,recordar que en las asignaciones se utiliza un smbolode igual y en las comparaciones dos

    Colocar mal los ifanidados Es conveniente repasar las llaves que se colocan encada rama de un ifanidado

    No tener en cuenta el orden deprecedencia de los operadores

    en las condiciones

    Ante cualquier duda utilizar parntesis

    El segundo de los errores es tan comn que merece la pena comentarlo enms detalle. En la lnea 8 de la clase If5 utilizamos el operador de comparacin(==). Si en esta lnea, por error, hubiramos introducido el operador de asignacin(=), obtendramos un error de compilacin (que nos facilitara la depuracin delcdigo). En otros contextos no seramos tan afortunados y se realizara la asignacindesvirtuando la comparacin.

    2.3.5 Ejemplo de resolucin de problemas

    Encontrar el menor de tres valores

    Dados tres valores A, B y C, podemos determinar cual es el menorrealizando las preguntas anidadas pertinentes. Basta con evaluar dos condicionespara obtener un resultado vlido:

    1 public class If7 {2 public static void main (String[] args) {3 int A = 10, B = 5, C = 20;45 if (A < B)6 if (A < C)7 System.out.println ("A es el menor");8 else9 System.out.println ("B es el menor");

    10 else11 if (C < B)12 System.out.println ("C es el menor");13 else14 System.out.println ("B es el menor");15 }

    16 }

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    50/339

    40 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    Una solucin ms fcil de entender, pero mucho ms costosa en ejecucin

    (por el nmero de condiciones a evaluar) es:

    1 public class If8 {2 public static void main (String[] args) {3 int A = 10, B = 5, C = 20;45 if (A

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    51/339

    JESS BOBADILLA SANCHO ([email protected]) CAPTULO 2: ESTRUCTURAS DE CONTROL 41

    default:

    Instrucciones;break;

    }

    Cuando el flujo de control del programa llega a la instruccin switch, loprimero que se hace es evaluar la expresin, despus se va comparando el valor decada clusula case con el resultado de la evaluacin de la expresin. Cuando en una

    clusula case coinciden los valores, se ejecutan las instrucciones asociadas hastaalcanzar la sentencia break. Si no se incluye el breaken un case, se ejecutan todaslas instrucciones siguientes (correspondientes a los siguientes grupos case) hasta quese encuentra un breako se termina la instruccin switch.

    La clusula defaultes muy til, nos sirve para indicar que se ejecuten susinstrucciones asociadas en el caso de que no se haya ejecutado previamente ningnotro grupo de instrucciones.

    La sentencia break asociada al ltimo case (o default) no es necesaria,puesto que el final de la ejecucin de instrucciones del switch viene marcado tantopor las instrucciones breakcomo por el fin fsico de la instruccin switch.

    Es importante tener en cuenta que la expresin asociada a la instruccinswitch slo debe generar valores de tipo: char, byte , shorto int.

    2.4.2 Ejemplos de aprendizaje

    Nuestro primer ejemplo (Switch1) nos muestra una instruccin switch (lnea5) con una expresin de tipo int. Segn el valor de la expresin sea 1, 2 3, seimprimirn diferentes mensajes. Cuando el valor de la expresin es diferente a 1, 2 y3 (lnea 18) se imprime un mensaje genrico (lnea 19). En el ejemplo, si lainstruccin 12 no existiera, se imprimiran dos mensajes: Medalla de plata y

    Medalla de bronce.1 public class Switch1 {2 public static void main (String[] args) {3 int Puesto = 2;45 switch (Puesto) {6 case 1:7 System.out.println("Medalla de oro");

    8 break;9

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    52/339

    42 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    10 case 2:

    11 System.out.println("Medalla de plata");12 break;1314 case 3:15 System.out.println("Medalla de bronce");16 break;17

    18 default:19 System.out.println("Gracias por participar");20 break;

    2122 }2324 }25 }

    Nuestro segundo ejemplo implementa un control de accionamiento deaccesos, donde se puede ordenar la apertura, cierre o comprobacin de circuitos de

    una puerta. En un programa ms amplio se le pedira al usuario la introduccin de uncarcter que indique la accin requerida, digamos a: abrir, c: cerrar, t: test decircuitos; en nuestro caso suplimos la introduccin del comando por la lnea 3.

    La clase Switch2 es muy parecida a la clase Switch1, salvo en el tipo dedatos que utilizamos (char).

    1 public class Switch2 {

    2 public static void main (String[] args) {3 char Caracter = 't';4

    5 switch (Caracter) {6 case 'a':7 System.out.println("Abrir puerta");8 break;910 case 'c':11 System.out.println("Cerrar puerta");12 break;1314 case 't':

    15 System.out.println("Comprobar circuitos");16 break;1718 default:19 System.out.println("Opcion no contemplada");20 break;

    21

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    53/339

    JESS BOBADILLA SANCHO ([email protected]) CAPTULO 2: ESTRUCTURAS DE CONTROL 43

    22 }

    2324 }25 }

    Podemos ampliar el ejemplo anterior para que admita tambin los comandosen maysculas. Obsrvese la nueva sintaxis:

    1 public class Switch3 {

    2 public static void main (String[] args) {3 char Caracter = 'C';45 switch (Caracter) {6 case 'a':

    7 case 'A':8 System.out.println("Abrir puerta");9 break;1011

    case 'c':

    12 case 'C':13 System.out.println("Cerrar puerta");14 break;1516 case 't':

    17 case 'T':18 System.out.println("Comprobar circuitos");19 break;20

    21 default:22 System.out.println("Opcion no contemplada");23 break;2425 }26

    27 }28 }

    La expresin del switch puede programarse todo lo compleja que seanecesario:

    1 public class Switch4 {2 public static void main (String[] args) {3 int Valor = 341;45 switch ((4*Valor+17)%3) {

    6 case 0:

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    54/339

    44 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    7 System.out.println("Primera opcion");

    8 break;910 case 1:11 System.out.println("Segunda opcion");12 break;1314 case 2:

    15 System.out.println("Tercera opcion");16 break;17

    18 }1920 }21 }

    2.4.3 switch anidados

    Resulta muy habitual tener que realizar selecciones basadas en dos niveles;el siguiente ejemplo muestra una de estas situaciones: estamos realizando laspginas Web de un concesionario de vehculos de la marca SEAT y en un momentodado el usuario puede escoger entre las siguientes opciones:

    Amarillo Blanco RojoIbiza SI SI SICrdoba NO SI NOToledo NO SI SI

    Para programar la eleccin de opcin por parte del usuario, resulta adecuadoemplear una instruccin switch anidada:

    1 public class Switch5 {2 public static void main (String[] args) {

    3 char Modelo = 'c', Color = 'r';4 boolean Disponible = false;56 switch (Modelo) {7 case 'i':8 switch (Color){9 case 'a':

    10 Disponible = true;

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    55/339

    JESS BOBADILLA SANCHO ([email protected]) CAPTULO 2: ESTRUCTURAS DE CONTROL 45

    11 break;

    12 case 'b':13 Disponible = true;14 break;15 case 'r':16 Disponible = true;17 break;18 default:

    19 System.out.println("Opcion no contemplada");20 break;21 }

    22 break;2324 case 'c':25 switch (Color) {26 case 'a':27 Disponible = false;

    28 break;29 case 'b':30 Disponible = true;

    31 break;32 case 'r':33 Disponible = false;34 break;35 default:36 System.out.println("Opcion no contemplada");37 break;

    38 }39 break;4041 case 't':42 switch (Color) {43 case 'a':44 Disponible = false;45 break;46 case 'b':47 Disponible = true;

    48 break;49 case 'r':

    50 Disponible = true;51 break;52 default:53 System.out.println("Opcion no contemplada");54 break;55 }56 break;

    5758 default:

    59 System.out.println("Opcion no contemplada");

  • 8/3/2019 JAVA Atraves de Ejemplos-NECESARIO

    56/339

    46 JAVA A TRAVS DE EJEMPLOS JESS BOBADILLA SANCHO ([email protected])

    60 break;

    61 }6263 if (Disponible)64 System.out.println("Opcion disponible");65 else66 System.out.println("Opcion no disponible");67

    68 }69 }

    En el ejercicio anterior (Switch5) la primera instruccin switch consulta elmodelo del vehculo (i: Ibiza, c:Crdoba, t: Toledo), los switchs anidados seencargan de tratar