Вы находитесь на странице: 1из 74

Java WikiManual

PDF generado usando el kit de herramientas de fuente abierta mwlib. Ver http://code.pediapress.com/ para mayor informacin. PDF generated at: Fri, 02 Jul 2010 18:20:52 UTC

Contenidos
Artculos
Programacin en Java Programacin en Java/Instalacin JDK Programacin en Java/Caractersticas del lenguaje Programacin en Java/Primer programa Programacin en Java/Variables Programacin en Java/Literales Programacin en Java/La palabra reservada final Programacin en Java/Secuencias de Escape Programacin en Java/Arrays Programacin en Java/Operadores Programacin en Java/Operadores aritmticos Programacin en Java/Operadores relacionales Programacin en Java/Operadores booleanos Programacin en Java/Operadores de bits Programacin en Java/Operadores de asignacin Programacin en Java/Operador cast Programacin en Java/Precedencia de operadores Programacin en Java/Estructuras de control Programacin en Java/Estructuras de seleccin Programacin en Java/Sentencia if-else Programacin en Java/Sentencia switch Programacin en Java/Operador if-else Programacin en Java/Estructuras de iteracin Programacin en Java/Sentencia while Programacin en Java/Sentencia do-while Programacin en Java/Sentencia for Programacin en Java/Sentencia break Programacin en Java/Sentencia continue Programacin en Java/Funciones Programacin en Java / Parmetros de una funcin Programacin en Java/Clusula return Programacin en Java/Funciones recursivas Programacin en Java/Programacin Orientada a Objetos Programacin en Java/Clases 1 4 7 9 10 13 15 15 16 18 18 21 22 24 27 28 29 31 31 32 36 39 40 41 43 45 47 48 48 50 53 53 55 56

Programacin en Java/Ejemplos de Implementacin Programacin en Java/Ejercicios Prcticos Programacin en Java/Objetos Programacin en Java/Encapsulamiento Programacin en Java/Herencia Programacin en Java/Polimorfismo Programacin en Java/La clase String Programacin en Java/La clase Vector Programacin en Java/La clase Hashtable Programacin en Java/Imprimir en Pantalla Programacin en Java/Applets Programacin en Java/Palabras reservadas Programacin en Java / Prcticas

58 58 59 60 60 60 61 62 64 65 65 65 67

Referencias
Fuentes y contribuyentes del artculo Fuentes de imagen, Licencias y contribuyentes 68 70

Licencias de artculos
Licencia 71

Programacin en Java

Programacin en Java

Programacin en Java
Java es un lenguaje de programacin de propsito general y orientado a objetos desarrollado por Sun Microsystems.

Sobre este libro


Este material es un wikilibro, puedes editarlo segn las normas y polticas . Todas las sugerencias, comentarios y modificaciones son bienvenidas siempre y cuando contribuya a mejorar la calidad del contenido. Este libro se realiza con la intencin de ensear a programar en Java. Todo el contenido trata de una introduccin al lenguaje. En el caso de que quieras ver tpicos avanzados o de programacin en general, los temas sern reservados para otros libros. Solo necesitas un conocimiento mnimo de computacin para leer y comprender este material. Si tienes alguna duda, o alguna parte te parece muy difcil de seguir, puedes realizar tus comentarios en la pagina de discusin. No prometemos que sern respondidas las consultas sobre el lenguaje Java, si puedes esperar respuestas sobre los temas aqu tratados. Este libro no est exento de errores u omisiones. Tratamos que los ejemplos expuestos aqu, estn probados. Pero no ofrecemos ninguna garanta. Puede ser que algn programa no funcione como se explica aqu debido a que fueron probados en circunstancias diferentes. Te alentamos a que notifiques o edites cualquier error. Este material se comenz a editar con la especificacin de Sun Microsystems para el JDK 1.4.2. Existen, al momento de escribir el libro, modificaciones en el lenguaje que sern tratadas a medida que esta obra se complete. Sun, Sun Microsystems, Java y todas las marcas comerciales que contienen los trminos Sun y Java que aparecen en este sitio son marcas comerciales o marcas registradas de Sun Microsystems, Inc. en los EE.UU. y otros pases. Se est realizando una versin para imprimir en Versin para imprimir.

Temas Pendientes
Recin comenzamos. Algo ya tenemos para ir revisando. Un poco de pintura por aqu, un poco de retoque por all. Algunas partes ni siquiera tienen los cimientos. Animamos al que quiera contribuir, es libre de hacerlo. Pero si no tienes conocimientos o tiempo para escribir y quieres que un tema en particular aparezca en esta obra, puedes incluirlo en este listado. Aqu enumeramos el contenido que falta. Recuerda que nicamente incluimos tpicos sobre una introduccin al lenguaje Java. Instalacin del JDK. Breve explicacin de los elementos de un programa. Prcticas de todos los temas. Entornos de desarrollo.

Programacin en Java

ndice de contenidos
1. 2. 3. 4. Instalacin JDK Caractersticas del lenguaje Primer programa Variables

1. Literales 2. La palabra reservada final 3. Secuencias de Escape 4. Arrays 5. Operadores 1. 2. 3. 4. 5. 6. Operadores aritmticos Operadores relacionales Operadores booleanos Operadores de bits Operadores de asignacin Operador cast

7. Precedencia de operadores 6. Estructuras de control 1. Estructuras de seleccin 1. Sentencia if-else 2. Sentencia switch 3. Operador if-else 2. Estructuras de iteracin 1. Sentencia while 2. Sentencia do-while 3. Sentencia for 3. Saltos 1. Sentencia break 2. Sentencia continue 7. Funciones 1. Parmetros de una funcin 2. Clusula return 3. Funciones recursivas 8. Programacin Orientada a Objetos 1. Clases 1. Ejemplos de Implementacin 2. Ejercicios Prcticos Objetos Ciclo de vida de un objeto Paquetes Encapsulamiento Herencia Interfaces

2. 3. 4. 5. 6. 7.

8. Polimorfismo 9. Excepciones

Programacin en Java 10. Almacenamiento en Java 1. 2. 3. 4. 5. La clase String La clase StringBuffer La clase StringTokenizer Vectores (Arreglos) Colecciones (JFC)

1. La clase ArrayList 2. La clase Vector 3. La clase Stack 4. La clase Hashtable 5. La clase HashSet 6. La clase LinkedList 7. La clase TreeMap 8. La clase StringTokenizer 11. Entrada y Salida 1. Imprimir en Pantalla 2. Lectura del Teclado 12. Interfaz Grfica 1. Componentes Swing 2. Eventos 3. Applets 13. Threads 1. Qu es un thread? 2. MPI en Java 14. Acceso a bases de datos 1. Acceso mediante JDBC 2. Acceso mediante JPA 3. Apache Derby 15. Comunicaciones mediante redes IP 16. Aplicaciones WEB 1. Servlets 2. JSP 3. Spring Framework 17. Clusters Terracota 18. Apndices 1. Palabras reservadas 1. Ejemplos prcticos 1. Crear un PDF en Java

Programacin en Java

Prcticas de Java
Para reforzar el aprendizaje del lenguaje es til que practiquemos con l. En esta seccin se estn desarrollando una serie de prcticas correspondientes a las secciones del libro. Esta parte esta en estado "experimental" Prcticas

Programacin en Java/Instalacin JDK


Instalacin en Windows
Gua de instalacin del Java Development Kit en Windows
1. En primer lugar, descargue el archivo de la instalacin desde la pestaa downloads desde http://java.sun.com/ javase/downloads/index.jsp 1. Busque el JDK 6 Update 17 (o ltima actualizacin), Development Kit, y baje el fichero de instalacin para Windows 2. (tambin se puede encontrar la versin para Windows x64): jdk jdk-6u17-windows-i586-p.exe 2. Trabaje como usuario Administrador. 3. Ejecute el fichero de la instalacin que haya bajado, y conteste afirmativamente a lo que le pregunte el asistente de la instalacin. 1. Se le propondr una carpeta en la que depositar la instalacin, tpicamente: C:\Archivos de programa\Java\jdk6u7 (puede indicarle una ubicacin alternativa). 4. El programa habr instalado completamente la mquina virtual, pero no el compilador javac. 1. Debe poner la ruta del compilador en la variable de entorno PATH. 2. Si la instalacin se ha hecho en el directorio indicado en el prrafo anterior, javac.exe se encontrar en: C:\Archivos de programa\Java\jdk6u7\bin 5. Entre en el Panel de control, en el men de opciones avanzadas del Sistema, y modifique el valor de la variable de entorno PATH, aadindole al final esta ruta (hay que separarla mediante un ; de la ltima ruta que aparezca escrita en la variable).

Instalacin en GNU/Linux
Gua de instalacin del Java Development Kit mediante repositorio:
El cambio de licencia del JDK de Sun permiti que las principales distribuciones de GNU/Linux (y BSD) incorporasen OpenJDK en sus repositorios de software de forma que la instalacin y actualizaciones se automatizan mediante las utilidades estndar de cada distribucin. Puede consultarse la documentacin que acompaa a las mismas para obtener ms informacin, aqu se muestran unos ejemplos para algunas distribuciones populares (estos ejemplos no significan ninguna preferencia sobre otras distribuciones no listadas).

Programacin en Java/Instalacin JDK Mandriva Para instalar en Mandriva Linux como root ejecutamos: # urpmi.update -a El comando anterior actualiza la base de datos de software disponible en los repositorios. A continuacin ejecutamos: # urpmi java-1.6.0-openjdk Opcionalmente podemos instalar otros paquetes relacionados: # # # # urpmi urpmi urpmi urpmi java-1.6.0-openjdk-src <--- fuentes de JDK java-1.6.0-openjdk-javadoc eclipse-jdt <--- Entorno de desarrollo Java para eclipse tomcat6 <--- Desarrollo de aplicacines web con java

El proyecto Apache jakarta contiene una extensa coleccin de libreras java de uso frecuente. Muchas se encuentran tamben disponibles como paquetes. Para ver el listado de libreras disponibles: # urpmf --name "jakarta" jakarta-commons-collections jakarta-commons-beanutils jakarta-commons-pool jakarta-commons-dbcp-tomcat5 jakarta-commons-httpclient jakarta-commons-io ... Las libreras (ficheros jar) quedarn instaladas bajo el directorio /usr/share/java. Peridicamente podemos actualizar el software mediante: # urpmi.update -a # urpmi --auto-select El comando urpmi --auto-select actualizar el JDK as como cualquier otro software ya instalado en la mquina de trabajo. Debian (Ubuntu, Mephis, etc...) Para instalar en Debian como root ejecutamos: # apt-get update El comando anterior actualiza la base de datos de software disponible en los repositorios. A continuacin ejecutamos: # apt-get install openjdk-6-jdk Opcionalmente podemos instalar otros paquetes relacionados:
# apt-get openjdk-6-source # apt-get openjdk-6-doc # apt-get eclipse-jdt # apt-get tomcat6 <--- Entorno de desarrollo Java para eclipse <--- Desarrollo de aplicacines web con java (En Debian Stable slo est disponible la versin 5.5) <--- fuentes de JDK

Programacin en Java/Instalacin JDK El proyecto Apache jakarta contiene una extensa coleccin de libreras java de uso frecuente. Muchas se encuentran tamben disponibles como paquetes. Para ver el listado de libreras disponibles:
# apt-cache search "libcommons" libcommons-collections3-java - A set of abstract data type interfaces and implementations libcommons-beanutils-java - utility for manipulating JavaBeans libcommons-pool-java - pooling implementation for Java objects libcommons-dbcp-java - Database Connection Pooling Services libcommons-httpclient-java - A Java(TM) library for creating HTTP clients libcommons-io-java - Common useful IO related classes ...

Las libreras (ficheros jar) quedarn instaladas bajo el directorio /usr/share/java. Peridicamente podemos actualizar el software mediante: # apt-get update # apt-get upgrade El comando apt-get upgrade actualizar el JDK as como cualquier otro software ya instalado en la mquina de trabajo. Otros sistemas Es importante resaltar que quizs el sistema Linux ms utilizado para aplicaciones java es RedHat o su variante Fedora, debido principalmente a que dicha compaa es propietaria de JBoss, un potente sistema basado en Java muy utilizado en entornos profesionales financieros. Sin embargo el autor de estas lneas no dispona de informacin fiable sobre la instalacin de Java en dicha distribucin, aunque considera oportuno mencionarla.

Gua de instalacin del Java Development Kit en Linux (sin usar repositorios, directamente de Sun.com):
1. En primer lugar, descargue el archivo de instalacin desde la pestaa donwloads desde: http://java.sun.com/ javase/downloads/index.jsp 1. Busque el JDK 6 Update 17 (o ltima actualizacin), Development Kit, y baje el fichero de instalacin para Linux (tambin se puede encontrar la versin para Linux x64): jdk-6u7-linux-i586.bin 2. Supngase que este fichero se deja en el directorio temporal /tmp . 2. Entre como superusuario (root) # su (pedir la contrasea, teclela y siga adelante) 3. Ubquese en el directorio a partir del que desea instalar el JDK. 1. Tpicamente /opt. 2. # cd /opt 4. Ejecute el fichero de la instalacin # /tmp/jdk-6u7-linux-i586.bin (conteste afirmativamente a lo que le pregunte) 5. Prepare un enlace simblico a la nueva instalacin del JDK # cd /usr/lib # mv java java.old # ln -s /opt/jdk1.6.0_07 java (en el segundo paso, el mv java java.old puede sustituirse por rm -f java, si est seguro de que desea eliminarlo) 6. Asegrese de que la variable de entorno PATH contiene el directorio /usr/lib/java/bin. 1. Si no lo tiene, modifique el fichero correspondiente segn la distribucin de Linux que utilice. Habitualmente sera en /etc/profile, y lo que habra que aadir es un par de lneas como las siguientes: 1. 2. 3. 4.

Programacin en Java/Instalacin JDK PATH="${PATH}:/usr/lib/java/bin" export PATH

Programacin en Java/Caractersticas del lenguaje


Es un lenguaje sencillo de aprender. Su sintaxis es la de C++ simplificada. Los creadores de Java partieron de la sintaxis de C++ y trataron de eliminar de este todo lo que resultase complicado o fuente de errores en este lenguaje. Java es un lenguaje orientado a objetos, aunque no de los denominados puros; en Java todos los tipos, a excepcin de los tipos fundamentales de variables (int, char, long...) son clases. Sin embargo, en los lenguajes orientados a objetos puros incluso estos tipos fundamentales son clases, por ejemplo en Smalltalk. El cdigo generado por el compilador Java es independiente de la arquitectura: podra ejecutarse en un entorno UNIX, Mac o Windows. El motivo de esto es que el que realmente ejecuta el cdigo generado por el compilador no es el procesador del ordenador directamente, sino que este se ejecuta mediante una mquina virtual. Esto permite que los Applets de una web pueda ejecutarlos cualquier mquina que se conecte a ella independientemente de qu sistema operativo emplee (siempre y cuando el ordenador en cuestin tenga instalada una mquina virtual de Java).

Caractersticas
Lenguaje totalmente orientado a Objetos. Todos los conceptos en los que se apoya esta tcnica, encapsulacin, herencia, polimorfismo, etc., estn presentes en Java. Disponibilidad de un amplio conjunto de libreras. Como ya se mencion anteriormente, Java es algo mas que un lenguaje. La programacin de aplicaciones con Java se basa no solo en el empleo del juego de instrucciones que componen el lenguaje, sino, fundamentalmente, en la posibilidad de utilizar el amplsimo conjunto de clases que Sun pone a disposicin del programador y con las cuales es posible realizar prcticamente cualquier tipo de aplicacin. Lenguaje simple. Java posee una curva de aprendizaje muy rpida. Resulta relativamente sencillo escribir applets interesantes desde el principio. Todos aquellos familiarizados con C++ encontrarn que Java es ms sencillo, ya que se han eliminado ciertas caractersticas, como los punteros. Debido a su semejanza con C y C++, y dado que la mayora de la gente los conoce aunque sea de forma elemental, resulta muy fcil aprender Java. Los programadores experimentados en C++ pueden migrar muy rpidamente a Java y ser productivos en poco tiempo. Distribuido Java proporciona una coleccin de clases para su uso en aplicaciones de red, que permiten abrir sockets y establecer y aceptar conexiones con servidores o clientes remotos, facilitando as la creacin de aplicaciones distribuidas. Interpretado y compilado a la vez Java es compilado, en la medida en que su cdigo fuente se transforma en una especie de cdigo mquina, los bytecodes, semejantes a las instrucciones de ensamblador. Por otra parte, es interpretado, ya que los bytecodes se pueden ejecutar directamente sobre cualquier mquina a la cual se hayan portado el intrprete y el sistema de ejecucin en tiempo real (run-time). Robusto Java fue diseado para crear software altamente fiable. Para ello proporciona numerosas comprobaciones en compilacin y en tiempo de ejecucin. Sus caractersticas de memoria liberan a los programadores de una familia entera de errores (la aritmtica de punteros), ya que se ha prescindido por completo los punteros, y la recoleccin de basura elimina la necesidad de liberacin explcita de memoria. Seguro (?) Dada la naturaleza distribuida de Java, donde las applets se bajan desde cualquier punto de la Red, la seguridad se impuso como una necesidad de vital importancia. A nadie le gustara ejecutar en su ordenador programas con acceso total a su sistema, procedentes de fuentes desconocidas. As que se implementaron barreras

