Anda di halaman 1dari 100

Programacin Java bsica 7 - 1

CAPITULO

Programacin Java bsica


Objetivos

Establecer cmo pasar del modelo de Objetos al lenguaje de programacin. Identificar los componentes de un programa en Java. Representar en cdigo Java las principales relaciones de asociacin de clases Identificar y definir los diferentes tipos de datos primitivos. Identificar, definir y realizar operaciones con los operadores disponibles en Java. Definir y manejar bidimensionales. arreglos unidimensionales y

Identificar, definir y caracterizar las instrucciones de control de flujo en Java. Aplicar las instrucciones seleccin y de ciclos o repeticiones en la solucin de problemas. Aplicar las instrucciones de seleccin mltiple en la solucin de problemas. Aplicar las instrucciones para manejo de saltos. Uso de los componentes JOPtionPane, ScrollPane y JTextArea para la entrada y salida.

Programacin Java bsica: Programacin Java bsica 7 - 2

Introduccin
En los captulos anteriores se han presentado ejemplos y ejercicios que involucran la utilizacin de variables que almacenan tipos especficos de datos, as como constantes y operadores para realizar operaciones tanto aritmticas como relacionales. Para tal efecto se han diseado aplicaciones que le dan forma a las clases asociadas con cada uno de los problemas a resolver. Aunque no se ha dado la estructura formal de las clases, tanto las aplicaciones como las applets ilustradas le dan al lector estudioso una idea de la estructura general que tienen estos tipos de programas en Java. Java es un lenguaje orientado a objetos, todo en Java se maneja como objetos. En las interacciones de los objetos se precisa el intercambio de mensajes y la realizacin de determinadas tareas, que involucran variables y operaciones a realizar entre estas. La manera como la informacin pueda ser almacenada en un campo o en una variable, est relacionada con el tipo de informacin que dicha variable almacena, para diferenciar una variable de otra en cuanto a lo que puede almacenar se utiliza el trmino tipo de dato. Java como lenguaje de programacin, maneja varios tipos de datos, que se pueden utilizar al declarar variables y arreglos o matrices, definir tambin el tipo de dato (valores) que puede almacenar dicha variable, arreglo o matriz}. En este captulo se tratar en detalle el tema de los tipos de datos, as como sus rangos(valores que puede tomar un dato un tipo dado) y operaciones para su manipulacin. Dentro de los tipos de datos estructurados se encuentran los arreglos o vectores que son conjuntos de elementos de un tipo dado a cada uno de los cuales se puede acceder mediante un nombre y un indice que indica la posicin del elemento dentro del arreglo. Los arreglos tanto unidimensionales como bidimensionales se tratarn, junto con algunas aplicaciones para la manipulacin este tipo de datos. Se plantea una serie de ejercicios que el lector debe realizar a fin de desarrollar las habilidades necesarias para incursionar con propiedad en el desarrollo de aplicaciones en Java. Se utilizar componentes Swing para denotar la entrada/salida. En contraste con la entrada salida de datos va linea de comandos,presentada en algunos ejemplos de los captulos anteriores.

Programacin Java bsica: Introduccin 7 - 3 En ausencia de instrucciones de control del flujo en un programa, su ejecucin se realiza en una sola direccin, de arriba a abajo, como est escrito el programa en lenguaje fuente. En el desarrollo de algoritmos mediante el lenguaje algortmico, se presentaron las instrucciones para su control de flujo, fundamentalmente para selecciones, repeticiones y selecciones mltiples, las cuales hacen que el flujo se desve de su sentido natural de arriba-abajo. En el lenguaje de programacin, a las instrucciones que se encargan de controlar el flujo de la ejecucin de un programa se les denomina instrucciones de control. Este control se hace de la misma manera o similar, en todos los lenguajes de programacin actuales. Las instrucciones de control en Java corresponden a las mismas instrucciones de control definidas en el lenguaje algortmico: seleccin, repeticin o iteracin y de salto. Las instrucciones de seleccin permiten que el programa en su ejecucin seleccione distintos caminos en funcin del resultado de una expresin lgica o del estado de una variable. Las de repeticin o iteracin permiten que el programa repita una serie de instrucciones hasta que se cumpla una condicin dada. Las instrucciones de salto permiten que el flujo del programa salte incondicionalmente a otro lugar del mismo. Se presenta ademas en este captulo las instrucciones de control en Java, acompaadas de sus definiciones sintcticas, as como de los ejemplos ilustrativos segn sea el caso, a fin de que el estudiante se familiarice con su utilizacin y pueda enfrentar la codificacin de programas para resolver problemas en el computador, utilizando el lenguaje Java. A lo largo del captulo se presenta un nmero considerable de ejemplos resueltos, que acompaados de las explicaciones del caso, le permiten al lector resolver en Java de una manera prctica, virtualmente cualquiera de los problemas presentados hasta ahora.

De la representacin de objetos a Java


Ya se ha indicado que, las clases representan generalizaciones de objetos con caractersticas y comportamiento similares. Las clases se definen o especifican con un nombre, atributos y mtodos. Los objetos como instancias de una clase llevan nombre, atributos y mtodos. As, al modelar el dominio de un problema, se procede a identificar los objetos y su agrupacin en clases, a su vez las clases se organizan jerrquicamente para identificar su estructura.

Programacin Java bsica: De la representacin de objetos a Java 7 - 4 El desarrollo de la estructura y el comportamiento de una clase a partir de la cual se crean los diferentes objetos a utilizar en la solucin de un problema es el trabajo de la programacin orientada a objetos (POO), la cual implica obviamente el desarrollo en el lenguaje de programacin, de los diferentes algoritmos que sern incluidos en cada uno de los mtodos de las clases y que sern utilizados por los objetos que se creen a partir de estas clases. En Java todo son objetos, con lo cual, un programa es un objeto, que se crea a partir de la clase que lo representa cuando esta se ejecuta en un computador. Ntese que al ser compilado un programa en lenguaje fuente, se genera un archivo .class con el nombre de la respectiva clase. El objeto de la clase de un programa compilado, se crea a partir de la ejecucin de esa clase, lo cual hace que, cada vez que se ejecute el archivo .class se crea en la memoria del computador una instancia de esta clase, o sea un objeto. Los datos o mensajes que se suministren a este objeto en tiempo de ejecucin, harn que ste arroje los resultados esperados. Para responder a la pregunta de cmo pasar de la representacin de objetos a su representacin como un programa en Java o sea como un objeto en Java, vamos a resolver la siguiente situacin alrededor de un problema a resolver. En el mundo de los objetos, un problema es un objeto. Tambin puede suceder que, un objeto, tenga un problema. En cualquier caso, la solucin a ese problema, no es otra cosa que un objeto tambin. Modelar una solucin en trminos de uno o varios objetos y su ejecucin mediante un lenguaje de programacin orientado a objetos, es la lnea conductora del desarrollo de sistemas contemporneo. Se presentan a continuacin unos ejemplos, que persiguen ilustrar de manera muy general, la conversin del modelo de objetos de aplicaciones sencillas a su forma codificada en lenguaje Java. Problema No. 1: Desarrollar un programa en Java que permita calcular el rea y el volumen de un cilindro, dados el radio de la base y la altura. Los valores a radio y altura se leen por el teclado. El rea y el volumen se escriben en la pantalla. Suponemos en primer lugar que se han realizado los pasos de la Metodologa para solucin de problemas en el computador hasta el algoritmo y su prueba respectiva. Para efectos de ilustracin se presenta el algoritmo respectivo:
inicio /*variables de entrada, entero: radio, altura; variables de salida, real area, volumen.*/

Programacin Java bsica: De la representacin de objetos a Java 7 - 5


escriba(Digite el valor del radio del la base); lea(radio); escriba(Digite el valor de la altura); lea(altura); /* pre: se han leido el radio y la altura como enteros mayores que cero*/ volumen = 3.1416*radio*radio*altura; area = 2*3.1416*radio*radio + 2*3.1416*radio*altura; escriba(El volumen del cilindro es , volumen); escriba(El area del cilindro es , area); /* post: se ha calcula y escrito los valores de area y volmen*/ fin;

Aunque en un lenguaje procedimental, se puede codificar el algoritmo directamente, convirtiendo las instrucciones casi que literalmente a las instrucciones correspondientes del lenguaje de programacin, el trabajo bajo objetos es algo diferente y la codificacin del programa pasa por el diseo de la solucin en su representacin de objetos. En otros trminos, la solucin del problema anterior bajo el enfoque de objetos, significa que se debe disear un objeto que resuelva el problema propuesto. Como objeto debe tener nombre, atributos (que pueden ser tambin los objetos que tiene), as como los mtodos correspondientes a su comportamiento. La clase solucin podr tener como nombre AreaVolCilindro, como atributos el radio, la altura, el rea y el volumen. Se utilizar un slo mtodo, dentro del cual se llevarn a cabo los procesos de lectura, clculos y generacin de resultados. La clase puede tener, por ejemplo, la estructura segn la clase definida en seguida:

AreaVolCilindro entero radio,altura; real area, volumen; metodo1();

Figura 1 Clase AreaVolCilindro

El algoritmo desarrollado para el problema, pasa a ser el mtodo de la clase, ya que los mtodos son los que definen el comportamiento de estas. De esta manera, los mtodos contienen lo que lo que los objetos realizan y es el lugar

Programacin Java bsica: De la representacin de objetos a Java 7 - 6 donde se codificarn, con algunas modificaciones, los algoritmos que se han desarrollado para la solucin a un problema en particular. Puede afirmarse que, la denominacin de funciones, dada en algoritmos, corresponde a mtodos dentro de un objeto. Ejecutando la clase AreaVolCilindro, una vez se la haya compilado, se podr resolver el problema indicado. Veamos la codificacin de la clase AreaVolCilindro en lenguaje Java:
1.import javax.swing.JOptionPane; 2.public class AreaVolCilindro{ 3.static int radio, altura; 4.static float area, volumen; 5. public static void main(String args[]){ 6. String dato1, dato2; 7. dato1 = JOptionPane.showInputDialog("Digite valor radio de la base:"); 8. radio = Integer.parseInt(dato1); 9. dato2 = JOptionPane.showInputDialog("Digite valor altura:"); 10. altura = Integer.parseInt(dato2); 11. area = (float)((2*3.1416*radio)*altura + 2*3.1416*radio*radio); 12. volumen = (float)(3.1416*radio*radio)*altura; 13. JOptionPane.showMessageDialog(null, "El area es = "+ area +"\nEl volumen es = "+volumen ); 14. } 15. }

Linea 1: indica que se est importando la clase JoptionPane del paquete javax.swing. Esta clase es del paquete Swing que se utilizar en adelante en el texto para la lectura y generacin de resultados. Linea 2-15. es el cuerpo de la clase AreaVolCilindro, de acuerdo al diseo establecido antes. Lineas 3-4: es la declaracin de las variables o atributos de la clase AreaVolCilindro. Lineas 5-14: es el cuerpo del mtodo principal de la clase, cuyo nombre es main(); es el nico mtodo de la clase. Linea 6: es la declaracin de dos variables de tipo String(cadena) para almacenar los caracteres leidos mediante el componente JoptionPane. Linea 7: aqu se utiliza el mtodo showInputDialog de la clase

Programacin Java bsica: De la representacin de objetos a Java 7 - 7


JoptionPane, para generar la siguiente salida en la pantalla, en la cual se ilustra que se estn digitando los caracteres 12 (uno y dos) para la base. Se

debe presionar OK una vez se digite el valor indicado.

Figura 2 Lectura de la base

Linea 8: se convierte la cadena leda a un valor entero, asignado al radio mediante Integer.parseInt(dato1). A partir de esta linea, en la variable radio queda almacenado el valor numerico de tipo entero 12. Lineas 9-10: hacen lo mismo que las anteriores, pero esta vez para la altura:

Figura 3 Lectura de la altura

Lineas 11-12: calcula los valores para area y volumen. Linea 13: genera los resultados en la pantalla utilizando el mtodo showMessageDialog, de la clase JoptionPane. Obsrvese cmo se ha construido la salida de los resultados, combinando tanto ttulos como valores de las variables a escribir.

Programacin Java bsica: De la representacin de objetos a Java 7 - 8

Figura 4 Resultados del rea y volumen

Vemos cmo se ha desarrollado en Java una clase solucin al problema planteado. Cada vez que se ejecute esa clase en un computador, se generar un objeto solucin para un problema en particular. Problema No. 2: Desarrollar un programa en Java que permita calcular el valor de la siguiente serie para sus N(N>0 y N< 20) primeros trminos. El valor de N se deber leer por el teclado y verificar que cumple la condicin indicada. El resultado se debe mostrar por la pantalla. S = 1 - 2! + 3! +4! - 5! + 6! + 7! ... Se supone nuevamente que se ha desarrollado el algoritmo y su respectiva prueba de escritorio, correspondiente a los pasos de la Metodologa para la Solucin de problemas en el Computador. Ahora la clase con la cual se resolver el problema tendr la siguiente estructura:

SumaFactorial int suma, n;

void main();

El nombre de la clase es SumaFactorial, tiene dos atributos de tipo entero: suma para el resultado y n para el nmero de trminos de la serie; tiene un mtodo en este caso el mtodo principal main(), que denota una aplicacin o clase principal. Puede desde luego crearse una clase SumaFactorial que no tenga un mtodo principal, es decir que no sea una clase principal, sino que para su uso se requiera de otra clase, esta si principal. El mecanismo de utilizacin de los mtodos de la clase SumaFactorial, podr ser mediante la creacin de un objeto del tipo SumaFactorial, o utilizando sus mtodos haciendo

Programacin Java bsica: De la representacin de objetos a Java 7 - 9 referencia al nombre de la clase. La solucin presentada aqu es como una clase principal. Una forma sencilla de codificar la clase SumaFactorial en el cuerpo de un programa tipo aplicacin es ilustrada a continuacin:
/* i variable indice del ciclo suma donde se lleva la sumatoria n el valor del numero de terminos numMas numero de signos + antes del signo contSignos contador de signos + en cualquier momento facto donde se lleva acumulado el factorial */ import javax.swing.JOptionPane; // importa class JOptionPane public class SumaFactorial{ static int suma, n; public static void main(String dato[]){ int numMas, contSignos, facto; String entrada; suma = 0; numMas = 1; contSignos =0; do{ entrada= JOptionPane.showInputDialog("Digite un valor para n:); n= Integer.parseInt(entrada);} while(n<1 || n >19) facto = 1; for (i = 1; i<= n; i++){ facto=facto*i; if(numMas == contSignos){ suma = suma - facto; numMas = numMas +1; contSignos = 0;} else{ suma = suma + facto; contSignos = contSignos +1;} } JOptionPane.showMessageDialog(null, "La serie da: " + suma, "Resultados", JOptionPane.PLAIN_MESSAGE ); } }

Para este caso, el mtodo main() contiene el desarrollo en Java del algoritmo respectivo para el clculo de la sumatoria solicitada y la entrada y salida de valores por medio del componente JoptionPane, como en el problema

Programacin Java bsica: De la representacin de objetos a Java 7 - 10 anterior. Cuando se ejecuta el archivo .class correspondiente a la clase SumaFactorial, segn el programa Java anterior, se crea un objeto el cual operar segn los datos que se suministren. Los resultados al ejecutar la clase se ilustran a continuacin:

Figura 5 Entrada de n

Figura 6 Resultados de SumaFactorial

Problema No.3: Desarrollar un programa en Java que permita calcular el valor de la serie indicada en el problema anterior, pero esta vez utilizando una clase con la siguiente estructura:

SumaFactorial int n;

int sumatoria(); void main();

Programacin Java bsica: De la representacin de objetos a Java 7 - 11 Aqu se puede observar que la clase principal SumaFactorial tiene un atributo n, o sea el valor correspondiente al nmero de trminos a calcular y dos mtodos: uno para el clculo de la sumatoria llamado sumatoria(), el cual devuelve o retorna un valor entero y el principal main(), para la lectura, llamado al mtodo sumatoria() y escritura de resultados. A continuacin se presenta la codificacin de la clase SumaFactorial:
1.import javax.swing.JOptionPane;// importa JOptionPane
2. public class SumaFactorial{ 3. static int n; 4. static int sumatoria() { 5. int i, facto; 6. int suma = 0; 7. int numMas = 1; 8. int contSignos = 0;

9. facto = 1; 10. for (i = 1; i<= n; i++){ 11. facto=facto*i; if(numMas == contSignos){ 12. 13. suma = suma - facto; 14. numMas = numMas +1; 15. contSignos = 0;} else { 16. 17. suma = suma + facto; 18. contSignos = contSignos +1; 19. } 20. } 21. return suma; 22. }
23.public static void main(String arg[]){

24. String entrada;


25. 26. int resultado; do{ 27. entrada= JOptionPane.showInputDialog( "Digite un valor para n:" );

28.
29.

n= Integer.parseInt(entrada);}
while(n<1 || n>19);

30. resultado= sumatoria(); 31. JOptionPane.showMessageDialog(null, "La serie da: " + resultado, "Resultados",JOptionPane.PLAIN_MESSAGE ); 32. } 33. }