Programacin en Java/Caractersticas del lenguaje de seguridad en el lenguaje y en el sistema de ejecucin en tiempo real. Indiferente a la arquitectura Java est diseado para soportar aplicaciones que sern ejecutadas en los ms variados entornos de red, desde Unix a Windows Nt, pasando por Mac y estaciones de trabajo, sobre arquitecturas distintas y con sistemas operativos diversos. Para acomodar requisitos de ejecucin tan diversos o variopintos, el compilador de Java genera bytecodes: un formato intermedio indiferente a la arquitectura diseado para transportar el cdigo eficientemente a mltiples plataformas hardware y software. El resto de problemas los soluciona el intrprete de Java. Portable La indiferencia a la arquitectura representa slo una parte de su portabilidad. Adems, Java especifica los tamaos de sus tipos de datos bsicos y el comportamiento de sus operadores aritmticos, de manera que los programas son iguales en todas las plataformas. Estas dos ltimas caractersticas se conocen como la Mquina Virtual Java (JVM). Alto rendimiento Multihebra Hoy en da ya se ven como terriblemente limitadas las aplicaciones que slo pueden ejecutar una accin a la vez. Java soporta sincronizacin de mltiples hilos de ejecucin (multithreading) a nivel de lenguaje, especialmente tiles en la creacin de aplicaciones de red distribuidas. As, mientras un hilo se encarga de la comunicacin, otro puede interactuar con el usuario mientras otro presenta una animacin en pantalla y otro realiza clculos.

Dinmico El lenguaje Java y su sistema de ejecucin en tiempo real son dinmicos en la fase de enlazado. Las clases slo se enlazan a medida que son necesitadas. Se pueden enlazar nuevos mdulos de cdigo bajo demanda, procedente de fuentes muy variadas, incluso desde la Red. Produce applets Java puede ser usado para crear dos tipos de programas: aplicaciones independientes y applets. Las aplicaciones independientes se comportan como cualquier otro programa escrito en cualquier lenguaje, como por ejemplo el navegador de Web HotJava, escrito ntegramente en Java. Por su parte, las applets son pequeos programas que aparecen embebidos en las pginas Web, como aparecen los grficos o el texto, pero con la capacidad de ejecutar acciones muy complejas, como animar imgenes, establecer conexiones de red, presentar mens y cuadros de dilogo para luego emprender acciones, etc.

Programacin en Java/Primer programa

Programacin en Java/Primer programa


Nuestro primer programa ser sencillo y mostrar el saludo "Hola Mundo" en la pantalla. Para crear el programa necesitaremos realizar los siguientes pasos: 1. Crear el cdigo fuente. Un archivo de cdigo fuente contiene texto escrito en el lenguaje de programacin Java. Se puede utilizar un simple editor de texto para crear y editar el cdigo. 2. Compilar el cdigo fuente. El compilador translada el cdigo fuente en instrucciones que la mquina virtual de Java pueda entender. El compilador crea esas instrucciones en un archivo bytecode. 3. Ejecutar el programa. El intrprete Java, instalado en el sistema operativo, implementa la mquina virtual de Java. Este intrprete transforma el bytecode en instrucciones que pueda entender el sistema operativo.