La ejecucin de la clase anterior arrojar los mismos resultados que los obtenidos anteriormente. Se presenta a continuacin algunas explicaciones al cdigo de la clase anterior: Lineas 2-33: es el cuerpo de la clase SumaFactorial.

Programacin Java bsica: De la representacin de objetos a Java 7 - 12 Linea 3: declaracin de la variable entera n como atributo de la clase. Lineas 4-22: cuerpo del mtodo sumatoria, donde se calcula la sumatoria de los n primeros trminos de la serie. Obsrvese que este mtodo no tiene parmetros ya que el valor de n al ser declarado como atributo de clase (tambin puede entenderse como una variable global), puede ser accedido desde el interior del mtodo. As mismo este mtodo retorna un valor entero, por eso el tipo del mtodo es entero. Lnea 21:instruccin mediante la cual el mtodo sumaserie() devuelve el valor calculado, el cual es el resultado de la sumatoria y es un valor entero. Lneas 23-32: cuerpo del mtodo principal main(). Linea 30: llamado al mtodo sumaserie() y almacenamiento del valor devuelto en la variable resultado. Veamos a continuacin una modificacin de la versin anterior en donde se ha desarrollado la clase SumaFactorial1, con su atributo n, de tal manera que pueda ser usada por cualquier otra clase que se desarrolle, por ejemplo por la clase PruebaSumaFac, en donde se suministrar un valor para el atributo n y se llamar a la clase SumaFac mediante la creacin de un objeto sumatoria. La clase PruebaSumaFac usa a la clase SumaFac. Obsrvese que en la clase SumaFac, se tiene un mtodo sumatoria, que es el encargado de hacer las operaciones del algoritmo del clculo de la serie dada Problema No. 4: Desarrollar un programa en Java que permita calcular el valor de la serie indicada en el problema anterior, pero esta vez utilizando la siguiente estructura de clases:

PruebaSumaFac

SumaFactorial int n;

void main();

int sumatoria();

En este diagrama se est indicando que la clase SumaFactorial ahora no ser una clase principal, pues no contiene el mtodo main(), sin embargo contiene

Programacin Java bsica: De la representacin de objetos a Java 7 - 13 un mtodo para la sumatoria y un atributo como en el problema anterior. Por tanto la utilizacin de la clase SumaFactorial se deber hacer mediante su llamado dentro del cuerpo de otra clase, en este caso PruebaSumaFac que es una clase principal pues contiene el mtodo main(). Dicho en terminologa de objetos, la clase PruebaSumaFac usa la clase SumaFactorial, o sea que entre estas dos clase hay una relacin de uso, en el sentido explicado antes. En esta situacin dentro del cuerpo de la clase PruebaSumaFac se deber crear una instancia u objeto del tipo SumaFactorial, con el cual se podr invocar el mtodo sumatoria(), para el clculo de la serie segn el nmero de trminos indicado. A continuacin el cdigo fuente en Java tanto de la clase SumaFactoial como de la clase PruebaSumaFac que usa a la primera. Se debe compilar cada una por separado y dejndo los archivos PruebaSumafac.class y SumaFactorial.class en el mismo directorio.
1.public class SumaFactorial{ 2. static int n; 3. int sumatoria() { 4. int i, facto; 5. int suma = 0; 6. int numMas = 1; 7. int contSignos = 0; 8. facto = 1; 9. for (i = 1; i<= n; i++){ 10. facto=facto*i; 11. if(numMas == contSignos){ 12. suma = suma - facto; 13. numMas = numMas +1; 14. contSignos = 0;} 15. else { 16. suma = suma + facto; 17. contSignos = contSignos +1; 18. } 19. } 20. return suma; 21. } 22.}

Lineas 1-22: cuerpo de la clase SumaFactorial. El clculo del valor de la sumatoria se hace ahora mediante una clase sencilla, o no principal, que tiene un atributo de clase n y un mtodo sumatoria(). Obsrvese que ya no existe dentro de esta clase el mtodo main().

Programacin Java bsica: De la representacin de objetos a Java 7 - 14


1.import javax.swing.JOptionPane; // importa class JOptionPane 2.class PruebaSumaFac{ 3. public static void main(String arg[]){ 4. String entrada; 5. int numero, resultado; 6. SumaFactorial sumaSerie = new SumaFactorial(); 7. do{ 8. entrada= JOptionPane.showInputDialog( "Digite un valor para n:" ); 9. numero= Integer.parseInt(entrada);} 10. while(numero<1 || numero>19); 11. sumaSerie.n = numero; 12. resultado= sumaSerie.sumatoria(); 13. JOptionPane.showMessageDialog(null, "La serie da: " + resultado, "Resultados", JOptionPane.PLAIN_MESSAGE ); 14. 15. } }

Lineas 1-15: cuerpo de la clase principal PruebaSumaFac que usa el mtodo sumatoria() de la clase SumaFactorial, mediante la creacin de una instancia u objeto de esta, llamado sumaSerie. Linea 6: se crea un objeto llamado sumaSerie del tipo SumaFactorial, invocando un mtodo constructor SumaFactorial() mediante la clusula new. En otros trminos, crea una nueva instancia de SumaFactorial con el nombre sumaSerie. Linea 11: le asigna a la variable o atributo n, del objeto sumaSerie, el valor ledo y almacenado en numero. Linea 12: invoca el mtodo sumatoria() del objeto sumaSerie, para calcular el valor de la serie. El resultado es almacenado en la variable resultado. Los resultados obtenidos al ejecutar la clase PruebaSumaFac son los mismos que los obtenidos en las versiones anteriores. Debe anotarse que, la clase SumaFactorial en su ltima versin, podr ser utilizada por cualquier otra clase para el clculo de la serie indicada. Con estos ejemplos se ilustra de manera general el proceso de pasar de la representacin de objetos al lenguaje de programacin Java.

Programacin Java bsica: De la representacin de objetos a Java 7 - 15

Componentes de un programa Java


En los ejemplos presentados se ha visto que la estructura de un programa Java se forma a partir de una o ms clases. Cada una de estas clases tienen sus atributos y los mtodos propios. En cada programa Java hay una clase principal, a partir de la cual se ejecuta ste. Un programa se puede conformar de ms de una clase, en cuyo caso las dems clases diferentes a la clase principal se deben compilar por separado y almacenarse en el mismo directorio donde se ha compilado la clase principal. Cada clase est formada por atributos, los cuales pueden ser variables de algn tipo u objetos, as como de mtodos, los cuales estn formados por instrucciones tanto aritmticas, lgicas y relacionales, de instrucciones de control de flujo como son los ciclos y las repeticiones. Dentro del cuerpo de los mtodos se encuentran adems las variables, que pueden ser de tipo entero, lgico, carcter, booleano, la invocacin de mtodos y objetos y el manejo de funciones.

Las relaciones entre clases


Cada una de las relaciones entre objetos sealadas en la Unidad anterior, herencia, uso y composicin, se pueden representar dentro del cdigo de un programa Java. Codificacin de la relacin es-un La relacin es-un dada entre clases, es la relacin de especializacin de una en otra, es decir, aquella que implementa las relaciones de herencia. La forma ms comn de representar esta relacin es mediante subclases de una clase. Por ejemplo, si se tiene una clase AnimalMamifero, una subclase de sta es Carnivoros. Dado que un Carnivoro es un AnimalMamifero, su codificacin quedara de la siguiente manera:
public class Carnvoro extends AnimalMamifero{ ..... }

Cualquier caracterstica de tipo public, tanto atributos como mtodos de la clase AnimalMamifero, es tambin una caracterstica de Carnvoro, es decir la clase Carnvoro, hereda todas las carctersticas pblicas de AnimalMamifero. Solo bastara agregarle a Carnvoro las caractersticas propias, atributos y mtodos que lo caracterizan, en este caso que lo especializan como animal carnvoro.

Programacin Java bsica: De la representacin de objetos a Java 7 - 16 Codificacin de la relacin tiene-un Esta relacin se da por en la composicin de un objeto a partir de otros, por ejemplo, la mayora de objetos en su habitacin estn formados por otros objetos. La LamparaDeMesaDeNoche, se compone del objeto bombillo, del objeto portaLampara y otros. El perrito Lucas de su vecina, tiene un collar de dientes de Tiburn, etc Sea por ejemplo la clase LamparaDeMesa, la cual tiene un bombillo, un suiche y un porta lmpara, su codificacin quedara de la siguiente manera:
public class LamparaDeMesa { private Bombillo bombilloLampara; private Suiche interruptorLampara; ..... }

Indica que la clase LamparaDeMesa tiene un objeto bombilloLampara del tipo Bombillo y un objeto interruptorLampara de tipo Suiche. Obviamente puede contener ms objetos. Codificacin de la relacin utiliza-una En el desarrollo de una clase puede verse la necesidad de utilizar instancias provistas por otras clases, por ejemplo la clase Persona, requerir de una instancia RelojDespertador, a fin de fijar la hora para su alarma. En este caso la siguiente codificacin ilustra la relacin Persona usa-un RelojDespertador:
public class Persona{ RelojDespertador miRelojDespertador = new RelojDespertador(); miRelojDespertador.fijarHoraAlarma(laHora); ....

} En el cdigo anterior se crea un objeto miRelojDespertador a partir de la clase relojDespertador, luego se usa el mtodo fijarHoraAlarma (laHora), que est contenido dentro de la clase RelojDespertador, para fijar la hora de la alarma en laHora, valor suministrado como argumento de este mtodo.

Identificadores en Java
Por identificadores se entiende los nombres dados a variables, mtodos, clases, paquetes e interfaces (que se definirn ms adelante). Los identificadores no son

Programacin Java bsica: De la representacin de objetos a Java 7 - 17 cosas u objetos, justamente son la forma de llamar esas cosas u objetos. A lo largo del texto, a travs de los diferentes ejercicios y ejemplos se ha manejado identificadores como System.out.println, String, args, variable1, grabadora, Ejemplo01 y otros. Los identificadores, se pueden formar de letras, nmeros, el smbolo _ (subrayado) y el smbolo $. Los identificadores se deben iniciar con una letra, con el smbolo _ (subrayado) con el signo $. Cada variable u objeto toma un nombre o identificador con el cual se identifican en el programa, aplicacin o applet. Una buena prctica es asignar nombres significativos y mnemotcnicos para los identificadores, lo ms cercanos a los significados que ellas tienen o representan en el dominio del problema. Un nombre de variable no puede contener espacios, tampoco se puede iniciar con un nmero. Los siguientes son nombre vlidos de identificadores:
variable miVariable MIVARIABLE x i _mivariable $mivariable _9pins andronauta OClaroEsta

Los siguientes son nombres invlidos de identificadores:


Mi Variable // Contiene espacio en blanco 9pines // Inicia con un dgito a+c // El signo + no es un carcter alfanumrico chequeo1-2-3 // El signo menos no es un carcter alfanumrico O'Reilly // El apstrofe no es un carcter alfanumrico OReilly_&_Associates // El smbolo ampersand no es alfanumrico

Si se desea que un identificador se inicie con un nmero, anteponga el smbolo _ (subrayado) al nombre o identificador, por ejemplo, si se desea usar como identificador 8Ciclos, el nombre vlido sera _8Ciclos. Como norma de codificacin en Java, se recomienda que cada palabra de las que conforman el nombre de un identificador se inicie con una letra mayscula y las dems letras con minsculas. Para el caso de variables, mtodos y objetos, la primera palabra se iniciar con minscula, en el caso de las clases, el

Programacin Java bsica: De la representacin de objetos a Java 7 - 18 identificador se inicia con mayscula , notacin que se ha propuesto y utilizado en los captulos anteriores. Los siguientes ejemplos ilustran este sistema de codificacin de identificadores:
pesoEspecifico // para una variable volumenTotalLago// para el nombre de un mtodo FiguraGeometrica // para denotar la clase FiguraGeometrica cuadradoRojo // puede denotar un objeto

El espacio en blanco
El espacio en blanco corresponde al carcter que se produce cuando se presiona la barra de espaciamiento en el teclado del computador y que se utiliza para separar palabras. Existen en Java otros cuatro espacios en blanco: la tabulacin horizontal (horizontal tab), la alimentacin de formas (form feed), el retorno de carro o enter (carriage return) y la alimentacin de una lnea (line feed). Cuando se presiona la tecla de enter o de retorno, se produce la insercin de una lnea o un retorno de carro, lo cual se refleja en el cdigo fuente como una nueva lnea. Aparte del uso de espacios en blanco en las literales de caracteres (String), Java sin importar cuantos espacios se utilicen los toma como uno. Se usa tambin para separar operandos, smbolos, palabras. El nmero de espacios que utilice es solamente para una mejor presentacin visual a quien lee el programa en lenguaje fuente. Dentro del cuerpo de una literal tipo carcter de los caracteres mencionados que Java toma como un solo espacio en blanco, slo se permite escribir directamente el carcter espacio en blanco. Retornos de carro, tabulaciones, lineas y formas de alimentacin, pueden ser insertadas utilizando las secuencias de escape: Secuencia de escape \ddd \uxxxx \' \ \\ \r \n \f Descripcin Carcter octal (ddd) Carcter UNICODE hexadecimal (xxxx) Comilla simple Comilla doble Barra invertida Retorno de carro Nueva lnea (salto a nueva lnea) Alimentacin de pgina (salto a nueva pgina)

Programacin Java bsica: De la representacin de objetos a Java 7 - 19 Secuencia de escape \t \b Descripcin Tabulacin Retroceso

No se puede cortar una cadena (String) de carcteres a travs de una lnea, como por ejemplo en el siguiente caso:
String verso alza la cara que no digan que se te ha la paz en el = No llores por amor, tus ojos acabado alma.;

En lugar de esa construccin se debe utilizar la secuencia de escape \n y el operador de concatenacin de carcteres +, de la siguiente manera:
String verso = No llores por amor\n + alza la cara\n + que no digan tus ojos\n + que se te ha acabado\n + la paz en el alma.;

Obsrvese que, una instruccin s se puede cortar a travs de mltiples lneas, sin embargo una literal de carcteres (String) no es permitido.

Tipos de datos
Los tipos de datos hacen referencia tanto al tipo de contenido, como a la forma como es almacenado en la memoria del computador. Accesar al contenido de un tipo de datos en particular se hace mediante nombres o identificadores. Los tipos de datos disponibles en Java, tambin denominados primitivos, son muy similares a los tratados en el Captulo 2, sobre Lenguaje Algortmico y obviamente similares a la mayora de los lenguajes de programacin, como en el caso los lenguajes C y C++. Estos tipos de datos son: los lgicos (booleanos), de formato corto (short), enteros(int), de formato largo (long), de punto flotante (float), de formato extendido (double) y para manejo de caracteres (char), cabe anotar que en su implementacin se encuentran algunas diferencias segn el lenguaje de programacin. Veamos algunos aspectos generales sobre los tipos de datos, comparando C++ y Java:

Programacin Java bsica: Tipos de datos 7 - 20

En C y C++ la manipulacin de tipos de datos es dependiente del compilador y la mquina, por ejemplo en el tamao de los enteros. En Java se especifica cada tipo de dato de manera independiente. Java previene acerca de la conversin arbitraria entre variables con tipos de datos no similares. nicamente se permite la conversin entre variables de tipo numrico, as como la conversin entre superclases y subclases del mismo objeto. Todas las variables numricas en Java tienen signo.

En Java cada variable, cada expresin, tienen un tipo de dato. As mismo cada tipo est definido estrictamente. El compilador Java comprueba todas las asignaciones, bien explcitas o mediante paso de parmetros en llamadas de mtodos, todas las conversiones, expresiones y parmetros, para asegurar la compatibilidad de los tipos de datos. Dependiendo de la tarea a realizar, se requerir definir clases, entendidas como plantillas en Java, con las cuales se pueden crear instancias de objetos de la aplicacin del mundo real. Como se vio antes, tanto aplicaciones como applets se disean sobre la base de la estructura o jerarqua de clases, cuyos datos miembros pueden ser a su vez clases, o tener la forma de instancias de clases que vienen incorporadas en el lenguaje Java. Sea el caso de una clase denominada CamionDeCarga que puede contener, entre otros, los siguientes tipos de datos miembros o atributos:
Atributos de la Clase CamionDeCarga marca fabricante color numeroMotor capacidadMotor placaNumero numeroEjes dueo combustible Valores de atributos para el objeto miCamion Ford 7000 Ford Motor Co. Rojo ladrillo SF987005643 7,000 cc NOC 890 2 Federico Garca Diesel

En esa lista se observa que fabricante, puede ser a su vez una clase y contendra entonces la informacin sobre su direccin, nombre, telfono,

Programacin Java bsica: Tipos de datos 7 - 21 pgina web, mtodos para vender, financiar, hacer mantenimiento y otros. Los dems atributos hacen referencia a tipos simples que pueden contener informacin numrica o alfanumrica. Los atributos capacidadMotor y numeroEjes al hacer referencia a un valor numrico, debern tener la forma de almacenamiento numrico sin decimal. La identificacin mediante la placaNumero hace referencia a una cantidad de tipo alfa-numrico, entendida como una cadena de caracteres. En el caso del objeto miCamion se encuentran tipos de datos que hacen referencia a cantidades numricas y de cadenas de caracteres, consideradas del tipo de dato simple, o tipo de datos primitivos. Veamos ahora el caso de un objeto miRelojDespertador, el cual es una instancia de la clase RelojDespertador, con entre otros, los siguientes atributos, y sus valores:

Atributos de la Clase RelojDespertador marca color serie tipoMaterial precio tipoFunciones nombreDueo horaActual horaAlarmaActual operacion

Valores de atributos para el objeto miRelojDespertador Pony Azul Cielo Ax-12345 Metal-Plstico $5,000.00 Alarma Usted 8:00 p.m. 5:00 a.m. De cuerda

Se puede identificar que entre sus atributos hay uno con informacin numrica con decimales como es el caso del precio y de contenido alfabtico como es el color y alfanumrico como la serie. Todos ellos son tipos de datos primitivos, como se explica a continuacin.

Tipos de Datos primitivos


Java trae definidos los siguientes tipos de datos primitivos :

Programacin Java bsica: Tipos de datos 7 - 22

Para manejo de cantidades enteras, o sea aquellas que no tienen decimales: byte, short, int, long. Para manejo de cantidades de punto flotante, o con decimales: float, double. Manejo de los smbolos de un conjunto de caracteres como por ejemplo letras, nmeros y caracteres especiales: char. Para cantidades con valores lgicos, falso o verdadero: boolean.

Enteros
Los enteros representan las cantidades que no tienen parte decimal o fraccionara. Gran parte del trabajo computacional se fundamenta en la manipulacin de cantidades enteras con signo, es decir que pueden tomar valores positivos o negativos. El tamao, es una cantidad expresada en nmero de bits (dgitos binarios) asignados en la memoria del computador para almacenar un valor. Representa el comportamiento para las variables y expresiones del respectivo tipo, haciendo referencia al rango de valores que se pueden almacenar en las variables de ese tipo. Hay cuatro tipos de datos enteros, dependiendo de las necesidades de rangos de almacenamiento por parte las variables a utilizar. La siguiente lista indica los tamaos en bits y rangos para los tipos de datos enteros:

Tipo de dato
long int short byte

Tamao en bits
64 32 16 8

Rango de valores permitido


-9.223.372.036.954.775.808 a 9.223.372.036.854.775.807 -2.147.483.648 a 2.147.483.647 -32.768 a 32.767 -128 a 127

La memoria del computador se mide en bytes u octetos de bits. Un dgito binario o bit, puede almacenar un uno o un cero. Es decir que la mxima cantidad entera almacenada en un bit es el entero 1. Si hay dos bits, el mximo valor es 11 binario que corresponde al decimal 3, si hay 7 bits el mximo valor es 1111111 binario que corresponde al decimal 127. Como en Java una

Programacin Java bsica: Tipos de datos 7 - 23 cantidad numrica tiene signo, para el caso de los enteros uno de los bits se deja para el signo. De esta manera, la capacidad de almacenamiento de valores enteros en 8 bits (de los cuales toma uno para el signo, el de la izquierda por ejemplo) ser uno para el signo y en los siete restantes 1111111 binario que corresponde al decimal 127. Igual calculo se puede hacer para el almacenamiento en tamao de 16, 32 o 64 bits. Declaracin de variables enteras Para decidir si se debe crear una variable entera es necesario conocer el tamao mximo y mnimo que se espera deba contener el dato representado por dicha variable y asignarle un nombre con el cual se haga referencia. Si se desea un contador que tome valores entre 1 y 100, de acuerdo a la tabla anterior el tipo recomendado es el byte ya que su rango comprende los valores del contador a utilizar. Con la siguiente instruccin se declara una variable contador con el tipo byte.
byte contador;

Los ndices de arreglos, como por ejemplo el arreglo arg[] usado como argumento en el mtodo main(String arg[]) puede ser de tipo int , ya que su rango difcilmente superara los 128 elementos. Pero si se requiere un arreglo con mayor numero de indices, se utilizara el tipo short. Para el caso de tres variables cuyos valores estn dentro del rango del tipo int su declaracin se puede hacer con
short numeroVehiculos, numeroEstudiantes, cantidadPedida;

Si se desea usar variables enteras de tamao de 64 bits, o sea de tipo long la siguiente declaracin lo establece para las variables indicadas:
long variableLarga, otraLarga, unaGrandota;

Valores reales
Los valores reales o de punto flotante se utilizan para clculos que requieran mayor precisin, la cual se define como la cantidad de dgitos significativos que maneja el computador exactamente para un tipo de datos dado. Por ejemplo, la raz cuadrada y las funciones trigonomtricas como el seno y el coseno. Estos tipos de datos almacenan los bits mas significativos, o sea la mantisa, aparte del exponente. Todas las funciones matemticas trascendentes como sin(), cos(), sqrt() devuelven valores de doble precisin.

Programacin Java bsica: Tipos de datos 7 - 24 Como en el caso de los valores enteros, en los de coma flotante se presentan en dos tamaos: float y double, que representan nmeros de precisin simple y de precisin doble.

float almacena sus valores en 32 bits y se denomina precisin sencilla, su rango de valores es establecido de acuerdo a : mnimo valor negativo -3.40282347 10+38 mximo valor negativo -1.40239846 10-45 mnimo valor positivo mximo valor positivo 1.40239846 10-45 3.40282347 10+38

Los valores en precisin float o simple, requieren la mitad del espacio que la precisin doble, siendo ms rpida, sin embargo es imprecisa cuando los valores son muy grandes o muy pequeos. Las variables float son tiles cuando no se requiere mucha precisin.

double almacena sus valores en 64 bits y se denomina de precisin doble, su rango de valores es establecido de acuerdo a: mnimo valor negativo -1.7976931348623147 10+308 mximo valor negativo -4.94065645841246544 10-324 mnimo valor positivo mximo valor positivo 4.94065645841246544 10-324 1.7976931348623147 10+308

Los valores en precisin double son muy tiles cuando se hacen clculos con nmeros de gran valor o tras de muchos clculos iterativos o repetitivos, por ejemplo para el clculo de convergencia de funciones. Las funciones matemticas trascendentes, como sin(), cos() y sqrt() por ejemplo, devuelven valores del tipo double. En ambos casos, float y double, una parte del tamao en bits se toma para el signo de la mantisa, otro para la mantisa, otro para el signo del exponente y otra parte para el exponente. Dando as los rangos de valores indicados. Ntese que aunque el rango cubierto es muy grande, la precisin se limita al nmero de dgitos significativos de cada tipo. Declaracin de variables reales Ejemplo 1: En el siguiente programa se calcula el rea de un crculo mediante la clase AreaCirculo.

Programacin Java bsica: Tipos de datos 7 - 25


// calculo del area de un circulo
import javax.swing.JOptionPane; // importa class JOptionPane class AreaCirculo { public static void main(String args[]) { double pi, radio, area;

radio = 10.8; pi = 3.1416; area = pi*radio*radio;


JOptionPane.showMessageDialog(null, "El area del circulo con radio "+radio+" es "+area, "Resultados", JOptionPane.PLAIN_MESSAGE );

} }

Cuyo resultado se presenta enseguida:

Figura 7 Salida de la clase AreaCirculo

Valores char
El tipo de datos para almacenar caracteres es el char. Java utiliza el cdigo Unicode para representar caracteres. Este sistema define un conjunto de caracteres completamente internacional, que puede representar todos los caracteres encontrados en todos los idiomas y lenguas. Es la unificacin de docenas de conjuntos de caracteres como latino, griego, arbigo y muchos mas. Para lograr esto el tipo de dato char utiliza 16 bits, por tanto el rango de caracteres es de 0 a 65.536 (1111111111111111 en binario). Tiene sentido la utilizacin del sistema unicode ya que Java esta diseado apara permitir que los applets se puedan utilizar en todo el mundo. Informacin sobre unicode est disponible en
http://www.unicode.org y en http://www.stonehand.com/unicode.html

Declaracin de variables char Los siguientes son algunos ejemplos de declaracin de variables tipo char,
char ca1;

Programacin Java bsica: Tipos de datos 7 - 26


char ca2 = carcter 2; [] {????????} char ca3 = \n;

Ejemplo 2: En el siguiente programa se usan variables tipo char:


// uso de variables char
import javax.swing.JOptionPane; // importa class JOptionPane class AgregaCaracteres{ public static void main(String args[]) { char parte1, parte2; parte1 = 88; // cdigo que representa x

parte2 = 'Y';
JOptionPane.showMessageDialog(null, "parte1 y parte2: "+parte1+" "+parte2,"Resultados",JOptionPane.PLAIN_MESSAGE);

} }

Se obtiene el siguiente resultado:

Figura 8 Resultados clase AgregaCaracteres

Valores Booleanos
Por definicin, los valores booleanos tienen un bit de almacenamiento, solo pueden tomar uno de dos valores, true (verdadero) o false (falso). Este es el tipo que devuelven los operadores de comparacin relacionales, como en la expresin area1 < area2 , o el requerido en las expresiones condicionales que controlan el flujo como if , for , do, while. Una variable de este tipo, al ser creada toma como valor predeterminado false. Declaracin de variables booleanas Ejemplo 3: En el siguiente programa se utilizan variables booleanas,
// Utilizacin de variables booleanas class ChequeaBooleana{

Programacin Java bsica: Tipos de datos 7 - 27