Escribiendo el cdigo
Para crear el cdigo fuente, abrimos un editor, por ejemplo, el Bloc de Notas de Windows, o el 'vim' en cualquier Unix, y escribimos: /* El programa Hola Mundo muestra un saludo en la pantalla */ public class HolaMundo { public static void main(String[] args){ //Muestra "Hola Mundo!" System.out.println("Hola Mundo!"); } } Hay que tener cuidado de copiar el cdigo tal cual se muestra aqu. El lenguaje Java es sensible a las maysculas y minsculas, entonces HolaMundo no es lo mismo que holamundo. Una vez terminado lo guardamos en un archivo con el nombre de "HolaMundo.java". Compilando el cdigo==public class HolaMundo { public static void main(String[] args){ System.out.println("Hola Mundo!"); } } Una vez guardado el cdigo fuente, abrimos el MS-DOS o Command Prompt. Nos situamos en el directorio en donde se encuentra el archivo y luego ejecutamos el siguiente comando: javac HolaMundo.java Si todo sale bien, el compilador genera un archivo bytecode , HolaMundo.class en el mismo directorio en donde esta el programa. De lo contrario muestra los errores que contiene el cdigo.

Programacin en Java/Primer programa

10

Ejecutando el Cdigo
En el mismo directorio en donde estamos trabajando escribir el siguiente comando: java HolaMundo Esta vez escribimos el nombre del programa, pero sin la extensin. Si hemos realizado bien los pasos y tenemos instalado correctamente el JDK , tendremos en la pantalla el saludo: Hola Mundo!

Para saber ms
Mquina virtual de Java Bytecode

Programacin en Java/Variables
Las variables son la manera en que indicamos al compilador el espacio en memoria que debe de reservar para almacenar la informacin. Podemos acceder a un dato alojado en la memoria por medio de una variable. Toda variable tiene un nombre para poder identificarla y realizar operaciones. Antes de trabajar con alguna variable debemos declararla en el programa. Por ejemplo: String cliente; Aqu estamos reservando memoria para una variable de tipo String y la identificamos con el nombre cliente. De ahora en adelante si en el programa hablamos de cliente, estamos haciendo referencia a esa porcin de memoria y al valor que contiene. Podemos asignarle algn valor en el momento de declarar una variable. Por ejemplo: String cliente = "Isaac Newton"; Aqu reservamos memoria para una cadena de caracteres y le asignamos el valor "Isaac Newton". Tambin podemos declararla y en otro lugar del programa fijarle un valor : String cliente; // declaracin ... // El programa sigue cliente = "Isaac Newton"; // le damos un valor La sentencia para declarar una variable se resume como: Tipo_Dato Nombre_Variable [= Valor]; Definimos el tipo de dato, el nombre y opcionalmente su valor. Para ver como se utilizan las variables, podemos modificar el primer programa. Agregaremos una variable que contenga el texto que se mostrar en pantalla: public class HolaMundo { public static void main(String[] args){ String saludo = "Hola Mundo!"; System.out.println( saludo ); } }

Programacin en Java/Variables Definimos una variable de tipo String con el nombre "saludo". En la declaracin de la variable tambin la inicializamos con el valor "Hola mundo!". Luego llamamos al mtodo que imprimir el texto en la pantalla haciendo referencia a la variable. En el programa original, explcitamente introducamos el texto que se mostrara, ahora solo escribimos el nombre de la variable. Cuando el intrprete se encuentre con el nombre de esta variable, tendr que buscar valor que almacene en la memoria para mostrarlo por pantalla. Un variable puede cambiar su valor en el transcurso del programa. public class UsoVariables{ public static void main(String args[]){ String saludo; saludo = "Hola Mundo!"; System.out.println( saludo ); saludo = ("Estoy utilizando variables"); System.out.println( saludo ); } } Siempre debemos inicializar una variable. Al momento de leer el contenido de una variable, el compilador de Java siempre verifica que tenga un valor. De lo contrario el programa no compilar y mostrar el error. Un ejemplo de este caso: if (x > 0) { saludo = "Hola Mundo!!!"; } System.out.println( saludo ); En este caso el compilador mostrar un mensaje de error indicando que la variable x no se ha inicializado con ningn valor. Como se puede observar esta variable solo se inicia cuando se cumple una condicin, sin embargo se indica que va a ser utilizada siempre. El compilador detecta este posible error. Un ejemplo de solucin posible sera: int x = 1; if (x > 0) { saludo = "Hola Mundo!"; } System.out.println( saludo ); Agregando estas lneas al final del cdigo de la clase UsoVariables nos mostrara lo siguiente a la salida: Hola Mundo! Estoy utilizando variables Hola Mundo!!!

11

Programacin en Java/Variables

12

Nombre de la variable
El nombre debe ser nico en el contexto del programa. Adems debe seguir las siguientes reglas: No debe ser una palabra reservada del lenguaje o un literal booleano (true o false) Puede contener cualquier caracter Unicode, pero no debe comenzar con un nmero No debe contener los smbolos que se utilicen como operadores ( + , - , ?, etc ) Por convencin: Los nombres comienzan con una letra en minscula. Si un nombre consiste en mas de una palabra, se escribir sin espacios y cada palabra comenzar con una letra mayscula (por ejemplo : estaBienEsteNombre )

Tipo de variable
Cada variable debe tener un tipo de dato predefinido. Esto determina el rango de valores que puede almacenar y que operaciones se pueden realizar. Por ejemplo una variable de tipo entero puede almacenar nmeros sin decimales y puede realizarse operaciones aritmticas, pero no puede contener palabras. Existen dos categoras de variables: las de tipo primitivo o las referenciadas. Una variable de tipo primitivo accede al valor asignado directamente. Las referenciadas se accede a travs de un puntero, es decir que no almacenan un valor sino una direccin de memoria. Estas ltimas son utilizadas por las matrices , las clases e interfaces.

Tipos de datos primitivos


Tipo Tamao y formato enteros byte short int long 8 bits - complemento a 2 16 bits - complemento a 2 32 bits - complemento a 2 64 bits - complemento a 2 nmeros reales float double 32 bits - IEEE 754 64 bits - IEEE 754 otros char 16 bits - caracteres UNICODE '\u0000' al '\uffff' true o false Rango

boolean 1 bit

En otros lenguajes de programacin, el formato o el tamao de los tipos primitivos dependen del microprocesador o del sistema operativo que se estn ejecutando. En cambio, Java pretende ser independiente de la plataforma, y mantiene los formatos sin cambios. Para los caracteres alfanumricos utiliza la codificacin UNICODE de 16 bits para permitir la inclusin de varios alfabetos.

Para saber ms
Variables Tipos de datos

Programacin en Java/Literales

13

Programacin en Java/Literales
Pueden existir varias formas de representar un valor. Por ejemplo al tener el nmero 100, significa exactamente 100 en una base decimal, pero hablamos de 4 en una base binaria o 256 en hexadecimal. Para evitar ambigedades, en Java se establecieron algunas normas.

Literales enteros
Existen 3 maneras de representar el valor de un nmero entero. Si se escribe el nmero solamente, este representa un nmero en base decimal. Si tiene un cero adelante estamos escribiendo octales y si tiene el prefijo "0x" el valor est representado en base hexadecimal. Por ejemplo:
Base de numeracin Decimal Octal Hexadecimal valor valor decimal

100 0100

100 64

0x100 256

Para indicarle al compilador que un valor dado es de tipo long debemos incluir el sufijo L: long largo= 800L;

Literales de nmeros reales


Al tratar con nmeros reales introducimos el punto decimal o utilizamos la notacin cientfica. Por ejemplo: double v = 300000.0; double v = 3.0e+5; // notacin normal // notacin -cientfica . La letra e denota la mantisa, y da igual si la escribimos en

En el ejemplo el valor 3.0e+5 significa mayscula o minscula.

Para determinar si estamos hablando de float o double, al nmero se le agrega un sufijo: F o f para float y D o d para double. Si no colocamos un sufijo el compilador lo toma como double.

Literales char
Una variable de tipo char almacena un carcter Unicode. Este sistema de codificacin ampla la escasez de opciones que tiene la codificacin ASCII para incluir otros alfabetos. Podemos escribir en griego, hebreo o en vietnamita sin que el compilador proteste. Un literal de tipo char se expresa encerrando el carcter entre comillas simples: char caracter = 'z'; Otra forma de representar un carcter es indicando el cdigo Unicode en hexadecimal, anteponiendo los smbolos \u, todo entre comillas simples. De esta manera el smbolo arroba ( @ ) se escribe: char arroba = '\u0040'; El primer byte de la codificacin Unicode es la misma que el viejo y querido ASCII

Programacin en Java/Literales

14

Literales boolean
Sencillamente true o false (verdadero o falso) sin comillas y en minscula. No tienen correlacin con ningn nmero como ocurre en el lenguaje C que tenamos al 0 como false y al 1 como true.

Literales String
El tipo String no es un tipo de dato primitivo. Pero se comporta como si lo fuera. Para indicar una cadena de caracteres se encierran entre comillas dobles. String cadena = "Time is money";

Ejemplos de valores literales


Literal "Gato" "G" 'G' 123 8000L 3.14 3.14D 3.14f Tipo de dato String String char int long double double float

26.45e-45 double '\u00ff' 'c' "true" true char char String boolean

En los sufijos que tenemos para identificar el tipo de dato no importa si son en minscula o mayscula. Pero por convencin se utilizan en mayscula, pues se puede confundir al leer el cdigo una ele minscula ( l ) con un uno ( 1 ). Hay que tener cuidado de no olvidarnos los sufijos cuando sean necesarios. El siguiente cdigo da un error en tiempo de compilacin: float f = 3.14; El compilador nos dar el error de "possible loss of precision" (posible prdida de precisin). Esto se debe a que sin la F atrs, estamos indicando un valor de tipo double. El compilador se niega a comprimir un double de 64 bits en un float de tan solo 32 bits. Lo solucionamos de esta manera: float f = 3.14f; Y le alegramos la vida a un compilador gruon.

Programacin en Java/La palabra reservada final

15

Programacin en Java/La palabra reservada final


En una aplicacin posiblemente nos encontremos con algn valor que permanece constante durante la ejecucin. Podemos definirla como una variable comn pero perderamos el control. Por all, en algn descuido, se cambiara de valor pero no nos enteraramos. Podemos agregar a la definicin de variable el modificador final. La sintaxis es la siguiente: final tipo_variable nombre de variable [= valor]; Por ejemplo : final int unaConstante = 10; Si tratamos de modificar el valor de esta constante, el compilador indicar un error. Una vez definido el valor no se puede modificar.

Programacin en Java/Secuencias de Escape


Las secuencias de escape son pequeas constantes que nos brindan una gran utilidad, para comprenderlo mejorcito este ejemplo (en consola): public class SecEsc01 { public static void main(String args[]) { System.out.println("Este es un ejemplo de Secuencias de Escape"); } } Este ejemplo presenta una linea de texto, pero, que pasa si queremos este texto en tres lineas?, tendriamos que escribir : public class SecEsc02 { public static void main(String args[]) { System.out.println("Este es un ejemplo"); System.out.println("de"); System.out.println("Secuencias de Escape"); } } Es algo mas tedioso, menos mal que existen las secuencias de escape en Java, la cual nos ahorraria el trabajo de la siguiente manera public class SecEsc03 { public static void main(String args[]) { System.out.println("Este es un ejemplo\nde \nSecuencias de Escape"); } } Pero este es solo un ejemplo, pero que pasa si queremos una pequea tabulacion, tendriamos que teclear la barra espaciadora hasta una medida de espacio de la que queremos, java tamabien solucion esto de la siguiente manera:

Programacin en Java/Secuencias de Escape public class SecEsc04 { public static void main(String args[]) { System.out.println("\tTexto tabulado"); } } A continuacin hay una lista de secuencias de escape: \n -----> Nueva Linea. \t -----> Tabulador. \r -----> Retroceso de Carro. \f -----> Comienzo de Pagina. \b -----> Borrado a la Izquierda. \\ -----> El caracter "\". \' -----> El caracter "'". \" -----> El caracter '"'.

16

Programacin en Java/Arrays
En java a diferencia del lenguaje C, existe un tipo de variable especial, el Array. Este tipo de variables no es ms que un conjunto secuencial de memoria a las que se accede a travs de un ndice de posicin. Los arreglos en Java son objetos, por lo que cuentan con propiedades y mtodos para manipularlos. Se pueden declarar arreglos de tipos de datos primitivos y de objetos. Ms abajo tienes la sintaxis bsica de declaracin de arrays. Sintaxis: tipodedato nombre [] [= new tipodedato[capacidad]] o tipodedato[] nombre [= new tipodedato[capacidad]] Como puedes observar puedes inicializar un array al momento de declararlo o postergar esta operacin para cuando sea necesario. Para inicializar un array existen 2 maneras: int[] arreglo=new int[4] o int[] arreglo={100,200,302,400} Como podrs concluir la primera declaras el array nada ms dicindole la cantidad de memoria secuencial que se debe reservar, en el segundo ejemplo se inicializa el array dndole los valores que va a contener (obviamente la cantidad de memoria secuencial reservada sera igual a la cantidad de elementos insertados). Al momento de inicializar un arreglo de la manera : int[] arreglo=new int[4] cada posicin del arreglo sera inicializada con el valor por defecto del tipo de variable. Por ejemplo si el arreglo si el arreglo es de tipo boolean, todas las posiciones del arreglo sern inicializadas con el valor false (ya que este es valor por defecto de este tipo de dato), por el contrario si el arreglo fuese de un tipo no primitivo, el valor que contendr cada casilla sera null. A continuacin tienes una lista de los valores por defecto de cada tipo de dato Tipo de Dato-->Valor byte-->0 short-->0 int-->0

Programacin en Java/Arrays long-->0 float-->0.0 double-->0.0 char-->/u0000 boolean-->false Object (Cualquier tipo de Objeto)-->null Para obtener el tamao de un array de manera dinmica se utiliza la propiedad .length, esta propiedad es comn para todos los array . Tambin es importante saber que los arreglos se empiezan a enumerar desde el numero (0) cero por tanto para acceder al valor almacenado en la ultima posicin debers colocar el tamao del arreglo menos 1 unidad. Al momento de tratar de acceder a una posicin fuera del rango del arreglo se lanzara un exception de tipo java.lang.ArrayIndexOutOfBoundsException (esta exception es una exception no chequeada es por eso que no es necesario colocar un bloque try/catch en el cdigo) Pasaremos con un ejemplo: public class Arrays01 { public static void main(String args[]) { int ita_nro[] = new int[4]; int it_cont; for (it_cont = 0;it_cont < 4; it_cont ++){ ita_nro[it_cont] = it_cont * 2; System.out.println(ita_nro[it_cont]); } } } Joe Herbert Arroyo Pea Jesus M. Baez R. Alberto Ladrn de Guevara Herrero.

17

Programacin en Java/Operadores

18

Programacin en Java/Operadores
Un operador realiza una funcin, toma uno o ms argumentos y devuelve un resultado. Cuando vimos las variables, definimos un tipo de dato con un conjunto de operaciones asociadas. Es de esperar que podamos realizar operaciones aritmticas con nmeros y lgicas con los booleanos. Estas operaciones se representan mediante operadores. Los operadores, al igual que los mtodos, se pueden sobrecargar, es decir se puede redefinir su funcionalidad dependiendo de los tipos de datos de los operandos que reciba. As, podemos indicar que el operador (+) realice una suma aritmtica si los operandos que recibe son dos enteros y una concatenacin si recibe una cadena y otro objeto.

Programacin en Java/Operadores aritmticos


Realizan las operaciones aritmticas bsicas: suma (+), resta (-), multiplicacin (*) ,divisin (/) y mdulo(%) para datos de tipo numrico, tanto enteros como reales. Estas son operaciones binarias porque admiten dos operandos. Ejemplo de utilizacin de estos operadores: public class Aritmetica{ public static void main(String[] args){ int i = 12; int j = 10; int suma = i + j; int resta = i - j; int mult = i * j; int div = i / j; int modulo = i % j; System.out.print("Suma :"); System.out.println(suma ); System.out.print("Resta :"); System.out.println(resta); System.out.print("Multiplicacion :"); System.out.println(mult); System.out.print("Division :"); System.out.println(div); System.out.print("Modulo :"); System.out.println(modulo); } } El resultado de estas operaciones no puede quedar almacenado en una variable de tipo short o byte, por ms pequeo que sea. Si tramos de compilar esto: short i = 1; short j = 1; short x = i + j;

Programacin en Java/Operadores aritmticos Tendremos un "possible lost of precision" como respuesta, por mas que el pequeito 2 entra holgadamente en una variable short. El compilador evita que al utilizar estos tipos de datos no nos pasemos de largo. Pero de todas formas me voy a vengar. Analicemos el siguiente cdigo: public class IntGrande{ public static void main(String[] args){ int j = 2147483647; int i = j + 1; System.out.println("El valor obtenido es " + i); } } El valor 2147483647 (es decir 2^31 - 1 ) es el ms grande que puede tolerar un int. Pero veamos que pasa al sumarle uno ms. El compilador se queda mudo y cae en nuestra trampa. Ejecutamos el programa y obtenemos: El valor obtenido es -2147483648 Desastroso, Verdad? Veamos lo que pas: Tenamos el valor mximo para los int: 01111111111111111111111111111111 : 2147483647 en nmeros binarios. 00000000000000000000000000000001 : le sumamos 1 10000000000000000000000000000000 : Resultado: -2147483648 complemento a 2 Esta anomala se la conoce como overflow (desbordamiento). El procesador puede identificar un resultado con este problema comparando los signos. Es de esperar que si sumamos dos nmeros positivos, no nos de como resultado un nmero negativo. Pero el intrprete de Java no nos avisa, por lo tanto tenemos que cuidarnos al trabajar cerca de los extremos. Sigamos metindonos en embrollos. Veamos ahora que ocurre si tratamos de dividir cualquier numero por cero. Para la verificacin escribimos este programa: public class DivCero{ public static void main(String[] args){ int x = 5; int y = 0; int z = x/y; System.out.println(z); } } No tenemos noticias al compilar. Pero al ejecutar el programa, el intrprete nos manda a pasear con la siguiente nota: Exception in thread "main" java.lang.ArithmeticException: / by zero Veremos mas adelante como controlar el nimo del interprete cuando ocurren estos errores, aqu conocidos como excepciones. La moraleja es que no se puede dividir un entero por cero. Sigamos dando pelea, no nos dejemos intimidar. Probemos que ocurre con los nmeros reales: public class DivCeroFloat{ public static void main(String[] args){

19

Programacin en Java/Operadores aritmticos float x = 5.0f; float y = 0.0f; float z = x/y; System.out.println(z); } } Compilamos y no escuchamos nada. Ejecutamos el programa... Infinity Ni error ni cosas raras, el float se aguant los malos tratos. Esto ocurre porque los nmeros reales en su representacin binaria soportan el valor infinito.

20

Operadores aritmticos unarios


Dentro de los operadores aritmticos tenemos los unarios + y que simplemente operan con el signo de un valor dado. Por ejemplo: int h = -1; int m = +h; // es equivalente a m = h * (+1) int n = -h; // es equivalente a n = h * (-1) El operador se encarga de cambiar el signo, y el + sencillamente deja el signo como est. Nuevamente no podemos almacenar el resultado en enteros cortos, los tipos byte y short los transforma en int. Dentro del catlogo de operadores tenemos algunos unarios ms. Se trata del auto incremental ++ y del auto decremental --. Respectivamente, suma y resta una unidad al valor. Ambos operadores pueden ser sufijos, es decir se coloca antes del operando o posfijo que se sita detrs. Veamos algunos ejemplos: int i = 1; i++; ++i; i--; --i; En este ejemplo estamos incrementado y decrementando el valor de i. A priori parece que los operadores funcionan igual, tanto como posfijo como sufijo, pero su comportamiento es diferente. Observemos lo que ocurre en este ejemplo: public class Diferentes{ public static void main(String[] args){ int i = 2; int j = 2; System.out.println(i++); System.out.println(++j); System.out.print("Estado Final (i) :"); System.out.println(i); System.out.print("Estado Final (j) :"); System.out.println(j); } }

Programacin en Java/Operadores aritmticos Partiendo del mismo valor, vemos que j se increment, mientras que la variable i se mostr sin cambios. Si colocamos el operador como sufijo, primero se evala la variable y luego se realiza la operacin. En el caso de la variable i, antes de incrementar su valor se mostr por pantalla. Para la variable j el procedimiento fue inverso. Antes de mostrar su valor se increment.

21

Programacin en Java/Operadores relacionales


Revisando algunas definiciones matemticas, nos enteramos que los nmeros conforman un conjunto ordenado. Cada uno tiene una posicin relativa. Sabemos que el 2 "es menor que" el 4 y que el 6 "es mas grande que" el 1. Al comparar dos nmeros, realizamos una funcin de relacin. En java disponemos de los operadores relacionales para verificar si se cumple una relacin. Por ejemplo el operador de equivalencia ( == ) nos devuelve un valor de verdadero si los operandos son iguales. Estas operaciones comparan dos valores nmericos y retorna con un valor booleano.

Operadores relacionales
Operador Utilizacin > >= < <= == != A>B A >= B A<B A <= B A == B A != B Resultado verdadero si A es mayor que B verdadero si A es mayor o igual que B verdadero si A es menor que B verdadero si A es menor o igual que B verdadero si A es igual a B verdadero si A es distinto de B

Aqu tenemos un programa para ver el funcionamiento de estos operadores : public class Relaciones { public static void main(String args[]){ int i = -3; byte b = 5; float f = 1e-10f; double d = 3.14; boolean b1 = i > i; boolean b2 = i < b; boolean b3 = b <= f; boolean b4 = f >= d; boolean b5 = d != 0; boolean b6 = 1 == f; System.out.println( System.out.println( System.out.println( System.out.println( System.out.println( System.out.println( } i i b f d 1 + + + + + + " " " " " " > " + i + " = " + b1); < " + b + " = " + b2); <= " + f + " = " + b3); >= " + d + " = " + b4); != " + 0 + " = " + b5); == " + f + " = " + b6);

Programacin en Java/Operadores relacionales

22

} No nos olvidemos de los char, que tambin participan. Podemos comparar caracteres, pues internamente estn almacenados como nmeros. char a = 'A'; char b = 'B'; boolean x = a > b; Entre los booleanos solo se permiten los operadores de equivalencia, es igual (==) o es distinto (!= ) boolean x = true; boolean y = x == x; boolean z = x != y;

Programacin en Java/Operadores booleanos


Como deben suponer, trabajan con operandos booleanos. Realizan las operaciones lgicas de conjuncin (AND),disyuncin (OR) ,negacin ( NOT ) y la disyuncin exclusiva ( XOR ).

Operadores booleanos
Nombre Operador Utilizacin AND OR NOT AND OR XOR && || ! & | ^ A && B A || B !A A&B A|B A^B Resultado verdadero cuando A y B son verdaderos. Evaluacin condicional. verdadero cuando A o B son verdaderos. Evaluacin condicional. verdadero si A es falso. verdadero cuando A y B son verdaderos. Siempre evala ambos operandos. verdadero cuando A o B son verdaderos. Siempre evala ambos operandos. verdadero cuando A y B son diferentes

Cada una de estas operaciones tiene asociada una tabla de verdad. Esto nos permite ver el resultado de un operador aplicado a las distintas combinaciones de valores que pueden tener los operandos. A continuacin mostraremos como se comporta el operador AND mediante su tabla de verdad. public class TablaAnd { public static void main(String args[]){ boolean x = true; boolean y = false; boolean a1 = x && x; boolean a2 = x && y; boolean a3 = y && x; boolean a4 = y && y; System.out.println("Tabla System.out.println( x + " System.out.println( x + " System.out.println( y + " de verdad AND " + x AND " + y AND " + x de la + " = + " = + " = conjuncion"); " + a1 ); " + a2 ); " + a3 );

Programacin en Java/Operadores booleanos System.out.println( y + " AND " + y + " = " + a4 ); } } Si probamos de quitar un ampersand ( & ) del operador, vemos que obtenemos los mismos resultados. Existen dos operadores AND, uno con dos smbolos & y el otro con uno solo. Tambin tenemos dos operadores OR. boolean x1 = operando1 && operando2; boolean x2 = operando1 & operando2; boolean y1 = operando1 || operando2; boolean y2 = operando1 | operando2; Parece extrao, sobre todo porque tienen la misma tabla de verdad. Pero internamente tienen un comportamiento diferente. Cuando estamos en presencia de un operador con un solo smbolo, siempre se evalan ambos operandos. En cambio para el operador con el smbolo repetido, su evaluacin cambia segn el valor del primer operando. Por ejemplo tenemos la siguiente operacin. boolean x = true && false; El resultado es falso, pero el intrprete tiene que mirar el segundo operando para saberlo. boolean x = false && true Aqu ni se molesta en mirar el ltimo operando, porque la operacin AND es verdadera solamente cuando ambos operandos son verdaderos. En el caso del operador OR, se evala el segundo operador si el primero es falso. Cuando es verdadero, no tiene en cuenta el otro operando. El resultado es verdadero sin importar el valor del segundo. Veamos un caso extremo para mostrar como funciona la evaluacin condicional. Tenemos el siguiente programa en donde pretendemos hacer saltar al intrprete con un error. public class Condicional { public static void main(String args[]){ int x = 0; int y = 2; boolean b = ( x != 0 ) && ( ( y / x ) != 0 ); System.out.println(b); } } Sin ningn tipo de emocin, aburridamente el intrprete nos avisa que el resultado es "false". Ahora ver. Quitemos un smbolo & y quedmonos con uno solo. El resultado es otro : java.lang.ArithmeticException: / by zero La primera vez verific que x!=0 era falso, entonces dio por terminada la operacin con el resultado falso. Cuando cambiamos de operador, evalu los dos operandos y cay en nuestra trampa. Tuvo que calcular cuanto es y / x dando luego un error de divisin por cero. Los operadores booleanos son muy amigos de los relacionales. Se llevan bien porque los ltimos dan resultados booleanos. Entre ambos tipos de operadores se pueden construir instrucciones mas complejas.

23

Programacin en Java/Operadores booleanos Por ejemplo, queremos saber si un nmero est dentro de un rango. Solo tenemos que compararlo con los extremos: int y = 4; boolean x = ( y > 3 ) && ( y < 6 ); Ahora deseamos saber si una variable tiene el valor "a" no importando si es mayscula o minscula. char c = 'b'; boolean x = ( c == 'a' ) || ( c == 'A' ); No olviden que el operador de equivalencia (==) tiene dos smbolos igual (=), si colocan uno solo les dar un error de asignacin.

24

Programacin en Java/Operadores de bits


Como sabrn, los datos en una computadora internamente se representan en cdigo binario. El microprocesador solo entiende de ceros y unos. Luego mediante una serie de procesos nosotros vemos a este cdigo ya transformado en nmeros, caracteres , imgenes y sonido. Pero en realidad en la trastienda todo sigue siendo binario.

Los Bits
El mtodo mas sencillo de representacin son los nmeros naturales. Por ejemplo, si tengo el nmero 85 en decimal, solo tengo que llevarlo a binario y obtengo una serie de unos y ceros. : 1010101 = 85 en binario Cada dgito (un cero o un uno) de este nmero se llama bit. Java tiene una serie de operadores capaces de manipular estos dgitos, son los operadores de bits.

Operadores de bits
Operador Utilizacin << >> >>> A << B A >> B A >>> B Resultado Desplazamiento de A a la izquierda en B posiciones Desplazamiento de A a la derecha en B posiciones, tiene en cuenta el signo. Desplazamiento de A a la derecha en B posiciones, no tiene en cuenta el signo. Operacin AND a nivel de bits Operacin OR a nivel de bits Operacin XOR a nivel de bits Complemento de A a nivel de bits

& | ^ ~

A&B A|B A^B ~A

Para operar a nivel de bit es necesario tomar toda la longitud predefinida para el tipo de dato. Estamos acostumbrados a desechar los ceros a la izquierda en nuestra representacin de nmeros. Pero aqu es importante. Si trabajamos una variable de tipo short con un valor de 3, est representada de la siguiente manera : 0000000000000011 Aqu los 16 bits de un short se tienen en cuenta.

Programacin en Java/Operadores de bits

25

Desplazamientos
Los operadores de desplazamiento, mueven los bits a la izquierda o a la derecha. El primer operando ser la victima a sacudir. El segundo indicar cuantas posiciones.

Desplazamiento a la izquierda con signo (cclico)


Deseamos correr el nmero 33 dos posiciones a la izquierda. Entonces realizamos : int j = 33; int k = j << 2; Este es el resultado:
00000000000000000000000000100001 : j = 33 00000000000000000000000010000100 : k = 33 << 2 ; k = 132

Cada "hueco" que queda a la derecha tras correr este nmero se rellena con los dgitos que van saliendo por la izquierda (ceros en este caso). Si prestamos atencin, observaremos que esta operacin multiplic a j por 2 tantas veces como posiciones se ha desplazado. En este caso se multiplic por 4 ( 2 x 2 ). Como el signo del nmero puede cambiar tras la operacin, se denomina desplazamiento con signo.

Desplazamiento a la derecha con signo (cclico)


Volvamos a colocar como estaban los bits del caso anterior. Queremos obtener nuevamente el nmero 33. Para esto desplazamos el nmero 132 dos posiciones a la derecha. int k = 132; int m = k >> 2; Como resultado obtenemos el nmero original. 00000000000000000000000010000100 : k = 132 00000000000000000000000000100001 : m = 132 >> 2 ; m = 33 Podemos ver que el corrimiento a la derecha realiza una divisin de enteros. Divide por 2, tantas veces como posiciones desplazadas. Los huecos que quedan por la izquierda se cubren con los bits que van saliendo por la derecha (es cclico). Veamos que ocurre si pretendemos realizar un desplazamiento a la derecha con un nmero negativo. Tengan en cuenta que la representacin de nmeros es de complemento a 2. Si tengo una variable de tipo int con el valor 1 , internamente est almacenada de la siguiente forma : 11111111111111111111111111111111 : -1 complemento a 2 Ahora realicemos un programa para ver que ocurre con el desplazamiento. public class CorreNeg { public static void main(String args[]){ int x = -1; int y = x >> 2; System.out.println("El resultado es: " + String.valueOf(y)); } } La salida del programa nos indica que:

Programacin en Java/Operadores de bits El resultado es: -1 Qued exactamente igual. Prueben de correr el nmero tantas posiciones como tengan ganas y obtendrn el mismo resultado. Esto ocurre porque en el desplazamiento, los "huecos" que quedan a la izquierda se rellenan con el bit uno (1), quedando inalterable. Este operador desplaza el conjunto de bit a la derecha y agrega a la izquierda los bits que faltan segn el signo. Si se encuentra con un nmero positivo, agrega ceros, en cambio si son negativos agrega unos. Se lo conoce como desplazamiento con signo.

26

Desplazamiento a la derecha sin signo


Modifiquemos ligeramente el programa anterior agregndole al operador un smbolo >. Nos queda de esta manera : int x = -1; int y = x >>> 2; Si ejecutamos el programa nos dice lo siguiente : El resultado es: 1073741823 Veamos de donde sali este nmero raro. Si lo llevamos a binario tenemos : 00111111111111111111111111111111 : 1073741823 en binario Ahora nos damos cuenta que se han agregado dos ceros a la izquierda. Este operador desplaza a la derecha, pero no tiene en cuenta el signo. Siempre agrega bit con el valor cero, por lo que se llama desplazamiento sin signo.

Operadores lgicos de bits


Estos operadores extienden las operaciones booleanas a los enteros. Para comprender como trabajan debemos descomponer los enteros en un conjunto de bits. El operador aplicar una operacin lgica bit por bit, tomando el valor de uno como verdadero y el valor de cero como falso. De un operando toma un bit y aplica la operacin al bit que tiene la misma posicin del segundo operando. Como resultado obtenemos otro entero.

Operador AND de Bits


Si ambos bits comparados son 1, establece el resultado en 1. De lo contrario da como resultado 0. int k = 132; // k: 00000000000000000000000010000100 int l = 144; // l: 00000000000000000000000010010000 int m = k & l; // m: 00000000000000000000000010000000 El resultado da 128

Operador XOR de Bits


Si uno de los bits comparados es 0 y el otro 1, el resultado es 1. Si ambos bits comparados son iguales, el resultado es 0. int k = 132; // k: 00000000000000000000000010000100 int l = 144; // l: 00000000000000000000000010010000 int m = k ^ l; // m: 00000000000000000000000000010100 El resultado da 20

Programacin en Java/Operadores de bits

27

Operador NOT de Bits


Slo invierte los bits, es decir, convierte los ceros en unos y viceversa. Observemos que es el nico de esta familia que tiene un solo operando. int k = 132; int m = ~k; // k: 00000000000000000000000010000100 // m: 11111111111111111111111101111011

El resultado da -133 Como los enteros negativos en Java se representan con el mtodo del complemento a dos, podemos realizar un sencillo experimento de cambiarle el signo a un nmero. Para realizarlo debemos aplicar a un entero el operador NOT y sumarle uno. int x = 123; int y = ~x; int z = y + 1; El resultado da -123,

Para saber ms
Bit Lgica binaria

Programacin en Java/Operadores de asignacin


Prcticamente lo hemos utilizado en todos los ejemplos de variables y operadores. Es el operador de asignacin. Este aparece con un signo igual (=). Cambia el valor de la variable que est a la izquierda por un literal o el resultado de la expresin que se encuentra a la derecha. par = 2; permetro

= Pi * dimetro;

En el ejemplo vemos la variable par toma el valor de 2 y permetro el resultado de una expresin. Veamos un ejemplo de una instruccin tonta, que en realidad no hace nada. algo = algo; La variable algo toma el valor de algo; todo queda como antes. Ahora aumentemos el valor de la variable en 3 unidades. algo = algo + 3; Aqu la variable toma el valor que tena mas 3 unidades. Existe una forma de simplificar la notacin anterior. Es la siguiente: algo += 3; // equivalente a algo = algo + 3

Se juntaron el operador de suma con el de asignacin. Este atajo se puede realizar para otras operaciones adems de la suma. Es til cuando la operacin contiene como primer operando al valor de la misma variable en la que se almacena el resultado.

Programacin en Java/Operadores de asignacin

28

Operadores de asignacin
Operacin Suma Resta Multiplicacin Divisin Resto de divisin Desplazamiento a la izquierda Desplazamiento a la derecha Operador Utilizacin Operacin equivalnte += -= *= /= %= <<= >>= A += B A -= B A *= B A /= B A %= B A <<= B A >>= B A >>>= B A &= B A |= B A ^= B A=A+B A=A-B A=A*B A=A/B A=A%B A = A << B A = A >> B A = A >>> B A=A&B A=A|B A=A^B

Desplazamiento a la derecha sin signo >>>= AND de bits OR de bits XOR de bits &= |= ^=

Programacin en Java/Operador cast


Cada vez que realizamos una operacin obtenemos un resultado. Este resultado podr tener un tipo de dato diferente de los operandos. Veamos esto: public class CambioTipo { public static void main(String args[]){ byte unByte = 2; byte otroByte = 3; byte result = unByte + otroByte; } } Nos da un error en la compilacin. Se debe a que se produjo un cambio de tipo en el resultado, en vez de un byte se nos apareci un int. Este es un cambio de tipo implcito. Pero no queremos que quede as. Podemos forzar al compilador que nos entregue un byte. Lo haremos de la siguiente forma : byte result = (byte)(unByte + otroByte); Estamos realizando un cambio explcito de tipo, realizado con un operador cast. Este operador aparece como el nombre del tipo a obtener entre parntesis; siempre antepuesto al resultado que se debe modificar. Nos encontraremos ahora con un viejo conocido que nos ha molestado antes, es el literal descarriado: float f = 3.14; Sabemos ya que nos dar un error debido a que es un literal double que trata de disfrazarse de float. Pero le daremos un cast as lo transformamos en float. float f = (float)3.14; De esta manera el compilador no protestar porque colocamos peras con manzanas. El operador cast se ocup de convertir un double en un float.

Programacin en Java/Operador cast Existe un cierto peligro en la utilizacin indiscriminada de este operador. Observemos el siguiente programa : public class Int2Byte { public static void main(String args[]){ int unInt = 5000; byte unByte = (byte)unInt; System.out.println("el resultado es : " + unByte); } } Aqu intentamos meter a empujones un valor en un byte , cuyo valor es mas grande de lo soportado. Pero en este caso Java tomas las cosas con indiferencia. Si ejecutamos el programa nos indicar : el resultado es : -120 El resultado dista mucho del valor original. El operador cast se comport como una picadora de bits. Si miramos con lupa ambos valores, nos damos cuenta que ocurri: 00000000000000000001001110001000 : un int de valor 5000 10001000 : un byte de valor -120, complemento a 2 Resulta que al aplicar el cast "cortamos" la variable int en los primeros 8 bits que corresponden al tamao del byte.

29

Programacin en Java/Precedencia de operadores


Ya que conocimos a los operadores, vamos tratar de colocarlos todos juntos en una sola expresin. Vamos a ver como se organizan para trabajar: int j = 10; boolean esCierto =

j/j*j>j-j+j&&j<<j>>>j==j%j||++j<--j+j--;

Civilizadamente se organizan de acuerdo al nivel del precedencia de cada uno. Primeramente proceden los unarios, luego los aritmticos, despus los de bits, posteriormente los relacionales, detrs vienen los booleanos y por ltimo el operador de asignacin. La regla de precedencia establece que los operadores de mayor nivel se ejecuten primero.

Precedencia de operadores
Descripcin operadores posfijos operadores unarios op++ op-++op --op +op -op ~ ! Operadores

multiplicacin y divisin * / % suma y resta desplazamiento operadores relacionales equivalencia operador AND operador XOR operador OR AND booleano +<< >> >>> < > <= => == != & ^ | &&

Programacin en Java/Precedencia de operadores

30
|| ?: = += -= *= /= %= &= ^= |= <<= >>= >>>=

OR booleano condicional operadores de asignacin

En la tabla se muestra el nivel de precedencia de los operadores. Los de mayor nivel se encuentran arriba. Podemos ver que los ltimos son los de asignacin. Esto es lgico, ya que se debe calcular primeramente la expresin antes de asignar un resultado a una variable. Veamos unos ejemplos de cmo acta esta regla. int j = 1 + 3 * 4; // resultado j = 13 Desde que aprendimos aritmtica bsica, conocemos la regla que nos obliga a calcular la multiplicacin antes de una suma. Esto tambin se cumple en Java. int j = 1 + 3 4; resultado j= 0;

Si todos los operadores tienen un nivel idntico de precedencia se evalua la expresin de izquierda a derecha.

Utilizacin de parntesis
Se utilizan para aislar una porcin de la expresin de forma que el clculo se ejecute de forma independiente. Puede forzar a una expresin a ignorar las reglas de precedencia. int j = 1 + 3 * 4; // resultado j = 13 int h = (1 + 3) * 4 // resultado j = 16 Tomando el primer ejemplo, forzamos al compilador a realizar la suma antes que la multiplicacin. En este ejemplo es imprescindible la utilizacin de parntesis : int k = 1 + (h = 3); Si quitamos los parntesis el compilador protestar. Porque al establecer un nivel muy bajo para la asignacin, procede primero la suma. Pero estamos sumando con una variable sin valor. Como en matemticas, podemos anidar los parntesis. Se comenzara a evaluar los internos hasta llegar a los externos. Cabe agregar que los parntesis no disminuyen el rendimiento de los programas. Por lo tanto, agregar parntesis no afecta negativamente al programa. int k = ((12 - 2) * ( 21 - 11)) / ((1+1)*(15-10)) + 1 ;

Programacin en Java/Estructuras de control

31

Programacin en Java/Estructuras de control


Hasta el momento, el intrprete se dio un paseo por los ejemplos que hemos visto sin alterar el curso de ejecucin. Una por una ejecutaba las sentencias sin detenerse, ni repetir y sin saltearse ninguna, salvo si se produca un error. Esto produce programas con poca utilidad y totalmente aburridos. public class Secuencia { public static void main(String args[]){ System.out.println("Primero se ejecuta esto"); System.out.println("Luego esto"); System.out.println("Por ltimo esto"); } } En el ejemplo se muestra una ejecucin en secuencia. Existen ciertas sentencias que permiten modificar el curso de ejecucin. Debido a ciertas condiciones que se dan en el programa podemos decidir que instrucciones se ejecutarn y que cantidad de veces. Para lograr esto disponemos de un conjunto de estructuras de control.

Programacin en Java/Estructuras de seleccin


A menudo nos encontremos con programas o algoritmos en donde las acciones se ejecutarn de acuerdo a una condicin. Tenemos dos o mas alternativas de accin y solo una de estas tendr lugar. Por ejemplo, supongamos que estamos conduciendo un vehculo y en un cruce de calles nos encontramos con un semforo. Si la luz del semforo es roja nos detenemos. De otro modo seguiremos manteniendo la velocidad. Aqu se nos presentan dos alternativas : continuar con la marcha o frenar. Estas acciones se realizarn segn una condicin: si la luz del semforo es roja. Podemos especificar este ejemplo mediante un pseudolenguje que describa la condicin. si luz_del_semforo = rojo entonces

velocidad_del_vehculo = 0 Estamos frente a una seleccin simple: tenemos dos alternativas. Este tipo de seleccin la condicin toma un valor lgico de verdadero o falso. Se tienen que especificar las acciones que deben ocurrir si la condicin es verdadera. Opcionalmente se puede indicar que debe ocurrir si la condicin es falsa. Para lo ltimo veamos un ejemplo. si luz = rojo entonces frenar de otro modo seguir con la misma velocidad. Imaginemos que estamos en un da de mucho calor y deseamos tomar un refresco. Para ello nos dirigimos a una mquina expendedora de gaseosas, insertamos una moneda y elegimos el tipo de bebida. Generalmente una mquina expendedora tiene un panel con botones para realizar la eleccin. Internamente dispone de un programa que suelta una lata de acuerdo al botn pulsado. El algoritmo puede ser similar a esto: Seleccin de acuerdo al botn presionado:

Programacin en Java/Estructuras de seleccin

32

En el caso de "1" expulsar lata de Orange Duke.

En el caso de "2" expulsar lata de Lemmon Duke. En el caso de "3" expulsar lata de Cola Duke.

En el caso de "4" expulsar lata de Coffee Duke. En el caso de "5" expulsar lata de Cherry Duke. Tenemos varias alternativas y la accin realizada depender de un valor discreto. Esta es una seleccin mltiple.

Programacin en Java/Sentencia if-else


Queremos realizar una divisin de enteros. Es fcil, ya sabemos como hacerlo, utilizando variables y operadores. Pero nos queda un mal recuerdo con la divisin por cero. Podemos establecer una condicin que permita la divisin para todos los nmeros y que rechace cualquier divisor con cara de cero. Disponemos de dos opciones : realizar o no la divisin. Tambin una condicin: el divisor sea distinto de cero. Esto se parece mucho a una seleccin simple. La estructura de seleccin simple en Java se realiza mediante la sentencia if (si, en ingles). La sintaxis es la siguiente : if (condicin) sentencia; La condicin es una expresin booleana. La sentencia se ejecuta solamente si la expresin booleana es verdadera. Retomando el problema de la divisin, incorporamos una estructura de seleccin para realizar la operacin libre de ceros. public class DivisionSegura { public static void main(String args[]){ int x = 12; int y = 0; int z = 0; if( y !=0 ) z = x / y; System.out.println("El resultado es : " + z); } } En el programa, la variable x tiene el valor del dividendo, la y el divisor y la z el cociente. La condicin es una expresin que arroja un valor booleano. En este caso se utiliza un operador relacional que verifica si y es distinto de 0. Si esta condicin se cumple realiza la divisin. En caso contrario se saltea la divisin y solo imprime el valor de z, que hemos inicializado convenientemente antes de la operacin.

Programacin en Java/Sentencia if-else Qu ocurre si la condicin no se cumple? En este caso nada. Podemos agregar una serie de instrucciones que se ejecutarn solo si la condicin no se cumple. Para esto tendremos que agregar la sentencia else. La estructura de seleccin quedar as: if (condicin) sentencia 1; else sentencia 2; Si la condicin es verdadera se ejecuta la sentencia 1 en caso contrario se ejecuta la sentencia 2. Ambas sentencias nunca se ejecutarn al mismo tiempo, son excluyentes. Ahora ampliemos el programa para mostrar una advertencia en el caso que se encuentre cara a cara con un cero siniestro. public class DivisionSegura { public static void main(String args[]){ int x = 12; int y = 0; int z = 0; if( y !=0 ) z = x / y; else System.out.println("Atencin! se pretende dividir por 0"); System.out.println("El resultado es : " + z); } } El programa nos qued mas completo. Con la clusula else incluimos otra alternativa de accin. Pero algo anda suelto. Este programa siempre muestra un resultado, se cumpla o no la condicin. El mensaje por pantalla no est incluido en la estructura de seleccin. Tendremos que colocarlo dentro del sector de sentencias que se ejecutarn cuando la condicin sea verdadera. Para agrupar las sentencias se utilizan las llaves ( { } ) Indicarn el inicio y el fin de un bloque de sentencias. Probemos como queda con un bloque public class DivisionSegura { public static void main(String args[]){ int x = 12; int y = 2; int z = 0; if( y !=0 ) { z = x / y; System.out.println("El resultado es : " + z); } else { System.out.println("Atencin! se pretende dividir por 0"); } } } Las buenas prcticas en defensa de un cdigo mantenible han dictaminado que utilicemos las llaves en todo momento, an en el caso que utilicemos una sola sentencia. if (condicin) { sentencia; } else {

33

Programacin en Java/Sentencia if-else sentencia; } Lamentablemente no siempre nos encontraremos con condiciones tan sencillas. Muchas veces tendremos que recurrir a proposiciones compuestas para formar una condicin. Para ello podemos recurrir a operadores relacionales o lgicos. Recuerden que siempre debe dar como resultado un valor booleano. Supongamos que deseamos saber si un ao es bisiesto. Sabemos que debe ser mltiplo de 4. Para esto tendremos que verificar si el mdulo es igual a cero. ao % 4 == 0 Pero no debe ser mltiplo de 100. ( ao % 4 == 0 ) && ( ao % 100 != 0 ) A menos que sea mltiplo de 400. ((( ao % 4 == 0 ) && ( ao % 100 != 0 )) || ( ao % 400 == 0 )) Formamos una proposicin compuesta con conectores lgicos. Ahora vamos a incorporarlo en una estructura se seleccin. if ((( ao % 4 == 0 ) && ( ao % 100 != 0 )) || ( ao % 400 == 0 )) { System.out.println("Es bisiesto"); } else { System.out.println("No es bisiesto"); } Los conectores lgicos nos permiten simplificar la estructura. Sin ellos nos veramos en la necesidad de anidar las sentencias. Veamos que ocurre si en elejemplo anterior descartamos el AND y el OR. if ( x % 4 == 0 ) { if ( x % 100 == 0 ) { if ( x % 400 == 0 ) { System.out.println("Es bisiesto"); } else { System.out.println("No es bisiesto"); } } else { System.out.println("Es bisiesto"); } } else { System.out.println("No es bisiesto"); } Parece complicado, pero nos demuestra muchas cosas. En primer lugar observamos que se pueden anidar las sentencias if-else. Cada resultado de una condicin puede caer en una nueva comprobacin para formar una estructura compleja de seleccin. Tambin vemos que hay cierta relacin entre conectores lgicos y la estructura.

34

Programacin en Java/Sentencia if-else

35

Conjuncin if (condicin1 && condicin2){ sentecia1; } else { sentencia2; } if ( condicin1 ) { if ( condicin2 ) { sentencia1; } else { sentencia2; } } else { sentencia2; }

Disyuncin if ( condicin1 || condicin2 ) { sentencia1; } else { sentencia2; } if ( condicin1 ){ sentencia1; } else { if ( condicin2 ) { sentencia1; } else { sentencia2; } }

Negacin if ( ! condicin1) { sentencia1; } else { sentencia2; } if ( condicin1) { sentencia2; } else { sentencia1; }

Programacin en Java/Sentencia switch

36

Programacin en Java/Sentencia switch


Vamos a desarrollar una calculadora totalmente elemental. Sin muchas caractersticas salvo de realizar operaciones aritmticas con dos operandos. Disponemos de una variable de tipo char que nos indicar que tipo de operacin se debe efectuar. Realizamos la operacin y mostramos el resultado en la pantalla. Despus de luchar con las sentencias if-else nos qued algo parecido a esto: public class MiniCalculadora { public static void main(String args[]){ int a = 1; int b = 1; char op = '/'; System.out.print("El resultado es : "); if ( op == '+' ) { System.out.println( a + b); } else if ( op == '-') { System.out.println( a - b); } else if ( op == '*') { System.out.println( a * b); } else if ( op == '/') { System.out.println( a / b); } } } Ya nos alejamos bastante de las decisiones simples. Aqu tenemos de una cadena de sentencias if-else que realizan un seleccin mltiple. La condicin general tiene mas dos alternativas. Tendremos que acudir a la sentencia switch que se encarga de este tipo de seleccin. public class MiniCalculadora{ public static void main(String args[]){ int a = 1; int b = 1; char op = '/'; System.out.print("El resultado es : "); switch ( op ) { case '+': System.out.println( a + b ); break; case '-': System.out.println( a - b ); break; case '*': System.out.println( a * b ); break; case '/': System.out.println( a / b ); break;

Programacin en Java/Sentencia switch default: System.out.println("error" ); break; } } } La sentencia switch se encarga de estructurar una seleccin mltiple. Al contrario del enunciado if-else que slo podemos indicar dos alternativas, maneja un nmero finito de posibilidades. La estructura general del enunciado switch es la siguiente: switch( expresin ) { case constante1: sentencia1; ... break; ... case constanteN: sentenciaN; ... break; default: sentencia; ... break } El valor de la expresin y de las constantes tiene que ser de tipo char, byte, short o int. No hay lugar para booleanos, reales ni long porque, en la ejecucin, todos los valores que incorporamos se transforman en valores de tipo int. Al evaluar la expresin de switch, el intrprete busca una constante con el mismo valor. Si la encuentra, ejecuta las sentencias asociadas a esta constante hasta que tropiece con un break. La sentencia break finaliza la ejecucin de esta estructura. Si no encuentra ninguna constante que coincida con la expresin, busca la lnea default. Si existe, ejecuta las sentencias que le siguen. La sentencia default es opcional. Volviendo a la mini calculadora, vemos como se organiza las distintas alternativas de acuerdo al valor de una constante char. Estas alternativas representan las distintas operaciones que estn disponibles y solo se ejecutar una sola. Por ejemplo, si el valor del operador (en el programa figura op) es igual al signo de la suma , la sentencia switch ejecutar solamente la lnea que corresponde con esta operacin. Que ocurre si cambiamos la variable op por algn carcter distinto a los especificados? Entra en juego la alternativa default y todas las setencias que le siguen. En este caso imprime por pantalla el mensaje "error". Si nos olvidamos de incorporar esta alternativa, no pasa nada. Ninguna sentencia dentro de la estructura switch se ejecutar. Ya que hablamos de default, es conveniente mencionar que no es necesario que quede relegado al final de la estructura. Podemos situarla al comienzo , en el medio, en definitiva, en donde nos quede mas til segn la lgica que apliquemos o donde queramos. switch ( op ) { default : System.out.println("error"); break;

37

Programacin en Java/Sentencia switch case '+': System.out.println( a + b ); break; ... En el ejemplo presentado, funciona de la misma manera un default al principio. Obviamente no debe existir mas de una alternativa default. Las sentencias break son opcionales. Se utilizan con el propsito de separar las alternativas. Pero fieles a nuestro estilo de meternos en problemas decidimos que algunos break deben desaparecer. Probemos que ocurre con este cdigo: switch ( op ) { case '+': System.out.println( a + b ); case '-': System.out.println( a - b ); break; ... Es el mismo que el original, solo "olvidamos" de agregarle un break al final de la alternativa suma. Si cambiamos el valor de op por el carcter '+' y ejecutamos el programa, nos responde de esta manera: El resultado es : 2 0 Nos dio los resultados de la suma y la resta. Al no tener un break en la suma, se pas de largo y ejecuto la de abajo , que justamente era la resta. En algunas circunstancias, el break est de mas. Es posible contruir una estructura en donde se ejecuten mas de una alternativa al mismo tiempo. Vemos un ejemplo: public class Lineas{ public static void main(String args[]){ int j = 2; switch (j) { case 5: System.out.println("********"); case 4: System.out.println("********"); case 3: System.out.println("********"); case 2: System.out.println("********"); case 1: System.out.println("********"); } } } El programa tiene por objetivo listar un nmero dado de lneas. Se pueden dibujar hasta 5 lneas trazadas con el smbolo *. La cantidad depender del valor de la variable j. Por ejemplo, si j vale 2, activa la alternativa que tiene

38

Programacin en Java/Sentencia switch esta constante y como no tiene un break que la obstaculice sigue con la alternativa de abajo.

39

Programacin en Java/Operador if-else


Salvo ciertos detalles, el programador que conozca el lenguaje C, no notar la diferencia con este "dialecto". Sobre todo a esta altura del curso, que slo sometemos a Java a una programacin de tipo imperativa. Entre todas las construcciones sintcticas que Java hered del C, existe un curioso operador ternario. Se lo llama operador if-else. Su funcin es abreviar la notacin de la clusula de seleccin simple. La sintaxis es la siguiente. variable = op1?op2:op3 El operando op1 debe ser de tipo booleano. Los operandos op2 y op3 pueden ser de cualquier tipo, pero compatibles entre si y con la variable que almacene el resultado. Funciona como una seleccin simple. De acuerdo al valor lgico del operando op1, si es verdadero el resultado de la operacin es igual al valor del operando op2. De lo contrario, si op1 es falso, el resultado es el valor del operando op3. Probemos este nuevo operando. Supongamos que debemos realizar un programa que calcule la distancia entre dos nmeros. Para lograrlo, tomamos el mayor y le restamos el menor. Para empezar, veremos como se realiza con la clusula if-else, que ya conocemos. public class Distancia{ public static void main(String args[]){ int a = 23; int b = 12; int j; if ( a > b ) { j = a - b; } else { j = b - a; } System.out.println("El resultado es: " + j ); } } La construccin equivalente, utilizando el operador, es la siguiente : public class Distancia2{ public static void main(String args[]){ int a = 23; int b = 12; int j = a > b ? a - b : b - a; System.out.println("El resultado es: " + j ); } } Como vern, redujo bastante la notacin. La expresin booleana, que conforma la condicin de seleccin, pas al primer operando, la operacin verdadera al segundo y la falsa al tercero. Como cualquier operador silvestre, se puede combinar tranquilamente con el resto para formar expresiones compuestas. Para verlo, mostramos una expresin equivalente a la anterior. int j = (a > b ? a : b ) - ( a <= b ? a : b);

Programacin en Java/Operador if-else Se han utilizado los parntesis debido a que su orden de precedencia es bajsima. De otra forma se hubiera evaluado la resta antes de las selecciones.

40

Programacin en Java/Estructuras de iteracin


Supongamos que nos piden que realicemos un dibujo sencillo que se despliegue por pantalla. El objetivo es mostrar un cuadrado de 5 filas por 5 columnas trazado con cualquier carcter. Con los elementos de programacin que ya conocemos, realizamos un programa que cumpla con este requisito. public class Cuadrado{ public static void main(String args[]){ System.out.println("*****"); System.out.println("*****"); System.out.println("*****"); System.out.println("*****"); System.out.println("*****"); } } Bsicamente este programa cumple con el objetivo. Pero... No notan que algo anda mal? Se repiti cinco veces una instruccin. Qu ocurrira sin nos solicitaran una figura ms grande? Tendramos que agregar ms lneas de cdigo. Y si en vez de una figura , se les ocurra pedirnos que listramos una lista de nmeros del uno al milln, el cdigo sera inmenso. Tambin imagnense lo que tardaramos en escribirlo. Sin embargo tenemos un recurso para acudir en cuanto surjan estos problemas. Son las estructuras de iteracin. Una iteracin consiste en una repeticin de un bloque de sentencias un numero determinando de veces o hasta que se cumpla una condicin. De esta forma el cdigo puede simplificarse notablemente. Antes de entrar en los detalles de la implementacin con Java, veremos como podemos realizar algunas rutinas en pseudocdigo: Repetir 5 veces : Imprimir ("*****"); Le pasamos al intrprete la tarea de reiterar una accin. Nosotros solamente escribimos una vez lo que hay que hacer. Siguiendo con una segunda aproximacin, podramos agregarle un registro que cuente el nmero de iteraciones. Adems adicionamos una condicin para que indicar que el registro no debe pasar de cierto nmero. De esta manera, el pseudocdigo quedar as: N = 1; Mientras que N <= 5 Imprimir ("*****"); N = N + 1; Lo que hicimos fue inicializar el contador, agregar una condicin de corte, indicar que sentencia se debe repetir y finalmente incrementamos el contador. La condicin es una expresin lgica que debe tener un valor de verdadero o falso. En la ejecucin, cada vez que termina la ltima sentencia vuelve a evaluar la condicin, si se cumple sigue la iteracin, de lo contrario termina. Esta es una estructura de iteracin til para los casos en donde sabemos a priori cuantas repeticiones se deben ejecutar. Con pocos retoques se pueden realizar iteraciones desconociendo el nmero de ciclos.

Programacin en Java/Estructuras de iteracin Realicemos un programa que transforme un nmero decimal en binario. En la vida real, para hacer esto, realizamos sucesivas divisiones por 2 al numero decimal. A cada divisin tomamos el resto y continuamos hasta que el resultado sea cero. Por ejemplo: Tenemos que pasar el nmero 25 a binario 25 12 6 3 1 mod mod mod mod mod 2 2 2 2 2 = = = = = 1; 0; 0; 1; 1; 25 div 2 = 12; 12 div 2 = 6; 6 div 2 = 3; 3 div 2 = 1; 1 div 2 = 0;

41

(NOTA: en java actualmente se usa el signo "%" para hacer el mod) El resultado es 11001 En general, no sabemos cuantas divisiones tendremos que realizar. Pero si sabemos que debemos llegar a cero con la divisin. Las tareas que repetimos son las de tomar el resto y el resultado de la divisin. Con estos datos en mente, podremos realizar un algoritmo. DECIMAL = 25; Mientras que DECIMAL > 0 : BINARIO = DECIMAL % 2 + BINARIO; DECIMAL = DECIMAL / 2;

Programacin en Java/Sentencia while


La sentencia while es la ms sencilla de las estructuras de iteracin. La iteracin continuar hasta que su condicin sea falsa. while ( condicin ) sentencia ; La condicin tiene que tomar un valor booleano (verdadero o falso). Si este valor es verdadero, se ejecutar la sentencia. Concluida esta accin se vuelve a evaluar la condicin. Proseguirn los ciclos hasta que la condicin no cambie a falso. Esta es una estructura de iteracin preprueba, es decir primero se evala la condicin antes de realizar cualquier accin. Si de entrada la condicin es falsa nunca ejecutar el conjunto de sentencias. int n = 0; while ( n > 0 ) System.out.println("Esto nunca lo vers"); Dentro del conjunto de sentencia que controla, debe existir alguna que cambie el valor de la condicin que se est evaluando. boolean prueba = true; while ( prueba ) { System.out.println("Esto lo vers una vez"); prueba = false; } Entraramos en un ciclo infinito si nunca se modifica la condicin y permanece verdadera.

Programacin en Java/Sentencia while boolean prueba = true; while ( prueba ) { System.out.println("Esto lo vers muchas veces"); } Generalmente esta estructura se utiliza en situaciones en donde desconocemos la cantidad de ciclos que se deben ejecutar para producir un resultado. Mostraremos como se utiliza en estas circunstancias con el ejemplo de pase a binario, mostrado en el captulo anterior. Tenamos que transformar un nmero decimal a binario. El programa en java nos queda de esta manera: public class Dec2Bin{ public static void main(String args[]){ int decimal = 252222; String binario = ""; while ( decimal > 0 ) { binario = decimal % 2 + binario; decimal /= 2; } System.out.println(binario); } } Como no sabemos de antemano cuantas vueltas debe dar, simplemente esperamos que el resultado de las divisiones sucesivas sea igual a cero. Tambin se pueden realizar ciclos con while en donde ya conocemos, antes de entrar en la estructura, cuantas vueltas debe dar para terminar. Para esto nos auxiliamos con un contador de vueltas. Previamente tiene que inicializarse antes de ingresar al ciclo. Luego en cada vuelta se modificara segn la lgica del algoritmo. Realicemos el programa que despliegue por pantalla cinco lneas de caracteres. public class Cuadrado{ public static void main(String args[]){ int contador = 1; while ( contador <= 5 ) { System.out.println("*****"); contador++; } } } En este algoritmo, inicializamos el contador a 1 y luego en cada ciclo se incrementa. La condicin de corte tiene como objetivo no permitir mas vueltas si el contador super el valor 5. Para tener varias veces el asterisco sin necesidad de imprimirlo asi "*****", utilizamos otro ciclo while y otra variable que inicializaremos dentro del ciclo para que se cumpla la cual llamaremos "contador2", obtendremos el mismo resultado que el anterior, el codigo quedaria asi: public class Cuadrado { public static void main (String args []) { int contador = 1;

42

Programacin en Java/Sentencia while while (contador <= 5) { int contador2 = 1; while (contador2 <= 5) { System.out.print ("*"); contador2++; } System.out.println (); contador++; } } } (copian la parte que queda fuera del recuadro punteado al principio, y la llave que queda fuera al final del mismo, lo pegan en ready to program y lo corren)

43

Programacin en Java/Sentencia do-while


La sentencia de iteracin do-while es de tipo posprueba. Primero realiza las acciones luego pregunta. La sintaxis es la siguiente: do sentencia while ( condicin ); Observamos que es como un while pero al revs. Primeramente se ejecuta la sentencia y luego evala la condicin. Si la expresin de la condicin es verdadera vuelve a dar un ciclo. De lo contrario, termina. Esto nos garantiza que la sentencia se ejecute al menos una vez. do System.out.println("Lo veras una vez"); while ( false ); Resulta til para los casos en donde tendremos que realizar ciertas acciones antes de verificar una condicin. Realicemos un programa que cuente la cantidad de dgitos que posee un nmero. Para ello tendremos que dividir por diez el nmero que nos han dado, hasta que el resultado se vuelva cero. Entonces recurrimos al while para realice los ciclos necesarios. public class CuentaDigitos{ public static void main(String args[]){ int nmero = 4557888; int dgitos = 0; while ( nmero > 0 ) { nmero /=10; dgitos++; } System.out.println(dgitos); } }

Programacin en Java/Sentencia do-while Qu ocurre si el nmero que nos dan es el cero? El resultado nos dar cero. Obviamente es errneo, debera devolver un dgito. Pero no entra en el ciclo debido a que de entrada no satisface la condicin. Podramos implementar una solucin "ad hoc". nmero /=10; dgitos++; while ( nmero > 0 ) { nmero /=10; dgitos++; } Realizamos primeramente las operaciones y luego entramos en el bucle si se verifica la condicin. Pero no hace falta mirar mucho para darnos cuenta que es una solucin poco elegante. En realidad quedar mejor con la sentencia do-while public class CuentaDigitos{ public static void main(String args[]){ int nmero = 4557888; int dgitos = 0; do { nmero /=10; dgitos++; } while ( nmero > 0 ); System.out.println(dgitos); } }

44

Programacin en Java/Sentencia for

45

Programacin en Java/Sentencia for


Trabajamos con casos de interaccin en donde a priori no conocamos la cantidad de ciclos que se ejecutaban hasta cumplir con una condicin. Para esto utilizamos la sentencia while. Pero ahora estudiaremos con ms detalle aquellos casos en donde se sabe de antemano cuantos ciclos se deben cumplir para terminar la ejecucin. Imprimiremos una tabla de multiplicar hasta el factor noveno. Si no utilizamos ninguna estructura de interaccin, deberamos imprimir nueve lneas de cdigo secuencial. System.out.println("3 System.out.println("3 System.out.println("3 System.out.println("3 System.out.println("3 System.out.println("3 System.out.println("3 System.out.println("3 System.out.println("3 x x x x x x x x x 1 2 3 4 5 6 7 8 9 = = = = = = = = = 3"); 6"); 9"); 12"); 15"); 18"); 21"); 24"); 27");

Pero ya conocemos las estructuras que nos ahorran el esfuerzo de escribir tanto cdigo. Utilizaremos una sentencia que ya conocemos: el while int factor = 1; while ( factor <= 9 ) { System.out.println("3 x " + factor + " = " + 3*factor ); factor++; } Utilizamos la variable factor para contar la cantidad de lneas que imprimimos. Primeramente la inicializamos en uno. Cuando se ejecuta la interaccin se controla que no supere su valor de 9. Si el valor es menor o igual que nueve, imprime una lnea de la tabla e incrementa a uno el valor de factor. Cualquier caso de interaccin que se complete en una cantidad prefijada de ciclos, necesitamos una variable de control. Si utilizamos la sentencia while, esta variable se debe definir e inicializar antes del bucle y contar con una instruccin que modifique su valor dentro del bucle. Veremos como este cdigo cambia ligeramente si en lugar de while presentamos una nueva sentencia denominada for for ( int factor = 1; factor <= 9; factor ++ ) { System.out.println("3 x " + factor + " = " + 3*factor ); } la sentencia for me permite repetir un ciclo n veces, en donde se debe determinar el valor inicial y cuantas veces se repetira. sintaxis
for({valor inicial};{condicin de termino};{factor de incremento del valor inicial}){ //ac va lo que se repetir n veces de acuerdo a la condicin de termino }

Bucle infinito: no hay control, entonces no se detiene for ( ;;){}

Programacin en Java/Sentencia for Operador coma : for ( int k=1, j=10 ;k < j ;k++ ,j-- ){ System.out.println(k + " " + j); }

46

for mejorado
Supongamos que tenemos un arreglo de enteros que deseamos presentar en pantalla, usando la orden for tradicional, el cdigo, podra quedar as: int[] laiEnteros = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; for (int i = 0; i < 10; i ++) System.out.println (laiEnteros[i]); Java ofrece una funcionalidad extra para la orden for, mediante la que se puede simplificar notablemente el codigo anterior, quedando as: int[] laiEnteros = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; for (int liElemento : laiEnteros) System.out.println (liElemento); En este caso, liElemento toma el valor de cada uno de los elementos de laiEnteros, permitiendo una navegacin ms simple, puesto que se evitan posibles errores derivados del uso de los arreglos en forma directa. Tambin se puede usar esta forma, para estructuras ms complejas como objetos de la clase Collection public void Presenta (Collection <Integer> poConjunto){ for (Iterator <Integer> loElemento : poConjunto) System.out.println (loElemento) }

Programacin en Java/Sentencia break

47

Programacin en Java/Sentencia break


La sentencia de 'break' es de tipo de control de bucles. Dentro de la iteracion en un bucle, de cualquiera de los tipos (while, do-while, for), el uso de esta sentencia rompe la iteracion de dicho bucle. for(int j = 0; j<10; j++){ sentencia 1; sentencia 2; sentencia 3; break; }; Este bucle debera ejecutarse 10 veces, desde j = 0 hasta j = 9, sin embargo la utilizacin de la sentencia break, rompe la iteracin del bucle, de tal manera que tras la primera ejecucin el bucle acaba habindose ejecutado una sola vez. Resulta til la utilizacin de condiciones para la ruptura del bucle, de tal manera que un cdigo como el anterior indicado no sirve para nada. Recurrimos para ejemplificarlo al ejemplo anterior de contar dgitos). Pero en este caso queremos que cuente los dgitos de un nmero pero solamente hasta llegar a 5 dgitos, en caso de que tenga ms dejaremos de contarlos: public class CuentaDigitos{ public static void main(String args[]){ int nmero = 4557888; int dgitos = 0; while ( nmero > 0 ) { nmero /=10; dgitos++; if (dgitos ==5) break; } if (dgitos ==5) System.out.println("El numero tiene 5 o ms dgitos");; } } Este programa cuenta los dgitos de un nmero y en caso de que dicho nmero tenga 5 o ms dgitos nos muestra por consola el mensaje "el nmero tiene 5 o ms dgitos". Vase la lnea "if (dgitos ==5) break;" cuya presencia hace que en caso de que el nmero haya llegado a los 5 dgitos se rompa la iteracin del bucle.

Programacin en Java/Sentencia continue

48

Programacin en Java/Sentencia continue


La sentencia de continue es de tipo de control de bucles. Dentro de la iteracion en un bucle, de cualquiera de los tipos (while, do-while, for), el uso de esta sentencia rompe la iteracion de dicho bucle. Provocando que se ejecute la siguiente iteracion de dicho bucle, ignorando las sentencias posteriores a "continue" for(int j = 0; j<10; j++){ sentencia 1; sentencia 2; sentencia 3; continue; sentencia 4; }; Este bucle se ejecuta 10 veces, pero con la salvedad de que la sentencia 4 no se ejecuta ninguna vez. Es decir, se ejecutan las sentencias 1, 2 y 3 y cuando se llega a la sentencia de control continue se vuelve de nuevo a comprobar la condicion del for y en caso de cumplirse de nuevo a la sentencia 1 y as sucesivamente.

Programacin en Java/Funciones
Queremos depositar todo nuestro dinero ganado como programadores. Hay dos bancos que compiten por nuestros dividendos. El primero, lo llamamos "Banco A", nos ofrecen un inters con una tasa mensual del 1 % mas una bonificacin final del 5%. El segundo, el "Banco B", nos ofrece una tasa del 1,5 %. Como buenos programadores realizamos un algoritmo para obtener el mayor beneficio. El programa calcular el monto obtenido en un perodo de 12 meses con un clculo de inters compuesto. Para darnos una mejor idea de lo que tenemos que hacer realizamos el algoritmo principal. monto = 10000; meses = 12; for ( int n = 1; n <= meses; n++){ monto = monto + monto * inters / 100; } Al monto inicial le sumamos las sucesivas capitalizaciones que ganamos mes a mes, hasta llegar a un perodo de 12 meses. Con este algoritmo probado, realizamos el programa: public class ShowMeTheMoney{ public static void main(String args[]){ int meses = 12; float interesBanco1 = 1f; float bonificBanco1 = 5f; float interesBanco2 = 1.5f; double monto = 10000; double montoBanco1 = monto; double montoBanco2 = monto; for ( int n = 1; n <= meses; n++){ montoBanco1 += montoBanco1 * interesBanco1 / 100;

Programacin en Java/Funciones } montoBanco1 += montoBanco1 * bonificBanco1 /100; for ( int n = 1; n <= meses; n++){ montoBanco2 += montoBanco2 * interesBanco2 / 100; } System.out.println("Importe final del banco1 : " + montoBanco1); System.out.println("Importe final del banco2 : " + montoBanco2); } } Si observamos el cdigo, notaremos que repetimos el mismo algoritmo por cada banco. Esto ocurrir cada vez que tengamos que realizar un clculo de intereses. Si la eleccin se extendiera a, por ejemplo, cinco bancos, tendramos que copiar el algoritmo para cada uno de ellos. Para no tener que repetir una y otra vez lo mismo, podemos recurrir a una tcnica muy utilizada en programacin: dividir el cdigo en funciones. Una funcin es un conjunto de instrucciones que ejecutan una rutina y devuelven un resultado. El resultado puede depender de parmetros de entrada. Un funcin se construye de la siguiente manera: tipo_resultado nombre_funcin (tipo_parmetro nombre_parmetro, ... ) { sentencia1; sentencia2; ... sentenciaN; } Se debe definir el tipo de dato del resultado y el nombre que identifica a la funcin. Ademas, opcionalmente se pueden definir parmetros de entrada con el tipo de dato y su nombre. Una funcin permite que reutilicemos un algoritmo. En el caso de nuestro problema bancario, podemos reutilizar el clculo de inters aplicndolo a cada banco. Veamos como se construye esta funcin: double interesCompuesto(double monto, float tasa, int perodos){ for(int n = 1; n <= perodos; n++ ){ monto += monto * tasa / 100; } return monto; } Necesitamos definir ciertos datos de entrada para ejecutar el algoritmo. Vamos a necesitar el monto inicial, la tasa de inters y el perodo. A su vez definimos el tipo de datos del resultado. La funcin nos devuelve el monto final, entonces el tipo de dato es double. Para identificar a la funcin le hemos puesto el nombre de interesCompuesto. Para utilizar la funcin en el programa la llamamos por su nombre. Como esta nos devuelve un resultado, tendremos que almacenarlo en una variable que tenga un tipo de dato compatible con el resultado. double montoBanco2 = interesCompuesto(10000 , interesBanco2, meses); Debemos pasar los parmetros como se han definido, en el mismo orden y con el mismo tipo de dato. Conociendo como se arma y se invoca una funcin, estamos prestos para utilizarla en nuestro programa. public class ShowMeTheMoney2{ static double interesCompuesto(double monto, float tasa, int perodos){

49

Programacin en Java/Funciones for(int n = 1; n <= perodos; n++ ){ monto += monto * tasa / 100; } return monto; } public static void main(String args[]){ int meses = 12; float interesBanco1 = 1f; float bonificBanco1 = 5f; float interesBanco2 = 1.5f; double monto = 10000; double montoBanco1 = monto; double montoBanco2 = monto; montoBanco1 = interesCompuesto( montoBanco1, interesBanco1, meses ); montoBanco1 += montoBanco1 * bonificBanco1 /100; montoBanco2 = interesCompuesto( montoBanco2, interesBanco2, meses ); System.out.println("Importe final del banco1 : " + montoBanco1); System.out.println("Importe final del banco2 : " + montoBanco2); } }

50

Programacin en Java / Parmetros de una funcin


Los parametros de una funcin son los valores que esta recibe por parte del cdigo que la llama. Pueden ser tipos simples u objetos. En la declaracin de la funcin se escriben despus del nombre entre parntesis indicndose el tipo de cada uno y su nombre. Veamos esto a modo de ejemplo: int dividir(int dividendo, int divisor) { ... } Est funcin recibe dos parmetros, ambos de tipo entero, uno el divisor y otro el dividendo. A la hora de llamar a la funcin, los parametros se escriben tambin a continuacin del nombre entre parentesis; pero en este caso no se indica el tipo de estos. Veamoslo en un ejemplo: int resultado = dividir(8,4); En esta linea, se asigna a la variable entera resultado el retorno de la funcin dividir pasandole como parametros 8 y 4. dividir ser una funcin de la clase a la cual pertenece nuestro objeto. Si queremos llamar a una funcin pblica de un objeto externo utilizaramos un cdigo similar a: MyClaseMatematica objInstancia = new MyClaseMatematica(); int resultado = objInstancia.dividir(8,4); Es importante recordar que en java, los parametros de los tipos primitivos (int, long, etc.) SIEMPRE se pasan por valor. Los objetos y arrays se pasan por referencia.

Programacin en Java / Parmetros de una funcin


Si no queremos que la funcin devuelva ningn parmetro debemos utilizar el tipo void. P.ej:

51

void print(String mensajeAImprimir) { .... }

Funciones estticas
Supongamos que tenemos una clase de funciones matemticas llamada Calculadora. La misma puede contener mtodos para el clculo de logartmos, cosenos, etc... Es un poco molesto tener que instanciar un objeto de dicha clase para poder utilizar la misma tal y como se muestra en el siguiente ejemplo: Calculadora objetoCalculadora = new Calculadora(); float resultado = objetoCalculadora.logaritmo(33.4); Para solucionar esto podemos crear funciones estticas. Estas funciones pueden ser invocadas utilizando directamente la clase, no un objeto instancia de la misma. Para ello basta aadir el atributo static a la funcin. En el caso anterior: class Calculadora { ... float logaritmo(float entrada){ float resultado; ... return resultado; } } Entonces el ejemplo anterior se simplifica y queda simplemente como: float resultado = Calculadora.logaritmo(33.4); No se debe abusar de las funciones estticas ya que entonces perdemos la orientacin a objetos de Java. Debe ser el sentido comn quien nos indique cuando realmente merece la pena utilizar las mismas. Un ejemplo donde suele ser conveniente crear funciones estticas es en las "fbricas" de objetos. Las fbricas de objetos crean y retornan un nuevo objeto de forma similar al constructor de una clase, pero teniendo en cuenta el contexto de la aplicacin. Las fbricas de objetos al tener informacin sobre el contexto/estado de la aplicacin pueden realizar tareas que un constructor no es capaz. P.ej, la conexin por red suele estar asociada a un objeto. Las creacin de una nueva conexin por red es un proceso lento (en comparacin a la velocidad de proceso de una CPU moderna) y es mejor reutilizar conexiones de red creadas anteriormente antes de crear una nueva. En tal caso creamos una fbrica de conexiones con una funcin esttica getNuevaConexion: class FabricaDeConexiones { static java.util.ArrayList listaDeConexiones = new java.util.ArrayList(); static void Conexion getNuevaConexion(){ for (int indice=0; indice<listaDeConexiones.size(); indice++){ if listaDeConexiones.get(indice).estaLibre = true { return listaDeConexiones.get(indice); } } Conexion nuevaConexion = new Conexion(....);

Programacin en Java / Parmetros de una funcin listaDeConexiones.add(nuevaConexion); } } En el ejemplo anterior FabricaDeConexiones.getNuevaConexion() consulta un listado de conexiones. Antes de crear una nueva conexin recorre el listado de conexiones ya existentes y si hay alguna conexin libre devuelve la misma antes de crear una nueva. As en vez de utilizar el cdigo: Conexion miConexion = new Conexion(); lo reemplazamos con: Conexion miConexion = FabricaDeConexiones.getNuevaConexion(); que ser mucho ms rpido y fiable.

52

Buenas prcticas
En algunos lenguajes sin soporte para excepciones es comn utilizar un entero como valor de retorno para indicar si hubo o no error. En general 0 significa que no paso nada y un valor distinto de cero indica un error. En Java (y cualquier otro lenguaje con control de excepciones) es una mala prctica utilizar un entero para devolver un error. Es mejor generar y lanzar un objeto excepcin para indicar un error en la funcin. Es fcil olvidar comprobar el valor retornado de una funcin, especialmente si la funcin invocada pertenece a una librera y va a ser utilizada por terceros que pueden NO ser conscientes de que la funcin devuelve error. Entonces el error quedara oculto y se manifestara aleatreamente en otra parte del cdigo haciendo muy difcil su depuracin y mantenimiento. En vez de escribir: int imprimeTodo(String nombre, String apellido1, if (nombre ==null || nombre =="") return if (apellido1==null || apellido1=="") return if (apellido2==null || apellido2=="") return String apellido2){ 1; 2; 3;

System.out.println(nombre+" "+apellido1+" "+apellido2); return 0; } escribiremos:


void imprimeTodo(String nombre, String apellido1, String apellido2){ String errores=""; if (nombre ==null || nombre =="") errores += "nombre no puede ser nulo/vacio,";

if (apellido1==null || apellido1=="") errores += "apellido1 no puede ser nulo/vacio,"; if (apellido2==null || apellido2=="") errores += "apellido2 no puede ser nulo/vacio,";

if (errores!="") throw new Excepcion(errores);

System.out.println(nombre+" "+apellido1+" "+apellido2); }

Programacin en Java / Parmetros de una funcin El valor de los parmetros enviados a la funcin deben comprobarse antes de ejecutar la lgica de la funcin. Si los mismos no son vlidos debe lanzarse una excepcin e interrumpir la ejecucin de la misma. Esto ayuda a detectar errores y hace el cdigo ms comprensible y fcil de leer.

53

Programacin en Java/Clusula return


Una funcin puede o no devolver un resultado, segn cmo haya sido declarada. La siguiente funcin no devuelve nada, puesto que se pone void delante, al declararla // Esta funcin no devuelve nada void funcion ( /* parmetros */) Sin embargo, esta otra s devuelve un valor entero // Esta funcin devuelve un valor entero int funcion ( /* parmetros */ ) Si la funcin devuelve algn tipo de resultado, es obligatorio en java poner en el cdigo de la funcin return valordevuelto. Si dentro de la funcin hay condicionales, es tambin obligatorio que en todos los posibles caminos por los que se termine el cdigo de la funcin, se ponga el return y el valor devuelto. Lgicamente, cuando la funcin devuelve el resultado, finaliza la ejecucin de la misma, y de cualquier estructura de control iterativa (for, while...) aunque no se haya cumplido su condicin de salida.

Programacin en Java/Funciones recursivas


Las funciones recursivas son aquellas que se invocan a si mismas en algn momento de su ejecucin. En anlisis de Algoritmos las tcnicas recursivas se usan mucho para la solucin de Problemas. Esta forma en analisis de Algoritmos es llamada Divide y Venceras. Para poder resolver un problema de forma recursiva es necesario saber alguna solucion no recursiva para alguno de los casos mas sencillos. "Usamos la solucion mas simple para resolver un problema mas complejo." As, todo mtodo recursivo debe tener al menos una sentencia que devuelva un resultado (la solucin del caso ms sencillo) y las sentencias necesarias para acercarse en cada invocacin a ese caso. La recursin permite programar algoritmos aparentemente complicados con un cdigo simple y claro, ahorrando trabajo al programador. A simple vista parece la solucin perfecta para muchos problemas, pero hay que tener en cuenta que en ocasiones ralentizar el programa en exceso. Por ejemplo, la funcin factorial en forma recursiva: public class Factoriales { static int factorial(int numero){ if ( numero <= 1 ) { return 1; } else { return numero*factorial(numero-1); } } public static void main(String args[]){ System.out.println(factorial(5));

Programacin en Java/Funciones recursivas } } La misma funcin en forma iterativa: public class Factoriales{ static int factorial(int numero){ int resultado = 1; while(numero > 0){ resultado = resultado*numero; nmero--; } } public static void main(String args[]){ System.out.println(factorial(5)); } } Como puede observarse, la funcin iterativa slo recorre un bucle while, mientras que la recursiva invoca un mtodo nuevo hasta que nmero vale 1 (Esto requiere un trabajo considerablemente mayor por parte del ordenador). La recursin es por lo tanto una potente herramienta en programacin, pero hay que saber diferenciar cuando es til y cuando no.

54

Recursin mutua
Este en un ejemplo de recursin mutua. Se trata de un programa que devolver true o false si el parmetro nmero es respectivamente, impar o par (en el caso de que invoquemos la funcin impar(nmero)). public class Paridad{ public static boolean impar (int numero){ if (numero==0) return false; else return par(numero-1); } public static boolean par (int numero){ if (numero==0) return true; else return impar(numero-1); } } Al leer el cdigo de una sola de las funciones, no se aprecia la recursin pero existe igualmente.

Programacin en Java/Programacin Orientada a Objetos

55

Programacin en Java/Programacin Orientada a Objetos


Frase principal: En Java TODO es un objeto. Tal vez has escuchado esta frase en algun foro, o incluso de un amigo, pero realmente Que es un objeto?. Pues bien, un objeto es cualquier cosa que puedas pensar o ver en este instante, un perro, una silla, una pelota, un misil teledirigido, un enemigo en ese videojuego que ayer acabaste :), etc, etc. Pero que tiene que ver esto con Java, podras pensar..., Pues el detalle es que Java es un lenguaje orientado a objetos. Esto quiere decir que si lo puedes pensar, entonces lo puedes programar. Retomando el ejemplo del perro, podemos hacer notar algunos detalles que nos ayudaran a entender ese misterioso mundo de "los objetos": 1. 2. 3. 4. 5. Los perros son animales. Los perros pertenecen a una raza (aunque en algunos casos mezcla de ellas :D). Los perros ladran (aunque en algunos su ladrido no se escuche). Los perros comen. Los perros toman agua.

6. Los perros corren. 7. Los perros duermen. 8. Algunos perros tienen pulgas. 9. Algunos perros tienen dueo. 10. Algunos perros tienen nombre. Bueno, vamos a dejar tranquilos a los perritos hasta aqu, y ahora explicar el por que enumere estas caractersticas de nuestros amigos caninos. En primer lugar podemos darnos cuenta que "el objeto perro" tiene caractersticas (1, 2), puede realizan acciones (3, 4, 5, 6, 7) y tienen cierto tipo de relacin con otros objetos (8, 9). Ahora no perdamos el detalle, de que ningn perro es igual a otro, es decir, aunque compartan caractersticas, no todos perteneceran a la misma raza, o al mismo dueo, o no viviran en el mismo lugar, etc. Es aqu cuando surge algo llamado "Clase". Todos los perros del mundo, pertenecen a la "Clase Perro". Y cada uno de los perros es en si un "Objeto Perro", que pertenece a la "Clase Perro". Ahora profundizando un poco mas en estos trminos. Cuando uno programa con Java, lo que principalmente hace es crear clases, de las cuales se crean objetos. Un cdigo de ejemplo para entender esto seria: class Perro{ String nombre; String raza; boolean pulgas; } Perro perrito1=new Perro(); Perro perrito2=new Perro();

Programacin en Java/Clases

56

Programacin en Java/Clases
Introduccin
La programacin orientada a objetos (POO), se rige por ciertos principios de desarrollo de software que permiten una implementacin limpia, segura y entendible de los programas. Dentro de la limpieza, eficiencia y calidad que exige el desarrollo de software mediante la programacin por objetos, se encuentran las Clases. Las Clases comprenden el estilo de diseo e implementacin ms utilizado en el modelado por objetos, aunque no es el nico. Para empezar a utilizar Clases, entender su funcionamiento y como consecuencia, su utilizacin e importancia, es necesario recordar algunos principios bsico de la Programacin en Java. En el lenguaje Java existen distintos Tipos. Un Tipo es, como su nombre lo indica un "tipo" de elemento programable ya definido dentro del lenguaje. Los principales Tipos Primitivos de Java son: boolean (falso o verdadero), byte, short, int, float, double, long y char. Ahora pensemos un momento: qu sucede si necesitamos representar o utilizar en nuestros programas "Tipos" no definidos? qu sucedera si lo que necesito guardar o manipular es la informacin de una persona? cmo manejo fechas? cmo declaro horarios? cmo represento un auto? Son muchas las preguntas que se responden mediante la implementacin de la programacin de Clases.

Definicin
Una Clase puede considerarse como la representacin programada de un objeto o situacin real y existente del mundo cotidiano. Las Clases son la forma abstracta de manejar la informacin de manera computacional. Mejor veamos un ejemplo muy sencillo: Si un programador necesita manejar la informacin de los clientes de la empresa para la cual trabaja, sera muy incdomo estar declarando, inicializando y manipulando mil nombre, mil apellidos, mil direcciones, mil nmeros de telfono, mil nmeros de identificacin, mil ... La solucin que plantea la POO es la utilizacin de Clases para representar aquellos elementos o tipos no pertenecientes al lenguaje mismo de programacin. Pues de hecho no existe un tipo primitivo que se llame "cliente". La solucin exacta que se propone es crear todos los tipos necesarios a partir, o mediante la utilizacin, de los tipos ya existentes. En este caso en particular, debemos utilizar los tipos primitivos de Java para crear nuestro propio "Tipo" (Clase). Si desea ms informacin, especficamente tcnica, puede visitar el sitio: http:/ / es. wikipedia. org/ wiki/ Clase_(inform%C3%A1tica)

Implementacin en Java
Ya es momento de ver cmo funcionan las clases en Java. Para nuestra primera implementacin vamos a utilizar el ejemplo anterior. Supngase que necesitamos manejar la informacin de n cliente, si tomamos en cuenta que necesitamos n nombres, n apellidos, n edades, y n elementos de cualquier tipo de informacin que deseemos almacenar o manipular con respecto al cliente, hara muy tedioso y sucio (computacionalmente hablando) el trabajo con la informacin, las variables, y por ende el programa en general. 1. Primero debemos analizar qu tipo de informacin queremos manipular con respecto al cliente:

Programacin en Java/Clases a. b. c. d. e. f. Nombre Apellido Identificacin Edad Direccin Nmero de Telfono

57

2. Ahora debemos analizar el tipo primitivo o no primitivo que vamos a asignarle a cada elemento de informacin de nuestro cliente:
a. Nombre b. Apellido c. Identificacin Es una cadena de caracteres, String Es una cadena de caracteres, String Es un valor numrico, int (otros programadores podran usar String)

3. Ahora pensemos en las funciones (la funcionabilidad) que queremos darle a nuestros clientes, eso es, por ejemplo, que podamos ver su nombre, cambiar el nombre, ver edad, etc:
a. ObtenerNombre b. PonerNombre c. ObtenerApellido d. PonerApellido e. ObtenerID f. PonerID Nos dara el nombre del cliente Nos permite cambiar o poner el nombre del cliente Nos dara el apellido del cliente Nos permite cambiar o poner el apellido del cliente Nos dara la identificacin del cliente Nos permite cambiar o poner la identificacin del cliente

Todas las funciones en Java siguen el siguiente modelo:


tipoFuncion tipoValorDevolver nombreFuncion ( elementosUtilizadosPorLaFuncion ) { operacionesRealizar; }

Explicando lo anterior, tenemos que: tipoFuncion: especifica el grado de encapsulamiento que le vamos a dar a nuestra funcin, o sea, que tan accesible va a estar para el programa. Existen dos tipos principales de funciones en Java; public, o sea, de acceso pblico, queriendo decir que puede ser llamada o invocada por cualquier entidad dentro o fuera de la clase. El tipo private indica una exclusividad mayor de funcionabilidad, lo que quiere decir que solamente puede ser invocado, en condiciones normales, dentro de otra funcin. tipoValorDevolver: indica el tipo de elemento que deseamos obtener de nuestra funcion. Por ejemplo, si deseamos saber el nombre de un cliente usamos como tipoValorDevolver un String o cadena de caracteres. nombreFuncion: corresponde al nombre que el programador quiere darle a la funcion. elementosUtilizadosPorLaFuncion; corresponde a todos los elementos que necesita la funcin para trabajar adecuadamente. Ejemplo sencillo, para poner el nombre de un cliente necesitamos una String como elementoUtilizadosPorLaFuncion. operacionesRealizar: corresponde a las operaciones matemticas, lgicas o computacionales en genera que se deseen aplicar a la informacin de la clase y a su contenido en s. 4. Definidos los tipos y funciones, pasamos a la declaracin e implementacin de la Clase: (Recuerden que se utiliza cdigo en Lenguaje Java) public class Cliente { String nombre; String apellido;

Programacin en Java/Clases int identificacion; }

58

Programacin en Java/Ejemplos de Implementacin


//Inicializacin de la clase public class Persona{ // Inicio de los atributos de la clase String Nombre; int Edad; //Inicio de la declaracin de los mtodos de la clase public int MostrarEdad (){ System.out.println("La edad es: "+Edad); return Edad; } }

Programacin en Java/Ejercicios Prcticos


public class array1{
public static void main (String []args){ String nombre[]; nombre=new String[3]; nombre[0]="Ana"; nombre[1]="Elisa"; nombre[2]="Juan"; // // // // // String nombre[]={"Ana", "Elisa", "Juan"}; Todas estas sentencias se resumen como la de abajo:

for (int i=0; i<nombre.length; i++){ System.out.println(nombre[i]); } } }

Programacin en Java/Objetos

59

Programacin en Java/Objetos
Un objeto es la instancia de una clase. Por ejemplo, si tenemos una clase perro definida de la siguiente manera: public class Perro { private String color; el color del perro private int numPatas; numero de patas

// a traves de esta variable almacenaremos // a traves de esta otra almacenaremos el

public Perro(String col, int numP) // cabecera del constructor de la funcion { color=col; // ponemos los valores que nos pasan por parametro a las variables del objeto numPatas=numP; } } Una instancia de la clase sera un perro en particular: Perro snoopy = new Perro("blanco", 4); En este caso estamos definiendo una nueva instancia de la clase "Perro" que llamamos snoopy, que definimos con pelo blanco y 4 patas (si, segn esto podramos crear perros o aberraciones de la naturaleza con otro nmero, XD).

Programacin en Java/Encapsulamiento

60

Programacin en Java/Encapsulamiento
Java, como lenguaje orientado a objetos puro que es, implementa la encapsulacin (o encapsulamiento) perfectamente. Este concepto consiste en la ocultacin del estado, o lo que es lo mismo, de los datos miembro de un objeto, de forma que slo es posible modificar los mismos mediante las operaciones (mtodos, en Java) definidos para dicho objeto. Cada objeto est aislado del exterior, de forma que la aplicacin al final es un conjunto ms o menos extenso de objetos que colaboran entre s mediante el paso de mensajes entre ellos, es decir, mediante la invocacin de sus operaciones o mtodos. De esta forma, los detalles de implementacin permanecen "ocultos" a las personas que usan las clases, evitando as modificaciones o accesos indebidos a los datos que almacenan las clases. Adems, el usuario de la clase no se tiene que preocupar de cmo estn implementados los mtodos y propiedades, concentrndose slo en cmo debe usarlos. La encapsulacin es una de las principales ventajas que proporciona la programacin orientada a objetos.

Programacin en Java/Herencia
La herencia es un principio fundamental de la Programacin Orientada a Objetos (POO) ya que esta permite la creacion jerarquias. Con el uso de la herencia puedes crear una clase general para definir los atributos comunes de objetos relacionados.

Programacin en Java/Polimorfismo
Son muchas formas de implementar un mismo metodo. Es La posiblilidad de utilizar una misma expresion para invocar a diferentes versiones de un mismo mtodo

Programacin en Java/La clase String

61

Programacin en Java/La clase String


La clase String nos permite con todos sus mtodos el manejo de cadenas de caracteres de forma facil. Un String no es ms que un array de caracteres. He aqui un ejemplo de creacin de un String a partir de un array de caracteres: char data[] = {'a', 'b', 'c'}; String str = new String(data); Siendo equivalente a: String str = "abc";

Constructores
Los ms utilizados son: Constructor por defecto: String s = new String(); Crea un objeto de tipo String y lo inicializa a "vacio". String s = new String("texto"); Es un constructor que recibe como parmetro una cadena de texto, guardndola en la variable (da igual el tamao de dicha cadena).

Mtodos
Algunos de los mtodos ms utilizados son: Mtodo charAt, que recibe un entero como parmetro y devuelve el carcter que ocupe dicha posicin en el objeto String que lo invoque. Ejemplo con el String s de los ejemplos del constructor: char a = s.charAt(2); En la variable a, quedara guardado el carcter 'x'.

Enlaces
Puedes consultar esta clase en el manual original en ingles aqu [1]

Referencias
[1] http:/ / java. sun. com/ javase/ 6/ docs/ api/ java/ lang/ String. html

Programacin en Java/La clase Vector

62

Programacin en Java/La clase Vector


import java.io.*; public class programa {
/** Creates a new instance of programa */ public static void main( String [] args ) throws IOException { int i,n,num,op,a,ndt,x,z,sw,j; int v[]; v=new int[10]; BufferedReader in= new BufferedReader (new InputStreamReader (System.in) ); System.out.println ("digite dimension de vector:"); n = Integer.parseInt (in.readLine()); for(i=1;i<=n;i++) { System.out.println("digite un numero:"); num=Integer.parseInt (in.readLine()); v[i]=num; } System.out.println("el vector almacenado:"); for(i=1;i<=n;i++) { System.out.println(v[i] + " "); } do{ System.out.println("menu principal"); System.out.println("ingresar nota"); System.out.println("buscar nota"); System.out.println("eliminar nota"); System.out.println("actualizar nota"); System.out.println("salir"); System.out.println("digite una opcion:"); op=Integer.parseInt(in.readLine()); switch(op){ case 1: System.out.println("digite cantidad de elementos a insertar:"); j = Integer.parseInt(in.readLine()); a=n+j; for (i=(n+1);i<=a;i++) { System.out.println("digite nuevo dato:"); ndt = Integer.parseInt(in.readLine()); v [i]=ndt; } for (i=1;i<=a;i++) { System.out.print(v [ i ] + " ");

Programacin en Java/La clase Vector


} break; case 2: System.out.println("digite dato a buscar:"); x=Integer.parseInt (in.readLine()); i=1; sw=0; while(i<=n && sw==0) { if(v[i]==x) { System.out.println("el dato se encontro:"); System.out.println("en la posicion:" + i); sw=1; } i=i+1; } if(sw==0) { System.out.println("el dato no existe:"); } break; case 3: System.out.println("### eliminar nota ###"); break; case 4: System.out.println("digite dato a buscar:"); x = Integer.parseInt(in.readLine()); i=1; sw=0; while(i<=n && sw==0) { if(v[i]==x) { System.out.println("el dato se encontro:" + i); sw=1; System.out.println("digite nuevo dato"); z = Integer.parseInt(in.readLine()); v[i]=z; } i=i+1; } if(sw==0) { System.out.println("el dato no existe:"); }

63

Programacin en Java/La clase Vector


for (i=1;i<=n;i++) { System.out.print(v [ i ] + " "); } break; case 5: System.out.println("### salir ###"); break; default: System.out.println("opcion invalida"); break; } }while(op!=5); System.out.println("fin del programa"); }

64

Programacin en Java/La clase Hashtable


Una tabla hash no es ms que una estructura de datos para asociar valores con llaves. Imagnate algo as: Llave => Valor Carlos => Mxico Jos => China Juan => USA Ernesto => Per Ah estaramos relacionando un grupo de nombres con su pais de origen. En java la implementacin seria con la clase Hashtable, aunque mas recientemente se ha favorecido el uso de Hashmap que es muy similar pero con pequeas diferencias. Esta es una implementacin de una hashtable en java, no hace nada en especial... solo relaciona nmeros con mas nmeros de forma automtica

Programacin en Java/Imprimir en Pantalla

65

Programacin en Java/Imprimir en Pantalla


Comando para imprimir por pantalla y dar un salto de lnea: System.out.println("Esto sale en pantalla\n"); Lo siguiente imprime el texto por pantalla y no hay salto de lnea. System.out.println("caracteres");

Programacin en Java/Applets
import java.io.*; import java.util.*; class CascaronIO { public static void main(String[] args) throws IOException,NumberFormatException { BufferedReader teclado=new BufferedReader(new InputStreamReader(System.in)); PrintStream pantalla=System.out; //aca va nuestro programa a partir de esta linea }}

Programacin en Java/Palabras reservadas


Las palabras clave y las palabras reservadas son utilizadas por el lenguaje y no pueden ser usadas como nombres de identificadores A continuacin mostramos una lista con estos identificadores y las secciones del libro en donde podemos encontrar su definicin.

Palabras clave
abstract boolean Tipo de variable break byte Tipo de variable case Sentencia switch catch char Tipo de variable class const (sin uso) continue default

do double Tipo de variable

Programacin en Java/Palabras reservadas else Sentencia if-else extends final La variable final finally float Tipo de variable for goto (sin uso) if Sentencia if-else implements import instanceof int

66

Tipo de variable interface long Tipo de variable native new package private protected public return short Tipo de variable static strictfp super switch Sentencia switch synchronized this throw throws transient try

Sentencia try void volatile while wesureal

Programacin en Java/Palabras reservadas true (literal booleano) Literales boolean false (literal booleano) Literales boolean null (literal nulo)

67

Programacin en Java / Prcticas


Programacin en Java / Prcticas / Variables Programacin en Java / Prcticas / Sentencias if-else Programacin en Java / Prcticas / Operador if-else

Fuentes y contribuyentes del artculo

68

Fuentes y contribuyentes del artculo


Programacin en Java Fuente: http://es.wikibooks.org/w/index.php?oldid=149785 Contribuyentes: Bastie, Boldoc, Bufalo 1973, Earizon, EnriqueJopia, Ferk, Ihck, ManuelGR, Mike.lifeguard, Oleinad, Pirenne, Rutrus, Vegarede, 41 ediciones annimas Programacin en Java/Instalacin JDK Fuente: http://es.wikibooks.org/w/index.php?oldid=147371 Contribuyentes: Earizon, Oleinad, Wilfredor, 5 ediciones annimas Programacin en Java/Caractersticas del lenguaje Fuente: http://es.wikibooks.org/w/index.php?oldid=135148 Contribuyentes: Ihck, ManuelGR, Oleinad, 2 ediciones annimas Programacin en Java/Primer programa Fuente: http://es.wikibooks.org/w/index.php?oldid=144812 Contribuyentes: Aguila3000, Albert Ovide, Albmont, Luckas Blade, ManuelGR, Oleinad, Pirenne, 7 ediciones annimas Programacin en Java/Variables Fuente: http://es.wikibooks.org/w/index.php?oldid=142299 Contribuyentes: Guevonaso, H, ManuelGR, Pirenne, 11 ediciones annimas Programacin en Java/Literales Fuente: http://es.wikibooks.org/w/index.php?oldid=143265 Contribuyentes: Guevonaso, Pirenne, 5 ediciones annimas Programacin en Java/La palabra reservada final Fuente: http://es.wikibooks.org/w/index.php?oldid=134216 Contribuyentes: Boldoc, Pedvi, Pirenne, 1 ediciones annimas Programacin en Java/Secuencias de Escape Fuente: http://es.wikibooks.org/w/index.php?oldid=150798 Contribuyentes: Morza, Yoearroyo, 28 ediciones annimas Programacin en Java/Arrays Fuente: http://es.wikibooks.org/w/index.php?oldid=134222 Contribuyentes: H, Jarisleif, ManuelGR, 26 ediciones annimas Programacin en Java/Operadores Fuente: http://es.wikibooks.org/w/index.php?oldid=134226 Contribuyentes: H, ManuelGR, Pedvi, Pirenne Programacin en Java/Operadores aritmticos Fuente: http://es.wikibooks.org/w/index.php?oldid=134228 Contribuyentes: Pirenne, 4 ediciones annimas Programacin en Java/Operadores relacionales Fuente: http://es.wikibooks.org/w/index.php?oldid=134230 Contribuyentes: Pirenne Programacin en Java/Operadores booleanos Fuente: http://es.wikibooks.org/w/index.php?oldid=134232 Contribuyentes: Pirenne, 1 ediciones annimas Programacin en Java/Operadores de bits Fuente: http://es.wikibooks.org/w/index.php?oldid=134236 Contribuyentes: ManuelGR, Oleinad, Pirenne, 24 ediciones annimas Programacin en Java/Operadores de asignacin Fuente: http://es.wikibooks.org/w/index.php?oldid=134238 Contribuyentes: Pirenne Programacin en Java/Operador cast Fuente: http://es.wikibooks.org/w/index.php?oldid=134240 Contribuyentes: Dferg, Pirenne, Triki, 2 ediciones annimas Programacin en Java/Precedencia de operadores Fuente: http://es.wikibooks.org/w/index.php?oldid=134242 Contribuyentes: Pirenne, 1 ediciones annimas Programacin en Java/Estructuras de control Fuente: http://es.wikibooks.org/w/index.php?oldid=134244 Contribuyentes: Pirenne Programacin en Java/Estructuras de seleccin Fuente: http://es.wikibooks.org/w/index.php?oldid=134246 Contribuyentes: Pirenne, 1 ediciones annimas Programacin en Java/Sentencia if-else Fuente: http://es.wikibooks.org/w/index.php?oldid=134248 Contribuyentes: Dferg, Pirenne, 1 ediciones annimas Programacin en Java/Sentencia switch Fuente: http://es.wikibooks.org/w/index.php?oldid=134250 Contribuyentes: Luckas Blade, Pirenne, 5 ediciones annimas Programacin en Java/Operador if-else Fuente: http://es.wikibooks.org/w/index.php?oldid=134254 Contribuyentes: Pirenne Programacin en Java/Estructuras de iteracin Fuente: http://es.wikibooks.org/w/index.php?oldid=134256 Contribuyentes: Pirenne, 1 ediciones annimas Programacin en Java/Sentencia while Fuente: http://es.wikibooks.org/w/index.php?oldid=134258 Contribuyentes: Luckas Blade, Pirenne, 8 ediciones annimas Programacin en Java/Sentencia do-while Fuente: http://es.wikibooks.org/w/index.php?oldid=134262 Contribuyentes: Pirenne Programacin en Java/Sentencia for Fuente: http://es.wikibooks.org/w/index.php?oldid=147278 Contribuyentes: ManuelGR, Pirenne, 5 ediciones annimas Programacin en Java/Sentencia break Fuente: http://es.wikibooks.org/w/index.php?oldid=134266 Contribuyentes: Pirenne, 4 ediciones annimas Programacin en Java/Sentencia continue Fuente: http://es.wikibooks.org/w/index.php?oldid=134268 Contribuyentes: 3 ediciones annimas Programacin en Java/Funciones Fuente: http://es.wikibooks.org/w/index.php?oldid=152584 Contribuyentes: Oscarlondono, Pillou, Pirenne, 2 ediciones annimas Programacin en Java / Parmetros de una funcin Fuente: http://es.wikibooks.org/w/index.php?oldid=152580 Contribuyentes: Earizon, Oscarlondono, 4 ediciones annimas Programacin en Java/Clusula return Fuente: http://es.wikibooks.org/w/index.php?oldid=152582 Contribuyentes: Oscarlondono, VictorRS, 1 ediciones annimas Programacin en Java/Funciones recursivas Fuente: http://es.wikibooks.org/w/index.php?oldid=152585 Contribuyentes: Baiji, NaitoNeko, Oscarlondono, Pirenne, VictorRS, 5 ediciones annimas Programacin en Java/Programacin Orientada a Objetos Fuente: http://es.wikibooks.org/w/index.php?oldid=109518 Contribuyentes: Bufalo 1973, Elingedgar, Ferk, Roqueorts, Vinikike, 1 ediciones annimas Programacin en Java/Clases Fuente: http://es.wikibooks.org/w/index.php?oldid=148007 Contribuyentes: Ferk, 22 ediciones annimas Programacin en Java/Ejemplos de Implementacin Fuente: http://es.wikibooks.org/w/index.php?oldid=148008 Contribuyentes: Ferk, Hawk ray, 1 ediciones annimas Programacin en Java/Ejercicios Prcticos Fuente: http://es.wikibooks.org/w/index.php?oldid=110697 Contribuyentes: 1 ediciones annimas Programacin en Java/Objetos Fuente: http://es.wikibooks.org/w/index.php?oldid=141988 Contribuyentes: 2 ediciones annimas Programacin en Java/Encapsulamiento Fuente: http://es.wikibooks.org/w/index.php?oldid=124239 Contribuyentes: 3 ediciones annimas Programacin en Java/Herencia Fuente: http://es.wikibooks.org/w/index.php?oldid=148124 Contribuyentes: XXkasperXx Programacin en Java/Polimorfismo Fuente: http://es.wikibooks.org/w/index.php?oldid=131069 Contribuyentes: Josias, 1 ediciones annimas Programacin en Java/La clase String Fuente: http://es.wikibooks.org/w/index.php?oldid=148060 Contribuyentes: Maximossj, Oleinad, 1 ediciones annimas Programacin en Java/La clase Vector Fuente: http://es.wikibooks.org/w/index.php?oldid=133385 Contribuyentes: Wutsje, 2 ediciones annimas Programacin en Java/La clase Hashtable Fuente: http://es.wikibooks.org/w/index.php?oldid=151243 Contribuyentes: 3 ediciones annimas Programacin en Java/Imprimir en Pantalla Fuente: http://es.wikibooks.org/w/index.php?oldid=122963 Contribuyentes: Morza, Oleinad, 5 ediciones annimas Programacin en Java/Applets Fuente: http://es.wikibooks.org/w/index.php?oldid=104195 Contribuyentes: 1 ediciones annimas Programacin en Java/Palabras reservadas Fuente: http://es.wikibooks.org/w/index.php?oldid=146971 Contribuyentes: Drini, Pirenne, 12 ediciones annimas

Fuentes y contribuyentes del artculo


Programacin en Java / Prcticas Fuente: http://es.wikibooks.org/w/index.php?oldid=19170 Contribuyentes: Pirenne

69

Fuentes de imagen, Licencias y contribuyentes

70

Fuentes de imagen, Licencias y contribuyentes


Archivo:75%.png Fuente: http://es.wikibooks.org/w/index.php?title=Archivo:75%.png Licencia: GNU Free Documentation License Contribuyentes: Chris 73, Cwbm (commons), Kilom691, Ksd5, Marcelo Reis, Siebrand, 1 ediciones annimas Archivo:50%.png Fuente: http://es.wikibooks.org/w/index.php?title=Archivo:50%.png Licencia: GNU Free Documentation License Contribuyentes: Chris 73, Cwbm (commons), Kilom691, Ksd5, Marcelo Reis, Siebrand, 2 ediciones annimas Archivo:100%.png Fuente: http://es.wikibooks.org/w/index.php?title=Archivo:100%.png Licencia: GNU Free Documentation License Contribuyentes: Abujoy, Cwbm (commons), Kilom691, Ksd5, Loyna, ManuelGR, Siebrand, Vincnet, 2 ediciones annimas Archivo:00%.png Fuente: http://es.wikibooks.org/w/index.php?title=Archivo:00%.png Licencia: GNU Free Documentation License Contribuyentes: Kilom691, ManuelGR, Siebrand

Licencia

71

Licencia
Creative Commons Attribution-Share Alike 3.0 Unported http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/

Вам также может понравиться