public static void main(String args[]){ boolean vara, varb; varb = false; vara = true; System.out.println( varb tiene el valor + varb); varb = true; System.out.println( varb tiene el valor + varb); // expresion booleana para controlar una seleccin if (vara){ System.out.println( Se ejecuta esta instruccin); } } }

Al ejecutarse el programa generara el siguiente resultado por la lnea de comandos:


varb tiene el valor false varb tiene el valor true Se ejecuta esta instruccin

Literales en Java
Literales son cdigo fuente de Java que significan justamente lo que ellas dicen en su asignacin literalmente. Una literal es una constante, por ejemplo, Soy una Applet, es una literal tipo String y significa que tiene almacenado el mensaje o cadena Soy una Applet. Para el compilador aunque tiene mas de un carcter, representa una sola cosa: una literal tipo String. As mismo 9.86 aunque tiene mas de un dgito o carcter, es considerado como una literal numrica. Cada tipo de datos permite la manipulacin del mismo tipo de literales segn el tipo. Literales de tipo entero Los enteros son el tipo ms utilizado en el trabajo en el computador, cualquier valor numrico entero es un literal entero. Por ejemplo los valores, 1, 2, 45, 67, 98, son valores literales enteros los cuales son valores decimales por cuanto estn en base 10, aunque hay otras bases como la octal en base 8 y la hexadecimal en base 16, con las cuales tambin se pueden definir literales numricas enteras. Los valores octales en Java van precedidos por un 0 (cero), por lo cual el valor 06 representa una literal entera en base octal. El rango de los dgitos octales van del 0 al 7. La base hexadecimal es una base comn para los nmeros utilizados por los

Programacin Java bsica: Tipos de datos 7 - 28 programadores que coincide con el tamao de palabra en mdulo 8, como el almacenamiento en 8, 16, 32 o 64 bits visto antes. Una literal hexadecimal se representa con el prefijo 0X, seguido de los dgitos hexadecimales cuyo rango es de 0 al 15, por lo que hay que utilizar las letras de la A a la F para representar a los nmeros decimales 10 al 15. Los literales enteros crean por defecto un valor tipo int, que en Java tiene un tamao de 32 bits. Cuando se asigna un valor literal a una variable entera byte o short, no se genera error alguno si el literal esta dentro del rango del tipo destino. Para las literales o constantes enteras a especificar como long es necesario decirle de forma explcita al compilador que el valor literal es de tipo long, mediante la adicin de la letra L (mayscula o minscula) al final de la literal. Los siguientes son algunos ejemplos de asignacin de constantes enteras a variables:
Constante1 Constante2 Constante3 Constante4 Constante5 = = = = = 9456748378L; // entero decimal en 64 bits 0X6785ABL; // hexadecimal entero en 64 bits 30567; // entero decimal en 32 bits 067543; // entero octal en 32 bits 0786545678L; // entero octal en 64 bits

Literales en coma flotante o de nmeros reales Los valores literales de coma o punto flotante representan cantidades decimales con una componente fraccionaria, en notacin estndar o sea la cifra entera seguida de un punto decimal y un conjunto de dgitos expresando la parte fraccionaria, o en notacin cientfica al expresar el nmero en notacin estndar con un slo dgito entero y adicionalmente con una componente que expresa la potencia que debe elevarse el valor 10 como factor multiplicador del nmero. El exponente se indica con E, o e, seguido de un nmero decimal con signo. Por ejemplo 2.345 en notacin estndar y 2345 E-3 en notacin cientfica. Las literales de coma flotante son almacenadas por defecto en doble precisin (double) o sea en 64 bits. Si se desea especificar una literal tipo float en 32 bits, se le debe aadir a la constante una F, o f al final. Los siguientes son algunos ejemplos de literales de coma flotante:
Constante1 Constante2 Constante3 Constante4 = = = = 7.98768 E 23; 3.3657 E-21; 4.6543F; 56878.4328;

Programacin Java bsica: Tipos de datos 7 - 29 Literales Booleanos Un valor booleano se expresa solamente con uno de los dos valores lgicos, true (verdadero) y false (falso). Los valores true y false, no son equivalentes a representacin o expresin numrica alguna, es decir no equivalen a 1 y 0 respectivamente como en C o C++ . Las siguientes son asignaciones literales booleanos a dos variables, obviamente del tipo de datos booleano.
Respuesta1 = true; Respuesta2 = false;

Literales Char Estas literales se almacenan en 16 bits sin signo, y corresponden a ndices del conjunto de caracteres Unicode. Estos literales se pueden convertir a enteros y ser manipulados con los operadores de los enteros. Un carcter literal tipo char se representa dentro de un par de comillas simples ( ). Los caracteres visibles en ASCII se introducen directamente entre el par de comillas. Aquellos que no se los puede representar directamente se utilizan secuencias de escape, como por ejemplo \n , para el carcter cuyo funcin es crear una nueva lnea, o \r para el retorno de carro. Las siguientes son algunas secuencias de escape:
\ddd carcter octal \uxxxx caracter UNICODE hexadecimal (xxxx) \ comilla simple \ comilla doble \\barra invertida \rretorno de carro \nnueva linea \falimentar pgina \ttabulador \bretroceso

Literales String o de cadena de caracteres Este tipo de literales son similares a las usadas en todos los lenguajes de programacin, cualquier cosa colocada entre un par de comillas dobles. Una literal String es una colecin de carcteres (letras, dgitos, signos de puntuacin, etc.) que se escribe en una sola linea, ya que Java no tiene carcter de escape para indicar continuacin de lnea.
Cadena1= Soy toda una cadena ; CadenaOtra = Soy otra cadena y que?;

Programacin Java bsica: Operadores en Java 7 - 30

Operadores en Java
Un operador es un smbolo que representa una operacin que toma uno o mas argumentos u operandos y opera sobre ellos a fin de generar un resultado. Tpicamente los operadores en un programa estn entre identificadores y literales de tipo numrico. Algunos estn antes del operando y se denominan prefijos, otros despus y se denominan posfijos, algunos toman un solo operando y se denominan operadores unitarios unarios, los que requieren dos operandos se denominan binarios. Java brinda un conjunto de 44 operadores, los cuales son como instrucciones que le indican al compilador acerca de la realizacin de operaciones lgicas o matemticas. Se agrupan en cuatro grupos: aritmticos, relacionales, lgicos y a nivel de bit.

Operadores aritmticos
Los operadores aritmticos se utilizan para realizar operaciones matemticas, exactamente como estn definidas en el lgebra. La siguiente tabla ilustra la lista de los operadores aritmticos: Operador + * / % ++ Resultado adicin Substraccin y signo unitario producto divisin mdulo incremento Operador += -= *= /= %= -Resultado asignacin aditiva asignacin de substraccin asignacin de producto asignacin de divisin asignacin de mdulo decremento

Las cuatro operaciones


Las operaciones aritmticas de suma, resta, multiplicacin y divisin se llevan a cabo en la forma convencional. El operador unitario - (menos), se utiliza para negar el signo del operando al cual precede. Ejemplo 4: El siguiente ejemplo ilustra las cuatro operaciones entre literales y variables:
import javax.swing.JOptionPane; class CuatroOperaciones{

Programacin Java bsica: Operadores en Java 7 - 31


public static void main(String args[]){ int var1, var2, var3, var4, var5, var6; var1= 10; var2= 20; var3= var1+var2; var4= var3-20; var5=var4*var1; var6=var2/var1; JOptionPane.showMessageDialog(null,"valor de var1= "+var1+ "\nvalor de var2= " + var2+ "\nvalor de var3= " + var3+ "\nvalor de var4= " + var4+ "\nvalor de var5= " + var5+ "\nvalor de var6= " + var6); } }

Cuando el programa se ejecuta producir los siguientes resultados:

Figura 9 Resultados de la clase CuatroOperaciones

Operador mdulo
Este operador permite calcular el residuo de una divisin tanto para tipos enteros o de coma flotante. Ejemplo 5: El siguiente ejemplo ilustra la utilizacin del operador para encontrar el resduo de 53 modulo 10 y de 52.150 modulo 10.
import javax.swing.JOptionPane;

Programacin Java bsica: Operadores en Java 7 - 32


class CalculoModulo{ public static void main(String args[]){ int z = 53; double w = 52.150; JOptionPane.showMessageDialog(null,z+" modulo 10 = "+z % 10+ "\n"+ w + " modulo 10 = " + w % 10); } }

Cuando se ejecute el programa deber generar los siguientes resultados:

Figura 10 Resultados clase CalculoModulo

Operadores aritmticos de asignacin


Cada uno de los cuatro operadores aritmticos tiene una forma asociada la cual permite realizar la operacin y la asignacin. Por ejemplo, para incrementar el valor de la variables valor en cuatro unidades.
valor = valor + 4;

Operacin valida en Java, sin embargo la forma siguiente arroja el mismo resultado mediante el operador de asignacin respectivo de la suma:
valor += 4;

El significado de cada uno de los operadores de asignacin se da a continuacin:

Programacin Java bsica: Operadores en Java 7 - 33 Operador Descripcin


Es el operador de asignacin sencilla; coloca el valor de la expresin del lado derecho en la variable de la parte izquierda del signo igual. Adiciona el valor de la derecha a la variable de la izquierda y almacena el resultado en esta variable. Sustrae el valor de la derecha a la variable del lado izquierdo y almacena el resultado en esta variable. Multiplica la variable del lado izquierdo por el valor de la parte derecha y almacena el resultado en esta variable. Divide la variable de la izquierda por el valor de la derecha almacena el resultado en esta variable. y

= += = *= /= %=

Obtiene el residuo de la divisin de la variable del lado izquierdo por el valor del lado derecho y almacena el resultado en la misma variable.

Se presenta a continuacin algunos ejemplos para estos operadores de asignacin aritmtica:


// incrementa valorTotal en 4 y guarda el resultado en // valorTotal valorTotal += 4; // le resta a valorTotal la cantidad 10 y guarda el resultado en //valorTotal valorTotal -= 10; //multiplica productoFinal por 10 y guarda el resultado en //productoFinal productoFinal *= 10; // divide partirProducto por 2 y guarda el resultado en // partirProducto partirProducto /= 2; // obtiene el residuo de dividir residuoFinal por 10 y guarda el // resultado en residuoFinal residuoFinal %= 10;

Operadores de incremento y decremento


Permiten adicionar o substraer de una manera simplificada la unidad a una variable dada. La forma tradicional de realizar el incremento de una unidad es la siguiente:
variable1 = variable1 + 1;// incrementa en la unidad a

Programacin Java bsica: Operadores en Java 7 - 34


variable1 variable2 = variable2 - 1; //decrementa en la unidad a variable2

Mediante los operadores aritmticos de asignacin de incremento/decremento (+= y -=) se pueden escribir de la siguiente manera:
variable1 += 1;// incrementa en la unidad a variable1 variable2 -= 1;//decrementa en la unidad a variable2

Java conserva la notacin introducida por el C++, mediante los operadores ++ y -- , para generar las siguientes instrucciones equivalentes a las indicadas arriba:
++variable1;// incrementa en la unidad a variable1 --variable2;//decrementa en la unidad a variable2

Los operadores ++ y -- pueden anteceder al operando, como en el ejemplo, o preceder al operando como en el siguiente caso:
variable1++;// incrementa en la unidad a variable1 variable2--;//decrementa en la unidad a variable2

Cuando el operador antecede al operando, el operando es modificado antes de que el valor sea obtenido para su asignacin a la variable del lado izquierdo, o en la expresin correspondiente. Cuando el operando antecede al operador, se obtiene primero el valor del operando sin modificacin para la variable del lado izquierdo, y luego si se incrementa el operando. Esa diferencia se ilustra en el siguiente ejemplo
variable1= 65; variable2 =++variable1;

aqu variable1 toma el valor 66 y en variable2 el de 66. En el siguiente ejemplo el operando antecede al operador y la variable2 toma el valor 65 y la variable1 se incrementa a 66.
variable1= 65; variable2 =variable1++;

Ejemplo 6: El siguiente ejemplo ilustra la utilizacin del operador de incremento ++ para incrementar la variable controladora del ciclo de repeticiones i , en el primer caso y el operador -- para decrementarla en el segundo caso.

Programacin Java bsica: Operadores en Java 7 - 35


import javax.swing.JOptionPane; class ContCreceDecrece{ public static void main (String args[]) { String salida1 ="Valores crecientes de i:"; String salida2 ="Valores decrecientes de i:"; // el siguiente segmento es creciente for (int i = 0; i < 7; i++) { salida1 = salida1+"\nvalor de i = " + i; } JOptionPane.showMessageDialog(null,salida1); // el siguiente segmento es decreciente for (int i = 7; i > 0; i--) { salida2=salida2+"\nvalor de i = " + i; } JOptionPane.showMessageDialog(null,salida2); } }

Los siguientes son los resultados obtenidos:

Figura 11 Resultados de la clase ContCreceDecrece

Figura 12 Resultados de la clase ContCreceDecrece

Operadores Relacionales
Los operadores relacionales permiten establecer la relacin de un operando respecto de otro. Cualquier tipo de operandos, integer, float, char y boolean, pueden ser comparados mediante el operador de igualdad lgica == y el de desigualdad lgica !=. Los operandos de tipo integer, float, char

Programacin Java bsica: Operadores en Java 7 - 36 pueden ser usados para efectos de comparacin mayor que o menor que. El resultado de una operacin relacional es de tipo booleano. Los siguientes son los operadores relacionales, los cuales se utilizan frecuentemente en las expresiones que controlan los diferentes tipos de ciclos, as como en las expresiones de seleccin. Operador Descripcin
Igual a. No igual a. Mayor que.

Operador

Descripcin
Menor que. Mayor o igual que. Menor o igual que.

== != >

< >= <=

Ejemplo 7: Desarrollar un programa que permita leer cuatro valores, a, b, c, d y determina, si es o no verdadero (true) que a sea mayor o igual que b, as mismo si a es igual a d y si c es mayor o igual que d.
import javax.swing.JOptionPane; class OperacionesRelacionales{ public static void main(String args[]){ int a, b, c, d; String salida; boolean resultado; a=2; b=3; c=5; d=2; salida = "Valores de: a = "+a+"; b = "+b+"; c = "+c+ "; d = "+d; resultado = a > b; salida=salida + "\nResultados: \na > b: "+resultado; resultado = a == d; salida = salida +"\n a == d: "+resultado; resultado = c >= d; salida=salida +"\n c >= d: "+resultado; JOptionPane.showMessageDialog(null,salida); } }

El cual dar los siguientes resultados:

Programacin Java bsica: Operadores en Java 7 - 37

Figura 13 Resultados de la clase OperacionesRelacionales

Operadores lgicos booleanos


Frecuentemente los operadores relacionales se utilizan en conjunto con otro conjunto de operadores, los operadores condicionales o lgicos booleanos. Estos operan solamente sobre operandos booleanos, dando como resultado un valor booleano. Los siguientes son los operadores lgicos booleanos: Operador
& | ^ || && !

Resultado
AND lgico OR lgico XOR lgico exclusivo) OR en corto circuito AND en corto circuito NOT unitario lgico (OR

Operador
&= |= ^= == != ?=

Resultado
Asignacin AND Asignacin OR Asignacin XOR Igual a Distinto de If-then-else ternario

Operadores lgicos booleanos bsicos Los operadores lgicos booleanos bsicos corresponden a AND (&), OR (|), XOR (^) y NOT (!). La siguiente tabla ilustra el resultado de la operacin de cada operandor para dos operandos A y B de tipo lgico. La primera fila indica los nombres de los operandos, A y B, seguidos de las operaciones lgicas a evaluar. Los resultados de las operaciones, dependiendo de los valores que tomen A y B, se ilustran en las filas siguientes. El valor verdadero (true) se representa con V y el valor falso (false) con F:

Programacin Java bsica: Operadores en Java 7 - 38 A F V F V B F F V V A|B F V V V A&B F F F V A^B F V V F !A V F V F

Ejemplo 8: Desarrollar un programa que permita generar las tablas de verdad para diferentes operadores logicos booleanos:
1. import javax.swing.*; 2. public class OperadoresLogicos { 3. public static void main( String args[] ) { JTextArea areaSalida = new JTextArea( 17, 20 ); 4. 5. JScrollPane scroller = new JScrollPane( areaSalida ); 6. String salida = ""; 7. salida += " Operador logico AND (&&)" + 8. "\n false && false: " + ( false && false ) + 9. "\n false && true: " + ( false && true ) + 10. "\n true && false: " + ( true && false ) + 11. "\n true && true: " + ( true && true ); 12. salida += "\n\n Operador logico OR (||)" + 13. "\n false || false: " + ( false || false ) + 14. "\n false || true: " + ( false || true ) + 15. "\n true || false: " + ( true || false ) + 16. "\n true || true: " + ( true || true ); 17. salida += "\n\n Operador logico Booleano AND (&)" + 18. "\n false & false: " + ( false & false ) + 19. "\n false & true: " + ( false & true ) + 20. "\n true & false: " + ( true & false ) + 21. "\n true & true: " + ( true & true ); 22. salida += "\n\n Operador logico Booleano OR inclusivo (|)" + 23. "\n false | false: " + ( false | false ) + 24. "\n false | true: " + ( false | true ) + 25. "\n true | false: " + ( true | false ) + 26. "\n true | true: " + ( true | true ); 27. salida += "\n\n Operador logico Booleano OR exclusivo (^)" + 28. "\n false ^ false: " + ( false ^ false ) + 29. "\n false ^ true: " + ( false ^ true ) + 30. "\n true ^ false: " + ( true ^ false ) + 31. "\n true ^ true: " + ( true ^ true ); 32. salida += "\n\n Operador logico NOT (!)" + 33. "\n !false: " + ( !false ) +

Programacin Java bsica: Operadores en Java 7 - 39


34. 35. 36. 37.
"\n !true: " + ( !true );

areaSalida.setText( salida );

JOptionPane.showMessageDialog( null, scroller, " Tablas de verdad", JOptionPane.INFORMATION_MESSAGE );

38. 39. 40.}

System.exit( 0 ); }

En este programa se construyen los resultados de evaluar las tablas de verdad, mediante la variable salida de tipo String. Obsrvese cmo se van agregando los diferentes mensajes y resultados en las lneas 7, 12, 17, 22, 27 y 32, a fin de elaborar un reporte. El carcter de escape (\n) permite como en otros ejemplos, saltar a la siguiente lnea. Veamos a continuacin las explicaciones referidas a los nuevos elementos involucrados en el programa: Lnea 4: se crea un objeto areaSalida del tipo JtextArea que es una clase a partir de la cual se crean componentes para generar reas de texto editable, es decir, que se puede modificar en la pantalla. Al rea de texto se le asigna 17 columnas, por 20 filas medidas en caracteres. Linea 5: se crea un objeto scroller del tipo JScrollPane, que es una clase a partir de la cual se crean componentes desplazables. Su desplazamiento es en el sentido horizontal ( en la parte inferior del rea) y en el sentido vertical (en la parte derecha del rea). Dentro de este componente se coloca como argumento el componente areaSalida. Linea 35: mediante el mtodo setText() de la clase JtextArea, el objeto areaSalida carga los resultados guardados en salida. Lnea 36: se utiliza el mtodo showMessageDialog del componente JoptionPane para mostrar los resultados que se han cargado en el componente scroller. Linea 38: para terminar la ejecucin del programa se invoca el mtodo exit
(0) de la clase System.

Los resultados que se obtienen al ejecutar el programa son los siguientes. Observese el control desplazable del lado derecho, lo cual permite que el rea de texto pueda ser visualizada en su totalidad utilizando el ratn.

Programacin Java bsica: Operadores en Java 7 - 40

Figura 14 Resultados de la clase OperadoresLogicos

Operadores lgicos booleanos en cortocircuito Son los operadores && y || que corresponde a versiones secundarias de los operadores bsicos AND (&) y OR (|), y se les denomina operadores lgicos en cortocircuito. Como se puede observar en la tabla de operadores booleanos, si el operando A es falso (F) el operador AND (&) dar como resultado falso (F), independiente del valor del operando B. De igual manera, el operador OR (|) dar como resultado verdad (V) cuando A sea verdad (V) independiente del valor del operando B. Las formas de los operadores en cortocircuito && y ||, en lugar de las formas & y | har que Java no se preocupe en evaluar el operando o expresin del lado derecho cuando el resultado de la operacin ya este decidido a partir del operando o expresin del lado izquierdo. En algunos casos esto puede no ser deseable, refirase a la discusin anterior sobre pre y post-incremento y operadores de asignacin.

Programacin Java bsica: Operadores en Java 7 - 41 Operadores lgicos de asignacin Los operadores &=, |= y ^=, permite hacer que la variable del lado izquierdo tome el valor resultante de evaluar la expresin formada por esta variable con la expresin del lado derecho del operador. La siguiente tabla lo ilustra:

Operador &= |= ^=

Uso op1 &= op2 op1 |= op2 op1 ^= op2

Equivalencia op1 = op1 & op2; op1 = op1 | op2; op1 = op1 ^ op2;

Instrucciones de control de flujo: seleccin


La mayora de los programas que usted realice requerirn que bajo ciertas condiciones se ejecuten unas instrucciones mientras se evitan saltan otras. Java permite este propsito mediante las instrucciones de seleccin (if - else) y de seleccin mltiple (switch).

Instruccin if - else
Tal como se vio en el Captulo 2, esta instruccin permite, con base a la evaluacin de un predicado o condicin de tipo lgico, direccionar el flujo de la ejecucin de un programa hacia uno de dos caminos diferentes. La forma general de esta instruccin en Java es como sigue:
if (expresin booleana) instruccin1; else instruccin2; expresin booleana es cualquier expresin de tipo lgico, es decir que su resultado al ser evaluada da un valor lgico, true o false.

Instruccin1, instruccin2, puede ser una instruccin simple o un conjunto de instrucciones, en cuyo caso se deben agrupar entre corchetes {} y formar un bloque de instrucciones, como en el siguiente caso:
if (expresin booleana) { instruccin11; instruccin12; .... } else {

Programacin Java bsica: Instrucciones de control de flujo: seleccin 7 42


instruccin21; instruccin22; ... }

La instruccin opera de la siguiente manera: si expresin booleana toma el valor true, se ejecutara la instruccin1 o el bloque de instrucciones en caso de haber ms de una (instruccion11, instruccin12,..) y no se ejecutar la instruccin2 o bloque de instrucciones en caso de haber ms de una (instruccion11, instruccin12,..). Si la expresin booleana toma el valor false, no se ejecutara instruccin1 o el bloque si es mas de una instruccin, y se ejecutar la instruccin2 o el bloque en caso de ser mas de una instruccin. En ningn caso se ejecutarn ambas instrucciones. La clasula else es de carcter opcional, lo que significa que puede no utilizarse, en cuyo caso independiente de la ejecucin o no de instruccin1, se continuar con la siguiente instruccin despus del if, como lo indica la siguiente forma, tanto simple como en su forma con bloque de instrucciones:
if (expresin booleana) instruccin1; instruccin3;

En la forma de bloque de instrucciones dentro del cuerpo del if:


if (expresin booleana){ instruccin1; .... } instruccin3;

Los siguientes ejemplos que ilustran diferentes situaciones:


// ejemplo del if-else con instrucciones simples int a, b, c; if(a > b) c= a+b; else c= a*b;

En el anterior segmento de cdigo si a es mayor que b, hace c= a+b, de lo contrario hace c= a*b. En el siguiente caso se tiene la forma del if simple, puesto que independiente de la ejecucin de c=a+b, se continuar con la instruccin d=a*b.

Programacin Java bsica: Instrucciones de control de flujo: seleccin 7 43


// ejemplo del if simple con instrucciones simples int a, b, c, d; if(a > b) c= a+b; d= a*b;

En el siguiente ejemplo la segunda instruccin if contiene dos bloques con instrucciones en lugar de una sola como en el primer caso. As mismo se observa que la expresin booleana, esta formada por una sola variable, obviamente del tipo boolean.
int a=1, b=2, c=3, e=4, f; boolean d; if(a > b) d=true; else d=false; if(d){ a=b+c+e; f=b*c + a; } else{ a=b*c*e; f= b+c+a; }

Instruccines if anidadas
Es muy comn que en los programas sea necesario que la evaluacin del predicado de una instruccin if o if-else sea el destino de otra instruccin if o if-else, en cuyo caso se denominan if anidados. Cuando se utilizan if anidados, es importante tener en cuenta que, una clusula else se refiere a la instruccin if mas cercana que est dentro del mismo bloque y que no tenga asociacin con otro else. El siguiente segmento de programa ilustra esta situacin:
1.int i, j, k, c, d, b; 2.if(i == 20){ 3. if(j<i) 4. a=34; 5. if(k>200) 6. c=40; 7. else 8. d= 90; 9. } 10.else 11. b=c;

Programacin Java bsica: Instrucciones de control de flujo: seleccin 7 44

El cuerpo del primer if va entre la lnea 2 y la lnea 11. Si el predicado (i==20) es falso, no ejecutar las lineas de la 3 a la 9, y ejecutar la lnea 11. Ejecutar las lneas 3 a la 9, si el predicado es verdadero y no ejecutar la lnea 11. Si el predicado (j<i) en la linea 3 es verdadero, ejecutar la lnea 4 y continuar con la lnea 5. Si el predicado de la lnea 3 es falso, no ejecutar la linea 4 y continuar con la lnea 5. Si el predicado de la lnea 5 es verdadero, ejecutar la lnea 6 y no har la lnea 8. Si este predicado es falso, no ejecutar la lnea 6 y ejecutar la lnea 8. Como se estableci antes, la lnea 8, d=90 correspondiente al else de la linea 7, est asociado con el if(k>200), de la lnea 5 ya que es el mas cercano y que se encuentra en el mismo bloque. El ultimo else de la lnea 10, y la instruccin b=c en la lnea 11 est asociado con el primer if(i==20), en la lnea 2.

Instruccines if -else- if mltiples


Las instrucciones if -else- if mltiples constituyen tambin una prctica comn en la programacin y se fundamentan en la utilizacin de secuencias de if anidados. La siguiente es la forma general de estas instrucciones:
if(expresin booleana1)instruccin1; else if(expresin booleana2) instruccin2; else if(expresin booleana3) instruccin3; else instruccin4;

En esta forma las instrucciones if se ejecutan de arriba hacia abajo, hasta que alguna de las expresiones booleanas sea verdadera, en cuyo caso se ejecuta la instruccin asociada y no se ejecuta ninguna de las siguientes. Ahora, si ninguna de las expresiones booleanas es verdadera, se ejecutar la instruccin asociada con el ultimo else. Recuerdese que, cada una de las instrucciones puede ser formada a su vez por bloques encerrados entre corchetes, y estos a su vez pueden contener otras instrucciones if como en la forma siguiente:
if(expresin booleana1){ instruccin1; .... } else if(expresin booleana2){ instruccin2; .... } else if(expresin booleana3){

Programacin Java bsica: Instrucciones de control de flujo: seleccin 7 45


instruccin3; .... } else { instruccin4; .... }

Ejemplo 9: Ilustra el caso de los if anidados para la situacin de una aplicacin que lee un valor entero, correspondiente a la edad de una persona, y determina el grupo de edad en el que se encuentra esa persona:
import javax.swing.JOptionPane; class GrupoEdad{ public static void main(String edadLeida[]) { String entrada, grupo; int edad; entrada = JOptionPane.showInputDialog("Digite una edad"); edad = Integer.parseInt(entrada); /* en esta serie de if-else if se encuentra el grupo a que pertenece esa edad */ if(edad <= 18) grupo ="menor"; else if((edad > 18) && (edad < 60)) grupo = "adulto"; else if ((edad >= 60) && (edad < 100)) grupo="tercera edad"; else grupo = "cuarta edad"; JOptionPane.showMessageDialog(null, "La edad "+edad+" corresponde a "+ grupo); } }

En este ejemplo se ilustra la utilizacin de expresiones booleanas compuestas en los dos else if para determinar el rango en donde se encuentra la edad. La ejecucin de este programa arrojara el siguiente resultado:

Programacin Java bsica: Instrucciones de control de flujo: seleccin 7 46

Figura 15 Entrada de datos para la clase GrupoEdad

Figura 16 Resultados de la clase GrupoEdad

Ejemplo 10: En el siguiente ejemplo se introduce un valor entero correspondiente al nmero de un mes (entre 1 y 12) y permite encontrar la estacin que corresponde a ese mes en particular.
import javax.swing.JOptionPane; class CalculaEstacion{ public static void main(String argumento[]) { String entrada, estacion; int mes; entrada=JOptionPane.showInputDialog("Digite el nmero de un mes:"); mes = Integer.parseInt(entrada); if(mes==12 ||mes==1||mes==2) estacion = "invierno"; else if(mes==3||mes==4||mes==5) estacion="primavera"; else if(mes==6||mes==7||mes==8) estacion="verano"; else if(mes==9||mes==10||mes==11) estacion="otoo"; else estacion="valor invalido de mes"; JOptionPane.showMessageDialog(null, "El mes "+mes+" es "+estacion); }

Programacin Java bsica: Instrucciones de control de flujo: seleccin 7 47


}

Los resultados del programa se ilustran a continuacin:

Figura 17 Lectura datos clase CalculaEstacion

Figura 18 Resultados clase CalculaEstacion

Ejemplo 11: Desarrollar un programa que permita leer dos valores enteros y determinar sus relaciones entre ellos:
import javax.swing.JOptionPane; public class ComparaEnteros{ public static void main( String args[] ) { String primerValor, segundoValor,resultado; int valor1, valor2; primerValor = JOptionPane.showInputDialog( "Digite el primer valor entero:" ); segundoValor = JOptionPane.showInputDialog( "Digite el segundo valor entero:" ); valor1 = Integer.parseInt( primerValor ); valor2 = Integer.parseInt( segundoValor ); resultado = ""; if ( valor1 == valor2 ) resultado = valor1 + " == " + valor2; if ( valor1 != valor2 ) resultado = valor1 + " != " + valor2; if ( valor1 < valor2 )

Programacin Java bsica: Instrucciones de control de flujo: seleccin 7 48


resultado = resultado + "\n" + valor1 + " < " + valor2; if ( valor1 > valor2 ) resultado = resultado + "\n" + valor1 + " > " + valor2; if ( valor1 <= valor2 ) resultado = resultado + "\n" + valor1 + " <= " + valor2; if ( valor1 >= valor2 ) resultado = resultado + "\n" + valor1 + " >= " + valor2; JOptionPane.showMessageDialog( null, resultado, "Resultados de la comparacion", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } }

Figura 19 Lectura datos ComparaEnteros

Figura 20 Lectura datos ComparaEnteros

Programacin Java bsica: Instrucciones de control de flujo: seleccin 7 49

Figura 21 Resultados clase ComparaEnteros

Instruccin de seleccin mltiple switch


Esta instruccin permite transferir el control a diferentes partes del programa, dentro de su cuerpo, dependiendo del valor de una variable o evaluacin de una expresin. En el lenguaje algortmico se estableci la instruccin caso para este tipo de situaciones. La siguiente es la forma general de la instruccin switch :
switch(expresion) { case valor1: instruccion1; break; case valor2: instruccion2; break; . . . case valorN: instruccionN;
break;

default: instruccionM; } expresion es la expresin a evaluar cuyo valor resultante debe ser simple y compatible con cada uno de los valores (valor1, valor2, ..valorN) en seguida de las clausulas case y que determina que instruccin ( instruccion1, instruccion2, ..instruccionN) se debe ejecutar. Cada uno de los valores debe ser un literal, es decir debe ser una constante, no una variable, ademas que deben ser valores nicos sin repeticiones o duplicados, entre los diferentes bloques case.

Programacin Java bsica: Instrucciones de control de flujo: seleccin 7 50 La forma de la instruccin switch para el caso de bloques de instrucciones dentro de cada una de las opciones de las sentencias case es de la siguiente manera:
switch(expresion) { case valor1:{ instruccion1; .... } break; case valor2:{ instruccion2; .... } break; . . . case valorN:{ instruccionN; .... }
break;

default:{ instruccionM; .... } }

La instruccin switch opera de la siguiente manera: el resultado de evaluar la expresion, se compara con cada uno de los valores indicados en cada una de las clusulas case. Si coincide con alguno de los valores constantes (valor1, valor2, ..valorN) se ejecutar la instruccin ( o instrucciones) correspondiente a la clusula case cuyo valor coincide y mediante la instruccin break se interrumpe esa secuencia para darle el control saltar a las instrucciones o cdigo que siguen despues de la instruccin switch . Si ninguno de los valores corresponde con el resultado de la expresin entonces se ejecutar por defecto la clausula default. Esta clusula es opcional, sin embargo, si ningn valor coincide y no est la clusula default , no se realiza ninguna operacin y el control se da a las instrucciones que siguen despus de la instruccin switch. Ntese que la instruccin break se utiliza aqu para saltar fuera del switch, a la primera lnea de cdigo o instruccin que sigue despus de la instruccin

Programacin Java bsica: Instrucciones de control de flujo: seleccin 7 51


switch.

Una limitacin importante de la instruccin switch en Java es que solo puede seleccionar opciones del tipo byte, char, short, int y long. No se puede utilizar en las opciones valores primitivos float, double, String, ni ningn otro tipo de objeto. Tampoco se pueden utilizar relaciones diferentes a la igualdad. Para las situaciones no contempladas en el switch, se debe utilizar entonces la instruccin if-else. Ejemplo 12: El siguiente ejemplo para el calculo del valor a pagar por una camisa dependiendo de su talla, ustra la utilizacin de la instruccin switch :
import javax.swing.JOptionPane; class ValorAPagar{ public static void main(String args[]) { int talla; float precio=0; String entrada; do{ entrada=JOptionPane.showInputDialog("Digite una talla de camisa \n34 a 40:"); talla = Integer.parseInt(entrada);} while(!(talla>= 34 && talla <=40)); switch(talla) { case 34: precio=(float)30000.00; break; case 36: precio=(float)32000.00; break; case 38: precio=(float)33000.00; break; case 40: precio=(float)34000.00; break; } JOptionPane.showMessageDialog(null,"El precio de la talla "+talla+" es $"+precio); } }

La ejecucin de este programa da como resultado:

Programacin Java bsica: Instrucciones de control de flujo: seleccin 7 52

Figura 22 Lectura datos clase ValorAPagar

Figura 23 Resultados clase ValorAPagar

Ejemplo 13: Ahora si se quisiera asignar a las tallas 34 y 36 3l mismo valor, asi como a las 38 y 40, el programa quedara de la siguiente manera:
import javax.swing.JOptionPane; class ValorAPagar1{ public static void main(String args[]) { int talla; float precio=0; String entrada; do{ entrada=JOptionPane.showInputDialog("Digite una talla de camisa \n34 a 40:"); talla = Integer.parseInt(entrada);} while(!(talla>= 34 && talla <=40)); switch(talla){ case 34: case 36: precio=(float)32000.00; break; case 38: case 40:

Programacin Java bsica: Instrucciones de control de flujo: seleccin 7 53


precio=(float)34000.00; break; } JOptionPane.showMessageDialog(null,"El precio de la talla "+talla+" es $"+precio); } }

Como se puede observar se ha omitido la instruccin break en las opciones 34 y 38, agrupndolas con la 36 y con la 40 respectivamente. El programa contina su ejecucin hasta que encuentre un break o hasta el final del bloque switch. El resultado para la ejecucin de este programa es el siguiente:

Figura 24 Entrada datos clase ValorAPagar1

Figura 25 Resultados clase ValorAPagar1

Ejemplo 14: En el siguiente caso se utiliza la clusula default para indicar que una calificacin no es aprobatoria:
import javax.swing.*; class ApruebaNoAprueba{ public static void main(String args[]) { String entrada,resultado;

Programacin Java bsica: Instrucciones de control de flujo: seleccin 7 54


int nota; do{ entrada=JOptionPane.showInputDialog("Digite una calificacion de 1 a 10:"); nota = Integer.parseInt(entrada);} while(!(nota>= 1 && nota <=10)); switch(nota) { case 10: case 9: case 8: case 7: case 6: resultado = "Aprobado"; break; default: resultado = "Reprobado"; break; } JOptionPane.showMessageDialog(null,"Su calificacin es "+resultado); System.exit(0); } }

El programa al ser ejecutado dar la siguiente salida:

Figura 26 Lectura datos clase ApruebaNoAprueba

Figura 27 Resultados clase ApruebaNoAprueba

Programacin Java bsica: Instrucciones de control de flujo: seleccin 7 55

Ejemplo 15: El siguiente ejemplo corresponde al del calculo de la estacin a que corresponde un mes determinado, solo que esta vez se utilizara la instruccin switch, y se leer el valor del mes por medio del componente JoptionPane:
import javax.swing.JOptionPane; class CalculaEstacion2{ public static void main(String argumento[]) { String entrada, estacion; int mes; entrada=JOptionPane.showInputDialog("Digite el nmero de un mes:"); mes = Integer.parseInt(entrada); switch (mes) { case 12: case 1: case 2: estacion= "invierno"; break; case 3: case 4: case 5: estacion = "primavera"; break; case 6: case 7: case 8: estacion = "verano"; break; case 9: case 10: case 11: estacion = "otoo"; break; default: estacion="un valor invalido"; } JOptionPane.showMessageDialog(null, "El mes "+mes+" es "+estacion); System.exit(0); } }

Despues de compilar y ejecutar la clase anterior se obtienen los siguientes

Programacin Java bsica: Instrucciones de control de flujo: seleccin 7 56 resultados:

Figura 28Lectura datos clase CalculaEstacion2

Figura 29 Resultados clase CalculaEstacion2

Instrucciones switch anidadas


De igual manera que las instrucciones if-else anidadas, se pueden utilizar las instrucciones switch, como parte de un bloque de instrucciones de un switch externo. Cada bloque switch define su propio bloque, con lo cual no se producen conflictos entre las constantes o literales de las clusulas case de cada instruccin switch. Mas adelante se presentar un ejemplo de uso de la instruccin switch anidada.

Instrucciones control de flujo: ciclos


Java, como otros lenguajes de programacin, tiene tres tipos de instrucciones para manejar ciclos, repeticiones o bucles: for, while y do-while. Tal como se trat en el Captulo 2, Lenguaje Algortmico, estas instrucciones ejecutan repetidamente el mismo conjunto de instrucciones contenidas en su bloque, hasta que se cumpla una condicin determinada, expresada por una expresin de tipo booleano. Con frecuencia este tipo de instrucciones se utilizan

Programacin Java bsica: Instrucciones control de flujo: ciclos

7 - 57

asociadas con estructuras de datos del tipo arreglos, para realizar operaciones sobre cada elemento de la estructura, por ejemplo en un problema de multiplicacin de matrices. La diferencia sustantiva de cada una de las anteriores instrucciones radica en las caractersticas de la forma de control del ciclo respectivo:

Cuando se conoce de antemano el nmero de veces que se repetir un ciclo, se utilizar preferencialmente la instruccin for. Si se requiere que el ciclo se repita al menos una vez es decir, primero se realiza la accin o instrucciones del bloque y luego se pregunta por la condicin, se puede utilizar do-while. Si se requiere de un ciclo el cual se ejecuta cero o mas veces, es decir, primero se evala la condicin y dependiendo de esta se realiza o no el ciclo, se puede utilizar while.

La estructura lgica de los ciclos o bucles est formada de cuatro partes:

Inicializacin: hace referencia al cdigo que establece las condiciones de inicio del ciclo. Por ejemplo la variable que va a controlar el ciclo. Cuerpo: comprende el bloque de instrucciones que se desea repetir con el ciclo y que es el propsito principal de este. Iteracin: es el cdigo que se ejecuta despus del cuerpo pero antes de un nuevo ciclo o repeticin. En este se incrementa la variable controladora del ciclo. Terminacin: Corresponde a una expresin de tipo booleano que es evaluada cada vez que se hace un ciclo, para verificar si este debe terminar o continuar. Se evala respecto de la variable controladora del ciclo.

Instruccin while
Es la instruccin bsica para el manejo de los ciclos o iteraciones, ya que permite ejecutar repetidamente una o mas instrucciones, mientras una condicin o predicado lgico de terminacin sea verdadera. Lo cual significa que, evala la condicin antes de iniciar un ciclo, el cual puede no realizarse si la condicin no es verdadera. Su forma general es la siguiente:
[inicializacin;] while (condicin de terminacin) { cuerpo;

Programacin Java bsica: Instrucciones control de flujo: ciclos


[iteracin;] }

7 - 58

Ejemplo 16: Desarrollar un programa que permita generar y escribir los 10 primeros nmeros enteros
1.class CicloWhile{ 2. public static void main(String args[]){ 3. int entero = 1; 4. while(entero <=10){ 5. System.out.println(Numero = +entero); 6. entero++; 7. } 8. System.out.println(Ciclo terminado, valor de entero= +entero); 9. } 10.}

Linea 3: corresponde a la parte de inicializacin del ciclo, se le asigna a la variable entero el valor 1. est variable forma parte de la condicin de terminacin, en la lnea 4, la cual al evaluarse la primera vez, da como resultado true, es decir la variable entero es menor o igual a 10, por tanto realiza la primera iteracin del cuerpo del ciclo, formado esta vez por la instruccin System.out.println para generar la salida en la pantalla de comandos. Linea 4- 9: cuerpo del ciclo, el cual es iniciado con la instruccin while y la primer llave. Mientras la condicin sea verdadera, se realizar la generacin de una lnea en la pantalla con el valor de entero. Lnea 5: escribe los valores de la variable entero. Lnea 6: Despus de escribir el valor entero generado la primera vez en la Lnea 3, se incrementa la variable entero mediante la expresin entero++, que es la parte de iteracin del ciclo. Se repite el proceso de evaluar la condicin de terminacin; al ser nuevamente verdadera, se realiza una vez mas el ciclo generando la salida e iterando nuevamente. As sucesivamente hasta que la condicin de terminacin se torna falsa, lo cual se logra cuando se ha generado la salida con System.out.println, del valor entero igual a 10, incrementando luego en la iteracin su valor a 11, el cual hace que la condicin de

Programacin Java bsica: Instrucciones control de flujo: ciclos

7 - 59

terminacin tome el valor false, y no realizndose mas el ciclo del while. Se contina con la siguiente instruccin en la lnea 8, la cual genera un mensaje de terminacin e indica el valor final de la variable entero.

Obsrvese que, si el valor de la variable entero es mayor que 10 antes de iniciar el ciclo, este nunca se realiza, aunque escribir el mensaje de terminacin, indicando el valor asignado a la variable. Cuando se ejecuta el programa anterior da como resultado en la pantalla de comandos:
Numero = 1 Numero = 2 Numero = 3 Numero = 4 Numero = 5 Numero = 6 Numero = 7 Numero = 8 Numero = 9 Numero = 10 Ciclo terminado, valor de entero= 11

Ejemplo 17: Desarrollar un programa en Java que permita evaluar la funcin 2 f x= x 2 x entre los valores a y b (a < b) y a incrementos dx. Los valores para a, b, dx, sern ledos por el teclado. Los valores de la evaluacin de la funcin, as como los de la ordenada x, se escribirn en la pantalla.
1.import java.text.DecimalFormat; 2.import javax.swing.*; 3.public class EvaluaFuncion1{ 4. public static void main( String args[] ){ 5. double a, b, dx, fx, x; 6. String input; 7. DecimalFormat precision = new DecimalFormat ( "0.00" ); 8. JTextArea outputTextArea = new JTextArea(10,20); 9. JScrollPane scroller = new JScrollPane (outputTextArea); 10. input= JOptionPane.showInputDialog("Digite el valor para a "); 11. a = Double.parseDouble(input); 12. input = JOptionPane.showInputDialog("Digite el valor para b "); 13. b = Double.parseDouble(input); 14. input = JOptionPane.showInputDialog("Digite el valor para dx ");

Programacin Java bsica: Instrucciones control de flujo: ciclos

7 - 60

15. dx = Double.parseDouble(input); 16. outputTextArea.append( " valor x\tvalor f(x) \n" ); 17. x=a; 18. while(x<=b){ 19. fx = x*x - 2*x; 20. outputTextArea.append(" "+precision.format(fx) + "\t"+ precision.format(x)+ "\n"); 21. x = x+dx; 22. } 23. JOptionPane.showMessageDialog( null, scroller, "Evalua Funcion f(x) = x*x -2*x",JOptionPane.INFORMATION_MESSAGE ); 24. System.exit( 0 ); 25. } 26.}

Linea 1: se importa la clase DecimalFormat, el cual se requiere para dar formato a la salida de resultados de las variables reales x y fx. Linea 5:define de tipo double a las variables de entrada a, b, dx, y de salida fx y x. Linea 7: crea un objeto precision, del tipo DecimalFormat a partir del constructor de esta o sea DecimalFormat(0.00), en el cual define que tendr dos cifras decimales en la salida de resultados. Linea 8: crea un objeto areaDeSalida del tipo JTextArea, a partir del constructor JTextArea(10,20), el cual define un rea de 10 columnas por 20 filas. En esta rea se guardarn los resultados. Linea 9: crea un objeto scroller del tipo JScrollPane, a partir del constructor JScrollPane(areaDeSalida), el cual contendr el objeto areaDeSalida, de tal manera que se podr hacer desplazamiento horizontal y vertical de la informacin mostrada. Linea 10: mediante el componente JoptionPane, se introduce la informacion para la cadena input. Linea 11: se convierte la cadena leida input, la cual puede contener cifras decimales en un valor real de tipo Double, elc ual se almacena en a, mediante el mtodo parseDouble(input), de la clase Double. Lineas12-15: se hace la misma operacin para introducir y convertir a valores reales los valores para b y dx.

Programacin Java bsica: Instrucciones control de flujo: ciclos

7 - 61

Linea 16. se agrega, mediante el mtodo append(), la primera lnea de texto al objeto areaDeSalida. Obsrvese la utilizacin del comando de escape \t para hacer un tabulado, as como el del \n para saltar a una nueva lnea. Linea 17. asigna a la variable x el valor del punto inicial a. La variable x es la que controlar la ejecucin del ciclo. Linea 18: inicio del ciclo, el cual es controlado por el predicado o condicin
(a<=b), es decir que, mientras esa condicin sea verdadera, se ejecutarn las instrucciones del cuerpo del ciclo while denotadas por el par de llaves {}.

Linea 19: clculo del valor de fx mediante la evaluacin de la expresin para un valor de x. Linea 20: agrega al objeto areaDeSalida, el texto correspondiente a los resultados de fx y x. Obsrvese el uso del mtodo format() del objeto precision, para darle formato de salida con dos decimales, a las variables fx y x. Linea 21: se incrementa la variable x en el valor dx y se repite el ciclo si la condicin de la lnea 18 sigue siendo verdadera. Linea 23: se escriben los resultados del objeto scroller. Se coloca un ttulo Evalua Funcion f(x) = x*x 2*x en la parte superior de la ventana del componente JOptionPane y se utiliza la constante INFORMATION_MESSAGE, para que aparezca un cono alusivo a informacin. Linea 24: se invoca el mtodo exit(0), para terminar la ejecucin del programa. Los resultados obtenidos al ejecutar el anterior programa, para los valores de a, b, dx dados son los siguientes:

Figura 30 Lectura valor a

Programacin Java bsica: Instrucciones control de flujo: ciclos

7 - 62

Figura 31 Lectura valor b

Figura 32 Lectura valor dx

Figura 33 Resultados clase EvaluaFuncion

Ejemplo 18 : Desarrollar un programa que permita leer 5 valores enteros y calcular su promedio:
import javax.swing.JOptionPane; public class PromedioEnteros { public static void main( String args[] ) { int total= 0, contador= 0, valorEntero,

Programacin Java bsica: Instrucciones control de flujo: ciclos


promedioEnteros;

7 - 63

String entrada;
while ( contador < 5 ) {

entrada = JOptionPane.showInputDialog(
"Digite un valor entero > 0: " );

valorEntero = Integer.parseInt( entrada ); total = total + valorEntero; contador = contador + 1; } promedioEnteros = total / 5; JOptionPane.showMessageDialog(
null, "El promedio de los valores leidos es: " + promedioEnteros, "Calculo Promedios",

JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } }

Los resultados obtenidos al digitar los valores enteros 10, 11, 12, 13, 14 enteros son los siguientes:

Figura 34 Resultados clase PromedioValores

Ejemplo 19: Desarrollar el problema anterior pero esta vez el ciclo se hace con un registro centinela. Se debe escribir tambin el numero de valores ledos.
import javax.swing.JOptionPane; public class PromedioEnteros1 { public static void main( String args[] ) { int total= 0, contador= 0, valorEntero, promedioEnteros; String entrada; entrada = JOptionPane.showInputDialog( "Digite un valor entero.\nSi digita -9 termina el programa" ); valorEntero =Integer.parseInt( entrada ); while ( valorEntero != -9 ) { total = total + valorEntero;

Programacin Java bsica: Instrucciones control de flujo: ciclos


contador = contador + 1; entrada = JOptionPane.showInputDialog( "Digite un valor entero > 0: " ); valorEntero = Integer.parseInt( entrada );

7 - 64

} promedioEnteros = total / contador; JOptionPane.showMessageDialog( null, "El promedio de los "+contador+" valores leidos es: " + promedioEnteros, "Calculo Promedios", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } }

Los resultados obtenidos al ejecutar el programa anterior con los datos, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, -9, es el siguiente:

Figura 35 Resultados clase PromedioEnteros1

Ejemplo 20: Desarrollar un programa Java tipo Applet que permita dibujar 15 rectngulos.
import java.awt.Graphics; import javax.swing.JApplet; public class ContadorWhile1 extends JApplet { public void paint( Graphics g ){ int contador = 1; while ( contador <= 15 ) { g.drawRect(contador*20, contador*5, 15, 15 ); ++contador; } } } El programa HTML para ejecutar el anterior applet es el siguiente:

Programacin Java bsica: Instrucciones control de flujo: ciclos

7 - 65

<html> <applet code="ContadorWhile1.class" width=350 height=105> </applet> </html>

Los resultados son los siguientes:

Figura 36 Resultados applet ContadorWhile1

Instruccin do-while
En esta instruccin de ciclo, la evaluacin de la condicin de terminacin se hace al final del ciclo y no antes del ciclo como en la instruccin while vista antes. Esto significa que, aunque la condicin de terminacin sea falsa, se realiza al menos una sola vez el ciclo. La forma general de esta instruccin es:
[inicializacion;] do { cuerpo; [iteracin;] } while(condicin de terminacin);

inicializacin, cuerpo, iteracin y condicin de terminacin, tienen el mismo significado dado antes en la instruccin while.

El ejemplo visto antes de la generacin de los 10 primeros nmeros enteros , ilustra en este caso, la utilizacin de la instruccin do-while . Ejemplo 21:
1.class CicloDoWhile{

Programacin Java bsica: Instrucciones control de flujo: ciclos


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

7 - 66

public static void main(String args[]){ int entero = 1; do{ System.out.println(Numero = +entero); entero++; }while(entero<10); System.out.println(Ciclo terminado, valor de entero= +entero); 9. } 10.}

En la lnea 3 se inicializa la variable entero con el valor 1, a fin de que controle con sus incrementos sucesivos en la lnea 6, la condicin a evaluar al final de cada ciclo de la lnea 7. La instruccin do-while va entre las lineas 4 y 7. Una vez agotado el ciclo con la condicin de la lnea 7, se da control a la siguiente instruccin despus dl ciclo, System.out.println de la lnea 8. Los resultados obtenidos son similares al ejemplo visto antes:
Numero = 1 Numero = 2 Numero = 3 Numero = 4 Numero = 5 Numero = 6 Numero = 7 Numero = 8 Numero = 9 Numero = 10 Ciclo terminado, valor de entero= 11

Como se puede observar, el control de terminacin del ciclo se realiza una vez ha hecho la iteracin, con lo cual, aunque el valor de la variable en su inicializacin fuera 15 por ejemplo, se realizar el primer ciclo, en cuyo caso se dar el siguiente resultado:
Numero = 15 Ciclo terminado, valor de entero= 16

Ejemplo 22 : Desarrollar el mismo problema del ejemplo anterior, pero esta vez utilizando la instruccin de ciclo do-while.
import java.text.DecimalFormat; import javax.swing.*; public class EvaluaFuncion2{ public static void main( String args[] ) double a, b, dx, fx, x;

Programacin Java bsica: Instrucciones control de flujo: ciclos

7 - 67

String input; DecimalFormat precision = new DecimalFormat ( "0.00" ); JTextArea areaDeSalida = new JTextArea(10,20); JScrollPane scroller = new JScrollPane(areaDeSalida); input= JOptionPane.showInputDialog("Digite el valor para a "); a = Double.parseDouble(input); input = JOptionPane.showInputDialog("Digite el valor para b "); b = Double.parseDouble(input); input = JOptionPane.showInputDialog("Digite el valor para dx "); dx = Double.parseDouble(input); areaDeSalida.append( " valor x\tvalor f(x)\n" ); x=a; do { fx = x*x - 2*x; areaDeSalida.append(" "+precision.format(fx) + "\t"+ precision.format(x)+ "\n"); x = x+dx; }while(x<=b); JOptionPane.showMessageDialog(null, scroller, "Evalua Funcion f(x) = x*x -2*x", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } }

Los resultados obtenidos por el anterior programa para los mismos valores de a, b, y dx son los siguientes:

Programacin Java bsica: Instrucciones control de flujo: ciclos

7 - 68

Figura 37 Resultados clase EvaluaFuncion2

Ejemplo 23: desarrollar un apllet que permita dibujar 15 rectngulos.


import java.awt.Graphics; import javax.swing.JApplet; public class ContadorDoWhile extends JApplet { public void paint( Graphics g ){ int contador = 1; do{ g.drawRect(contador*20, contador*5, 15, 15 ); ++contador; } while(contador <=15); } }

El programa HTML para ejecutar el anterior applet es el siguiente:


<html> <applet code="ContadorDoWhile.class" width=350 height=105> </applet> </html>

Los resultados son los siguientes:

Programacin Java bsica: Instrucciones control de flujo: ciclos

7 - 69

Figura 38 Resultados applet ContadorDoWhile

Instruccin for
Esta instruccin presenta una forma compacta para realizar los ciclos, su utilizacin radica en que se conoce de antemano el nmero de veces que se debe realizar el ciclo, su forma general es la siguiente:
for (inicializacion; condicion de terminacin; iteracion ) cuerpo; inicializacion;,condicion de terminacin, iteracion, cuerpo, tienen el mismo significado dado antes. El mismo ejemplo tratado en

las dos instrucciones anteriores se presenta a continuacin para ilustrar la instruccin for: Ejemplo 24:
1.class CicloFor{ 2. public static void main(String args[]){ 3. int entero; 4. for(entero=1; entero <= 10; entero++;) 5. System.out.println(Numero = +entero); 6. System.out.println(Ciclo terminado, valor de entero= +entero); 7. } 8.}

Como se puede observar, la instruccin for de la lnea 3, contiene tanto la incializacin de la variable, como la condicin de terminacin y el incremento o decremento de la variable controladora del ciclo. El cuerpo dl ciclo va entre las lneas 5 y 7, el cual debe ser delimitado con las llaves o corchetes para indicar el mbito del ciclo. Si no se especifica el cuerpo con llaves, se ejecutara solamente

Programacin Java bsica: Instrucciones control de flujo: ciclos

7 - 70

la instruccin inmediatamente siguiente a la lnea donde se encuentra la instruccin for. Los resultados obtenidos una vez se ejecute el programa son los siguientes:
Numero = 1 Numero = 2 Numero = 3 Numero = 4 Numero = 5 Numero = 6 Numero = 7 Numero = 8 Numero = 9 Numero = 10 Ciclo terminado, valor de entero= 11

Ejemplo 25: dibujar 15 rectngulos con la instruccin For.


import java.awt.Graphics; import javax.swing.JApplet; public class ContadorFor1 extends JApplet { public void paint( Graphics g ){ int contador; for (contador = 1; contador <= 15; contador++ ) g.drawRect(contador*20, contador*5, 15, 15 ); } }

El siguiente es el cdigo HTML para ejecutar el anetrior applet:


<html>
<applet code="ContadorFor1.class" width=350 height=105> </applet> </html>

Los resultados son los siguientes:

Programacin Java bsica: Instrucciones control de flujo: ciclos

7 - 71

Figura 39 Resultados applet ContadorFor1

Ejemplo 26: calcular la suma de los pares entre 2 y 200.


import javax.swing.JOptionPane; public class SumaPares { public static void main( String args[] ) { int suma = 0; for ( int numero = 2; numero <= 100; numero += 2 ) suma += numero; JOptionPane.showMessageDialog( null, "La suma de los pares entre 2 y 200 es " + suma, "Suma pares",JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } }

Y los resultados son:

Figura 40 Resultados calse SumaPares

Programacin Java bsica: Instrucciones control de flujo: ciclos

7 - 72

Ejemplo 27: Desarrollar un programa Java que permita leer la informacin de N (N>1) vehculos correspondiente a marcaVehiculo (marca del vehculo) y colorVehiculo (color del vehculo) y calcular la distribucin del nmero de vehculos segn marca y color. Escribir el total de vehculos segn color y el total de vehculos segn marca. Para la marca del vehculo se tienen los siguientes cdigos: 1 Renault, 2 Ford, 3 Mazda Para el color del vehculo se tienen los siguientes cdigos: 1 Rojo, 2 Blanco, 3 Azul En este caso se utilizar el ciclo while para la repeticin del ciclo de lectura de valores para cada vehculo y una instruccin switch anidada para llevar los acumulados segn el color y la marca del vehculo leido. A continuacin el programa en Java:
1.import javax.swing.*; 2.import java.text.*; 3.public class CuentaCarros1{ 4.public static void main(String arg[]){ 5. String entrada; 6. int codigoMarca, codigoColor, n, contVehiculos=0; 7. int contRenault=0, contFord=0, contMazda=0, renaultRojo=0, renaultBlanco=0, renaultAzul=0; 8. int fordRojo=0, fordBlanco=0, fordAzul=0, mazdaRojo=0, mazdaBlanco = 0, mazdaAzul =0; 9. int contRojo=0, contBlanco = 0, contAzul=0; 10. JTextArea areaDeSalida = new JTextArea(10,37); 11. JScrollPane scroller = new JScrollPane(areaDeSalida); 12. entrada=JOptionPane.showInputDialog("Digite el nmero de vehiculos a leer:"); 13. n = Integer.parseInt(entrada); 14. for(contVehiculos = 1; contVehiculos <=n;contVehiculos ++){ 15. do{ 16. entrada=JOptionPane.showInputDialog("Digite una marca de vehiculo:\n1 Renault\n2 Ford\n3 Mazda"); 17. codigoMarca = Integer.parseInt(entrada);} 18. while(!(codigoMarca>= 1 && codigoMarca <=3)); 19. do{ 20. entrada=JOptionPane.showInputDialog("Digite un color de vehiculo:\n1 Rojo\n2 Blanco\n3 Azul"); 21. codigoColor = Integer.parseInt(entrada);} 22. while(!(codigoColor>= 1 && codigoColor <=3)); 23. switch(codigoMarca) {

Programacin Java bsica: Instrucciones control de flujo: ciclos


24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. case 1: contRenault=contRenault+1; switch(codigoColor) { case 1: contRojo=contRojo+1; renaultRojo=renaultRojo+1; break; case 2: contBlanco=contBlanco+1; renaultBlanco=renaultBlanco+1; break; case 3: contAzul=contAzul+1; renaultAzul=renaultAzul+1; break; } break; case 2: contFord=contFord+1; switch(codigoColor) { case 1: contRojo=contRojo+1; fordRojo=fordRojo+1; break; case 2: contBlanco=contBlanco+1; fordBlanco=fordBlanco+1; break; case 3: contAzul=contAzul+1; fordAzul=fordAzul+1; break; } break; case 3: contMazda=contMazda+1; switch(codigoColor) { case 1: contRojo=contRojo+1; mazdaRojo=mazdaRojo+1; break; case 2: contBlanco=contBlanco+1; mazdaBlanco=mazdaBlanco+1; break; case 3: contAzul=contAzul+1; mazdaAzul=mazdaAzul+1; break;

7 - 73

Programacin Java bsica: Instrucciones control de flujo: ciclos

7 - 74

73. } 74. break; 75. } 76. } 77. areaDeSalida.append(" \tDistribucion de vehiculos segun marca y color\n\n"+ 78. "\tBlanco \tRojo \tAzul \t Total \n"+"Renault\t"+ 79. renaultRojo+"\t"+renaultBlanco+"\t"+renaultAzul+"\t"+con tRenault+"\n"+ 80. "Ford\t"+fordRojo+"\t"+fordBlanco+"\t"+fordAzul+"\t "+contFord+"\n"+ 81. "Mazda\t"+mazdaRojo+"\t"+mazdaBlanco+"\t"+mazdaAzul +"\t"+contMazda+"\n"+ 82. "Total\t"+contRojo+"\t"+contBlanco+"\t"+contAzul+"\ t"+n+"\n"); 83. JOptionPane.showMessageDialog(null,scroller, "Encuesta",JOptionPane.INFORMATION_MESSAGE); 84. System.exit(0);} 85.}

Figura 41 Resultados clase CuentaCarros

Mas de una expresin en la inicializacin e iteracin del ciclo for Algunas veces es necesario incluir mas de una expresin en las partes de inicializacin e iteracin de los ciclos for, como puede ser ejemplificado en la aplicacin siguiente:

Programacin Java bsica: Instrucciones control de flujo: ciclos Ejemplo 28:


import javax.swing.*; class MasDeUno{ public static void main(String args[]){ JTextArea areaDeSalida = new JTextArea(10,10); int val1, val2; for(val1=1, val2=15; val1<=val2; val1++, val2--) areaDeSalida.append(" val1= "+val1+ "\tval2= "+val2+"\n"); JOptionPane.showMessageDialog(null,areaDeSalida); System.exit(0); } }

7 - 75

Aqu se estn usando dos variables val1 y val2 en la parte de inicializacin, las cuales obviamente se modifican en la parte de iteracin. La condicin de terminacin del ciclo es controlada por los valores que toman val1 y val2. Terminndose el ciclo cuando las dos variables sean iguales. El resultado despus de su ejecucin es el siguiente:

Figura 42 Resultados clase MasDeUno

Instrucciones para salto


Java dispone de cuatro formas para transferir control de un lugar a otro del programa: break, continue, return y throw, que aunque no producen el desvo de flujo por s mismas, se utilizan en conexin con instrucciones de control de flujo como en el caso de switch, ya vista antes, as como con el if-else, while, do-while y for. La instruccin return se tratar mas adelante en la unidad de mtodos y la instruccin throw, que permite el manejo de excepciones se tratar mas adelante en la unidad de manejo de excepciones, junto con las

Programacin Java bsica: Instrucciones para salto 7 - 76 instrucciones try, catch y finally.

break
Ya se ha visto la utilizacin de break en la instruccin switch para interrumpir la accin del case y darle control a la siguiente instruccin despus de switch. Tambin se la puede utilizar para interrumpir el bloque de cdigo de un ciclo y salir de este, dndole control a la siguiente instruccin. La interrupcin del ciclo o bloque que se est desarrollando puede hacerse mediante la instruccin break con etiqueta, a fin de darle el control a otra parte del programa denominado con es etiqueta. De esta manera la instruccin break tiene tres usos:

Para terminar una secuencia de instrucciones en un switch, tal como se vi antes al tratar esta instruccin. Para salir desde el interior de un ciclo for, do-while o while, sin pasar por la condicin de terminacin, y sin ejecutar el resto de instrucciones dentro del cuerpo del ciclo, continuando con la siguiente instruccin despues del ciclo donde se encuentre. Como una forma del tradicional goto de los viejos lenguajes de programacin, al permitir saltar a otra parte del programa indicado con una etiqueta.

Veamos su utilizacin en los siguientes ejemplos de ciclos: Ejemplo 29:


import javax.swing.JOptionPane; public class ChequeoBreak { public static void main( String args[] ) { String salida = "Valores generados en el ciclo"; int contador; for ( contador = 1; contador <= 10; contador++ ) { if ( contador == 5 ) break; salida += contador + " "; } salida += "\nInterrumpe el ciclo con contador = " + contador; JOptionPane.showMessageDialog( null, salida ); System.exit( 0 ); } }

Da el siguiente resultado:

Programacin Java bsica: Instrucciones para salto 7 - 77

Figura 43 Resultados clase ChequeoBreak

Ejemplo 30:
1.class RompeFor{ 2. public static void main(String args[]){ 3. for(int i=0; i<100;i++){ 4. if(i==5) break; 5. System.out.println(Valor de i= +i); 6. } 7. System.out.println(Instruccion despues del ciclo); 8. } 9.}

Cuando i tome el valor 5 en la lnea 4, la instruccin break, indica que salte fuera del ciclo for, a la instruccin inmediatamente siguiente. El programa da como resultado los siguientes valores:
Valor de i= Valor de i= Valor de i= Valor de i= Valor de i= Instruccin 0 1 2 3 4 despues del ciclo

El mismo programa anterior pero utilizando en esta oportunidad la instruccin do-while: Ejemplo 31:
1.class RompeDoWhile{ 2. public static void main(String args[]){ 3. int i = 1; 4. do{ 5. if(i==5) break; 6. System.out.println(Valor de i= +i);

Programacin Java bsica: Instrucciones para salto 7 - 78


7. 8. 9. ciclo); 10. } 11.} 12. i++; }while(i <100); System.out.println(Instruccion despues del

Dando el mismo resultado que en el caso del ciclo for. La instruccin break sin etiqueta cuando se utiliza dentro de ciclos anidados, provocar la salida del ciclo mas interno, como en el caso siguiente: Ejemplo 32:
1.class RompeCicloInterno{ 2. public static void main(String args[]){ 3. for(int i=1; i<=5; i++){ 4. System.out.println(valor de i= +i+ valor de j= ); 5. for(int j=0;j<=10; j++){ 6. if(i==j)break; 7. System.out.print(j+ ); 8. } System.out.println(); 9. 10. } 11. System.out.println(Ciclos terminados); 12. } 13.}

El cual dara los siguientes resultados:


valor valor valor valor valor de de de de de i= i= i= i= i= 1 2 3 4 5 valor valor valor valor valor de de de de de j= 0 j = 0 j = 0 j = 0 j = 0 1 1 2 1 2 3 1 2 3 4

Obsrvese que, la instruccin break en el ciclo interior, acta cuando el valor de i es igual a j, dndole el control a la instruccin siguiente al ciclo interno, System.out.println() y continuando con el ciclo externo, incrementando el valor de i, y entrando nuevamente al ciclo interno, hasta que se cumple nuevamente la condicin de igualdad de i con j, as sucesivamente hasta que se agota el ciclo externo con el valor de i igual a 5.

Programacin Java bsica: Instrucciones para salto 7 - 79 La ultima forma de la instruccin break tiene que ver con su utilizacin como equivalencia de un goto. Esta forma no es la mas aconsejable puesto que dara lugar a los denominados programas espagettis, dificultando su entendimiento y mantenimiento. Por ejemplo, para salir desde el ciclo mas interno de un conjunto de ciclos anidados, la forma del break con etiqueta es una alternativa, puesto que salta directamente al lugar del programa que se desea continuar su ejecucin. Obviamente esta prctica no es la mas aconsejable y debe restringirse al mximo. La forma general de la instruccin break con etiqueta es:
break etiqueta;

en donde etiqueta es el nombre de la etiqueta o identificador asociado con un bloque de cdigo en otra parte del programa, que debe contener dentro de su cuerpo a la instruccin break con etiqueta. El control se transfiere entonces a la siguiente instruccin o bloque despus del bloque que contiene la etiqueta. El bloque denominado con la etiqueta, se le asigna la etiqueta seguida de dos puntos, como se ilustra a continuacin: Ejemplo 33:
1.class BreakConEtiqueta{ 2. public static void main(String args[]){ 3. aqu: for(int i=1; i<=10; i++){ 4. System.out.print(valor de i= +i+ valor de j= ); 5. for(int j=0;j<=10; j++){ 6. if(i==j)break; 7. if(i==5)break aqui; 8. System.out.print(j+ ); 9. } System.out.println(); 10. 11. } 12. System.out.println(Ciclos terminados con break aqui:); 13. } 14.}

Al ejecutarse da los siguientes resultados:


valor valor valor valor valor aqui: de de de de de i= i= i= i= i= 1 2 3 4 5 valor valor valor valor valor de de de de de j j j j j = = = = = 0 0 1 0 1 2 0 1 2 3 Ciclos terminados con break

Programacin Java bsica: Instrucciones para salto 7 - 80 Ejemplo 34:


import javax.swing.JOptionPane; public class ChequeoBreakLabel{ public static void main( String args[] ) { String salida = ""; int numero=10; pare: { for ( int fila = 1; fila <= 10; fila++ ) { for ( int columna = 1; columna <= 5 ; columna++ ) { if ( fila == 5 ) break pare; numero++; salida += " "+numero; } salida += "\n"; } salida += "\nPor aqui nunca pasa"; } JOptionPane.showMessageDialog( null, salida,"Chequeo del break con etiqueta", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } }

Los resultados son los siguientes:

Figura 44 Resultados de la clase ChequeoBreakLabel

Programacin Java bsica: Instrucciones para salto 7 - 81

Instruccin continue
A diferencia de la instruccin break que interrumpe la ejecucin de un ciclo, la instruccin continue permite interrumpir la iteracin actual, no continuando con el resto del cdigo del ciclo, pero continuando con la siguiente iteracin del mismo ciclo. En los ciclos while y do-while, el control se transfiere desde la instruccin continue hasta despues del cuerpo del ciclo, para verificar la condicin de terminacin. Para el caso del ciclo for, el control se transfiere primero a la parte de iteracin y luego a la condicin de terminacin. En los tres casos, el cdigo despus de la instruccin continue no se ejecuta. El siguiente ejemplo ilustra la utilizacin de esta instruccin: Ejemplo 35:
1.class UsoContinue{ 2. public static void main(String args[]){ 3. for(int i=1; i<=4; i++){ 4. for(int j=1;j<=4; j++){ 5. if(!(j<=i))continue; 6. System.out.print("("+i+" , "+j+") "); 7. }System.out.println(); 8. } 9. System.out.println("Ciclos terminados "); 10. } 11.}

Al ser ejecutado dar el siguiente resultado:


(1,1) (2,1) (2,2) (3,1) (3,2) (3,3) (4,1) (4,2) (4,3) (4,4)

Ejemplo 36 : Desarrollar un programa que permita generar los bnumeros del 1 al 20 pero que salte el numero 7 y el 14
import javax.swing.JOptionPane; public class ChequeoContinue{ public static void main( String args[] ) { String salida = ""; for ( int contador = 1; contador <= 20; contador++ ) { if ( contador == 7 || contador ==14) continue;

Programacin Java bsica: Instrucciones para salto 7 - 82


salida += contador + " "; } salida += "\nSe utiliza el CONTINUE para saltar los valores 7 y 14"; JOptionPane.showMessageDialog( null, salida ); System.exit( 0 ); } }

Los resultados son los siguientes:

Figura 45 Resultados clase ChequeoContinue

La instruccin continue tambien se puede utilizar con etiqueta para transferir el control a otra parte del programa, su forma general es:
continue etiqueta;

Ejemplo 37:
import javax.swing.JOptionPane; class ChequeoContinueEtiqueta{ public static void main(String args[]){ String salida="Uso del CONTINUE con etiqueta:\n"; aqui: for(int i=1; i<=7; i++){ for(int j=1;j<=7; j++){ if(!(j<=i)){ salida+="\n"; continue aqui;} salida+="("+i+" , "+j+") "; } salida+= "\nEsto lo agrega al final"; } JOptionPane.showMessageDialog(null,salida ); System.exit(0); } }

Programacin Java bsica: Instrucciones para salto 7 - 83 El resultado es el siguiente:

Figura 46 Resultados de la clase ChequeoContinueEtiqueta

Arreglos
En Java como en los dems lenguajes de programacin, se permite el manejo de conjuntos de datos del mismo tipo, a los cuales se hace referencia mediante un mismo nombre o identificador. Es el caso de los denominados vectores o arreglos de una dimensin, matrices o arreglos de dos dimensiones y los de mltiples dimensiones. Los arreglos son entonces agrupamientos de valores del mismo tipo de dato. El nombre o identificador de los arreglos sigue las mismas reglas que para las variables sencillas, solo que se agrega un par de parntesis [] para indicar que es un arreglo en su declaracin de tipo.

Arreglos uni-dimensionales
Sea el caso de un arreglo unidimensional para representar el siguiente vector:
A = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)

que representa los das de cada uno de los meses del ao (para un ao no bisiesto). Su definicin en Java como arreglo se dar con la siguiente forma:
int diasDeMeses[];

Programacin Java bsica: Arreglos 7 - 84 Como sucede con la declaracin de otras variables, el valor asignado por defecto al arreglo es cero. Sin embargo, para los arreglos existe un valor especial que se le asigna cuando no se han asignado valores a sus elementos, es el valor null que representa que el arreglo no tiene valores an asignados. Estrictamente hablando, se ha creado un objeto tipo int con la expresin anterior, de tal manera que, para darle valores, se debe utilizar en primer lugar el operador new, para asignar el tamao del arreglo, en este caso debe tener espacio para albergar los doce valores correspondiente a los doce meses del ao. El tamao del arreglo DiasDeMeses se define con la siguiente forma:
diasDeMeses = new int[12]; As el arreglo DiasDeMeses se refiere a 12 lugares de almacenamiento para albergar los das de los meses del ao. Se pudo utilizar la siguiente expresin para definir la misma operacin:

int DiasDeMeses[] = new int[12]; En la siguiente clase se define el arreglo y se genera por la pantalla de comandos los valores para Enero y Julio:
Ejemplo 38:

import javax.swing.*; public class DiasMeses{ public static void main(String args[]){ int DiasDeMeses[]; String salida=""; DiasDeMeses = new int[13]; DiasDeMeses[1]=31; DiasDeMeses[2]=28; DiasDeMeses[3]=31; DiasDeMeses[4]=30; DiasDeMeses[5]=31; DiasDeMeses[6]=30; DiasDeMeses[7]=31; DiasDeMeses[8]=31; DiasDeMeses[9]=30; DiasDeMeses[10]=31; DiasDeMeses[11]=30; DiasDeMeses[12]=31; salida+="Enero tiene "+DiasDeMeses[1]+" dias\n"; salida+="Julio tiene "+DiasDeMeses[7]+" dias"; JOptionPane.showMessageDialog(null,salida); } }

Programacin Java bsica: Arreglos 7 - 85 Al ejecutar este programa aparece en la pantalla:

Figura 47 Resultados clase DiasMeses

Una forma ms simple de guardar los valores en el arreglo DiasDeMeses[] es mediante la siguiente estructura de clase: Ejemplo 39:
import javax.swing.*; class DiasMeses2{ public static void main(String args[]){ String salida=""; int DiasDeMeses[]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; salida+="Enero tiene "+DiasDeMeses[1]+" dias\n"; salida+="Julio tiene "+DiasDeMeses[7]+" dias"; JOptionPane.showMessageDialog(null,salida); } }

Obtenindose en la pantalla los mismos resultados que el ejemplo anterior. En Java, el tamao del arreglo se debe especificar. Una referencia a una posicin fuera de los limites indicados en la definicin del tamao generar un error en tiempo de ejecucin. Ejemplo 40 : Desarrollar un programa que permita asignarle a un arreglo entero N los valores 10, 9, 8 ,... .
import javax.swing.*; public class InicializaArreglo1 { public static void main( String args[] ) { String salida = ""; int n[] = new int[ 10 ]; salida += "Valores del arreglo n[ ]\nElemento \tvalor\n"; for ( int i = 0; i < n.length; i++ ){ n[i]= n.length-i;

Programacin Java bsica: Arreglos 7 - 86


salida += " "\n"; } JTextArea areaSalida = new JTextArea( 11, 10 ); areaSalida.setText( salida ); JOptionPane.showMessageDialog( null, areaSalida, "Asigna valores a un arreglo entero", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } } n[ "+i+" ] = " + "\t" + n[ i ] +

Al ejecutar el programa se obtienen los siguientes resultados:

Figura 48 Resultados de la clase InicializaArreglo1

Ejemplo 41: Desarrolle un programa que permita leer N (n>0) elementos de un arreglo unidimensional de tipo entero y calcular, la suma de sus elementos, el promedio, y el numero de elementos mayores que el promedio.
import javax.swing.JOptionPane; public class SumaArreglo1{

Programacin Java bsica: Arreglos 7 - 87


public static void main(String args[]){ int suma=0, valor, n, nMayores=0; float prom; int a[] = new int[100]; String entrada; do{ entrada=JOptionPane.showInputDialog("Digite el numero de trminos:"); n = Integer.parseInt(entrada);} while(n<=1 || n>100); for(int i = 1; i <= n; i++){ entrada=JOptionPane.showInputDialog("Digite valor para A["+i+"]:"); a[i] = Integer.parseInt(entrada); suma = suma +a[i]; } prom= suma/n; for(int i = 1; i<= n; i++){ if(a[i]>prom)nMayores++;} JOptionPane.showMessageDialog(null, "El valor de la suma es " +suma+ "\nEl valor del promedio es "+prom+"\nElementos mayores que el promedio "+nMayores); } }

Los resultados son los siguientes para la lectura de un arreglo con los siguientes valores: 12, 13, 14, 15, 29, 21, 45, 34, 32, 61, 26:

Figura 49 Lectura numero de trminos

Programacin Java bsica: Arreglos 7 - 88

Figura 50 Lectura de valores del arreglo

Figura 51 Resultados de la clase SumaArreglo1

Ejemplo 42: Escriba un programa que permita calcular la frecuencia de valores que hay en un arreglo dado.
import javax.swing.*; public class FrecuenciaValores1{ public static void main( String args[] ) { int arregloA[] = { 1, 2, 6, 4, 8, 5, 9, 7, 8, 9, 1, 6, 3, 8, 6, 8, 3, 8, 2, 7, 6, 5, 7, 6, 8, 6, 7, 5, 6, 6, 5, 6, 7, 5, 6, 4, 8, 6, 8, 3, 7, 8, 4, 5, 3, 9, 1, 3, 2, 5}; int frecuencia[] = new int[ 10 ]; int cont=0; String salida = "Valores del arreglo a[ ]\n\n"; for(int i = 0; i <arregloA.length/5; i++){ for(int j=1; j<=5;j++){ salida +="a["+cont+"]= "+arregloA[cont]+" \t"; cont=cont+1;} salida+="\n"; } for ( int indice1 = 0;indice1 < arregloA.length; indice1++ ) ++frecuencia[ arregloA[ indice1 ] ]; salida += "\nResultado del calculo de la

Programacin Java bsica: Arreglos 7 - 89


frecuencia\nvalor \tfrecuencia\n\n"; for ( int indice2 = 1;indice2 < frecuencia.length; indice2++ ) salida += indice2 + "\t" + frecuencia[ indice2 ] + "\n"; JTextArea areaSalida = new JTextArea( 11, 10 ); areaSalida.setText( salida ); JOptionPane.showMessageDialog( null, areaSalida, "Calculo de frecuencias", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } }

Programacin Java bsica: Arreglos 7 - 90

Figura 52 Resultados clase FrecuenciaValores

Ejemplo 43: Desarrollar un programa que dados los valores de un arreglo unidimensional, permita dibujar el histograma correspondiente a los valores del arreglo.
import javax.swing.*; public class CalculaHistograma1 { public static void main( String args[] ) { int n[] = { 12, 15, 19, 7, 18, 9, 10, 5, 7, 2 }; String output = ""; output += "Elemento\tValor\tHistograma"; for ( int i = 0; i < n.length; i++ ) { output += "\n" + i + "\t" + n[ i ] + "\t";

Programacin Java bsica: Arreglos 7 - 91


for ( int j = 1; j <= n[ i ]; j++ ) output += "*"; } JTextArea outputArea = new JTextArea( 11, 30 ); outputArea.setText( output ); JOptionPane.showMessageDialog( null, outputArea, "Dibujo de un histograma", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } }

El resultado es el siguiente:

Figura 53 Resultados clase CalculaHistograma

Arreglos bi-dimensionales
En Java los arreglos de ms de una dimensin, o multidimensionales, son en realidad matrices de matrices. Para declarar una variable del tipo arreglo multidimensional, se requiere especificar cada ndice adicional utilizando una pareja de corchetes [ ]. Por ejemplo, para definir un arreglo o matriz de dos dimensiones de tamao 5x4, es decir de 5 filas por cuatro columnas, tendremos la siguiente codificacin:
int MatBidi[][]= new int[3][4];

Programacin Java bsica: Arreglos 7 - 92 Con este cdigo se establecen 3 por 4 posiciones que se asignan a la variable MarizBidimencional que es de tipo entero. Su representacin es de la
siguiente manera:

Columna 0 Fila 0 Fila 1 Fila 2 MatBidi[0][0] MatBidi[1][0] MatBidi[2][0]

Columna 1

Columna 2

Columna 3 MatBidi[0][3] MatBidi[1][3] MatBidi[2][3]

MatBidi[0][1] MatBidi[0][2] MatBidi[1][1] MatBidi[1][2] MatBidi[2][1] MatBidi[2][2]

Los ndices del lado izquierdo representan las filas y los ndices del lado derecho representan las columnas del arreglo MatBidi[][] declarado en la instruccin anterior. Obsrvese que los subindices empiezan desde [0][0], con lo cual debe tenerse cuidado al manejar los arreglos. El siguiente ejemplo toma los elementos de una matriz de tamao 3 por 3 y calcula la suma de todos sus elementos: Ejemplo 44:
import javax.swing.*; class SumaArregloBi{ public static void main(String args[]){ int matriz[][] = new int[3][3]; int i, j, suma = 0; matriz[0][0]= 1; matriz[0][1]= 2; matriz[0][2]= 3; matriz[1][0]= 4; matriz[1][1]= 5; matriz[1][2]= 6; matriz[2][0]= 7; matriz[2][1]= 8; matriz[2][2]= 9; for (i=0; i<=2; i++) for (j=0;j<=2;j++) suma = suma + matriz[i][j]; JOptionPane.showMessageDialog(null,"La suma de los elementos es "+suma); System.exit(0); } }

El resultado del programa es el siguiente:

Programacin Java bsica: Arreglos 7 - 93

Figura 54 Resultados clase SumaArregloBi

Ahora el mismo programa anterior pero esta vez leyendo los valores para el arreglo. Ejemplo 45:
import javax.swing.*; class SumaArregloBi1{ public static void main(String args[]){ int matriz[][] = new int[3][3]; int i, j, suma = 0; String entrada; for (i=0; i<=2; i++) for (j=0;j<=2;j++){ entrada= JOptionPane.showInputDialog("Digite el trmino [ "+i+" ][ "+j+" ]"); matriz[i][j]=Integer.parseInt(entrada); suma = suma + matriz[i][j];} JOptionPane.showMessageDialog(null,"La suma de los elementos es "+suma); System.exit(0); } }

El resultado obtenido en la pantalla de comandos una vez se introduzacan los valores para el arreglo como en el caso siguiente para el elemento [2][1],

Programacin Java bsica: Arreglos 7 - 94

Figura 55 Lectura de datos clase SumaArregloBi1

Se obtendrn los mismos resultados que en el caso anterior:

Figura 56 Resultados clase SumaArregloBi1

Ejemplo 46: El siguiente ejemplo corresponde a una aplicacin que permite calcular el numero de vehculos que de un conjunto de datos segn marca y color. As mismo indica cul es la marca con el mayor hmero de vehculos, as como de cual color hay ms vehculos. Las marcas y los colores a tener en cuenta con sus respectivos cdigos son: Marca: 1 Renault, 2 Ford, 3 Mazda. Color: 1 Rojo, 2 Blanco, 3 Azul. Se crear un arreglo tabla[5][5] de tipo entero de cinco filas por cinco columnas. Por facilidad y entendimiento del problema y su solucin, no se tendr en cuenta los indices de la fila 0 y la columna 0. Se tendrn en cuenta los indices 1, 2, 3, 4 tanto para las filas como para las columnas. La siguiente tabla ilustra la distribucin de los elementos del arreglo tabla[5][5], en donde por ejemplo, tabla[1][3], es el nmero de vehculos marca Renault que tienen el color blanco:

Programacin Java bsica: Arreglos 7 - 95


Color Rojo Renault Ford Mazda tabla[1][1] tabla[2][1] tabla[3][1] Color Blanco tabla[1][2] tabla[2][2] tabla[3][2] tabla[4][2] Color Azul tabla[1][3] tabla[2][3] tabla[3][3] tabla[4][3] Total Vehiculos tabla[1][4] tabla[2][4] tabla[3][4] tabla[4][4]

Total Color tabla[4][1]

El siguiente listado es el programa tipo aplicacin escrito en Java, al cual hay que suministrarle los datos segn los vaya solicitando:
import javax.swing.*; import java.text.*; public class CuentaCarros2{ public static void main(String arg[]){ String entrada; int codigoMarca, codigoColor, n, contVehiculos=0; int tabla[][] = new int[5][5]; JTextArea areaDeSalida = new JTextArea(10,37); entrada=JOptionPane.showInputDialog("Digite el nmero de vehiculos a leer:"); n = Integer.parseInt(entrada); for(contVehiculos = 1; contVehiculos <=n;contVehiculos ++){ do{ entrada=JOptionPane.showInputDialog("Digite una marca de vehiculo:\n1 Renault\n2 Ford\n3 Mazda"); codigoMarca = Integer.parseInt(entrada);} while(!(codigoMarca>= 1 && codigoMarca <=3)); do{ entrada=JOptionPane.showInputDialog("Digite un color de vehiculo:\n1 Rojo\n2 Blanco\n3 Azul"); codigoColor = Integer.parseInt(entrada);} while(!(codigoColor>= 1 && codigoColor <=3)); tabla[codigoMarca][codigoColor]++; tabla[4][codigoColor]++; tabla[codigoMarca][4]++; tabla[4][4]++; } areaDeSalida.append(" \tDistribucion de vehiculos segun marca y color\n\n"+ "\tBlanco \tRojo \tAzul \t Total \n"+"Renault\t"+ tabla[1][1]+"\t"+tabla[1][2]+"\t"+tabla[1][3] +"\t"+tabla[1][4]+"\n"+ "Ford\t"+tabla[2][1]+"\t"+tabla[2][2]+"\t"+tabla[2][3] +"\t"+tabla[2][4]+"\n"+ "Mazda\t"+tabla[3][1]+"\t"+tabla[3][2]+"\t"+tabla[3]

Programacin Java bsica: Arreglos 7 - 96


[3]+"\t"+tabla[3][4]+"\n"+ "Total\t"+tabla[4][1]+"\t"+tabla[4][2]+"\t"+tabla[4] [3]+"\t"+tabla[4][4]+"\n"); JOptionPane.showMessageDialog(null,areaDeSalida, "Encuesta",JOptionPane.INFORMATION_MESSAGE); System.exit(0);} }

Un resultado de la ejecucin del programa con los datos suministrados para 20 vehculos cuyos datos son ledos de acuerdo a las siguientes entradas:

Figura 57 Lectura nmero de vehculos

Figura 58 Lectura de la marca de un vehculo

Programacin Java bsica: Arreglos 7 - 97

Figura 59 Lectura del color de un vehculo

Figura 60 Resultadosde la clase CuentaCarros2

Para el caso de un arreglo de tres dimensiones, de tamao 3x4x5, la siguiente forma lo declara y establece su tamao:
int TresDimensiones[][][]= new int[3][4][5];

Ejemplo 47: Desarrollar un programa tipo aplicacin en Java que permita leer dos matrices generales de tipo entero y efectuar su producto.
import javax.swing.*; class MultiplicaMatriz{ public static void main(String valores[]){ int c[][] = new int[10][10]; int a[][] = new int[10][10]; int b[][] = new int[10][10];

Programacin Java bsica: Arreglos 7 - 98


String entrada; int i, j ,k, filasA, columnasA, filasB, columnasB; JTextArea areaSalida = new JTextArea(20,30); do{ entrada= JOptionPane.showInputDialog("Digite el numero de filas de la matriz A "); filasA = Integer.parseInt(entrada); entrada= JOptionPane.showInputDialog("Digite el numero de columnas de la matriz A "); columnasA = Integer.parseInt(entrada); entrada= JOptionPane.showInputDialog("Digite el numero de filas de la matriz B "); filasB = Integer.parseInt(entrada); entrada= JOptionPane.showInputDialog("Digite el numero de columnas de la matriz B "); columnasB = Integer.parseInt(entrada);} while(columnasA != filasB); areaSalida.append("\n Datos matriz a \n"); for(i=1; i<=filasA; i++){ for(j=1; j<=columnasA; j++){ entrada= JOptionPane.showInputDialog("Digite el termino a["+i+"]["+j+"]= "); a[i][j]= Integer.parseInt(entrada); areaSalida.append(" " +a[i][j]+"\t"); }areaSalida.append("\n"); } areaSalida.append("\n Datos matriz b \n"); for(i=1; i<=filasB; i++){ for(j=1; j<=columnasB; j++){ entrada= JOptionPane.showInputDialog("Digite el termino b["+i+"]["+j+"]= "); b[i][j]= Integer.parseInt(entrada); areaSalida.append(" "+b[i][j]+"\t"); } areaSalida.append("\n");} areaSalida.append("\nResultado del producto \n"); for(i = 1; i<=filasA;i++){ for(j =1; j<=columnasB; j++){ c[i][j]=0; for (k=1; k<=columnasA; k++) c[i][j]=c[i][j]+ a[i][k]*b[k][j]; areaSalida.append(" "+c[i][j]+"\t"); }areaSalida.append("\n"); } JOptionPane.showMessageDialog(null,areaSalida, "Producto Matrices",JOptionPane.INFORMATION_MESSAGE); System.exit(0); } }

Programacin Java bsica: Arreglos 7 - 99 Al ejecutar el programa y suministrando los datos para dos matrices se obtienen los siguientes resultados:

Figura 61 Resultados de la clase MultiplicaMatriz

Recapitulacin
Se ha presentado el paso del modelo de objetos a la programacin en Java, indicando cmo el programa al ser un objeto, se forma en su estructura de las mismas partes de una clase. Se vio a travs de ejemplos cmo las relaciones de es-un, tiene-un y utiliza-un entre clases, se pueden convertir a cdigos en Java. Se presentaron los componentes de un programa en Java, se estableci la forma de definir identificadores, as como las normas de codificacin. Se definieron los tipos de datos primitivos y se establecieron sus caractersticas desde el punto de vista de su tamao y la forma de manipulacin de sus valores.

Programacin Java bsica: Recapitulacin 7 - 100 El tratamiento de arreglos tanto unidimensionales como bidimensionales se present acompaado de los respectivos ejemplos. Se presentaron los operadores aritmticos, lgicos, relacionales y de manejo de caracteres. Se ha presentado las instrucciones que le permiten controlar el flujo de la ejecucin de un programa en Java. Estas instrucciones le permiten programar la solucin de prcticamente cualquier problema en el computador.

Anda mungkin juga menyukai