programacion java basica

100
Programación Java básica 7 - 1 CAPITULO 7 Programación Java básica Objetivos Establecer cómo pasar del modelo de Objetos al lenguaje de programación. Identificar los componentes de un programa en Java. Representar en código Java las principales relaciones de asociación 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 arreglos unidimensionales y bidimensionales. Identificar, definir y caracterizar las instrucciones de control de flujo en Java. Aplicar las instrucciones selección y de ciclos o repeticiones en la solución de problemas. Aplicar las instrucciones de selección múltiple en la solución de problemas. Aplicar las instrucciones para manejo de saltos. Uso de los componentes JOPtionPane, ScrollPane y JTextArea para la entrada y salida.

Upload: juan-antonio-ramos-martin

Post on 20-Dec-2014

563 views

Category:

Education


1 download

DESCRIPTION

Programacion java basica

TRANSCRIPT

Page 1: Programacion java basica

Programación Java básica 7 - 1

CAPITULO 7

Programación Java básica

Objetivos •••• Establecer cómo pasar del modelo de Objetos al lenguaje de

programación.•••• Identificar los componentes de un programa en Java.•••• Representar en código Java las principales relaciones de

asociación 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 arreglos unidimensionales y

bidimensionales.•••• Identificar, definir y caracterizar las instrucciones de control de

flujo en Java.•••• Aplicar las instrucciones selección y de ciclos o repeticiones

en la solución de problemas.•••• Aplicar las instrucciones de selección múltiple en la solución

de problemas.•••• Aplicar las instrucciones para manejo de saltos.•••• Uso de los componentes JOPtionPane, ScrollPane y JTextArea

para la entrada y salida.

Page 2: Programacion java basica

Programación Java básica: Programación Java básica 7 - 2

IntroducciónEn los capítulos anteriores se han presentado ejemplos y ejercicios queinvolucran la utilización de variables que almacenan tipos específicos de datos,así como constantes y operadores para realizar operaciones tanto aritméticascomo relacionales.

Para tal efecto se han diseñado aplicaciones que le dan forma a las clasesasociadas con cada uno de los problemas a resolver. Aunque no se ha dado laestructura formal de las clases, tanto las aplicaciones como las applets ilustradasle dan al lector estudioso una idea de la estructura general que tienen estos tiposde 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 larealización de determinadas tareas, que involucran variables y operaciones arealizar entre estas. La manera como la información pueda ser almacenada enun campo o en una variable, está relacionada con el tipo de información quedicha variable almacena, para diferenciar una variable de otra en cuanto a lo quepuede almacenar se utiliza el término tipo de dato. Java como lenguaje deprogramación, maneja varios tipos de datos, que se pueden utilizar al declararvariables y arreglos o matrices, definir también el tipo de dato (valores) quepuede almacenar dicha variable, arreglo o matriz}.

En este capítulo se tratará en detalle el tema de los tipos de datos, así como susrangos(valores que puede tomar un dato un tipo dado) y operaciones para sumanipulación.

Dentro de los tipos de datos estructurados se encuentran los arreglos o vectoresque son conjuntos de elementos de un tipo dado a cada uno de los cuales sepuede acceder mediante un nombre y un indice que indica la posición delelemento dentro del arreglo. Los arreglos tanto unidimensionales comobidimensionales se tratarán, junto con algunas aplicaciones para lamanipulación este tipo de datos.

Se plantea una serie de ejercicios que el lector debe realizar a fin de desarrollarlas habilidades necesarias para incursionar con propiedad en el desarrollo deaplicaciones en Java.

Se utilizará componentes Swing para denotar la entrada/salida. En contraste conla entrada salida de datos vía linea de comandos,presentada en algunos ejemplosde los capítulos anteriores.

Page 3: Programacion java basica

Programación Java básica: Introducción 7 - 3

En ausencia de instrucciones de control del flujo en un programa, su ejecuciónse realiza en una sola dirección, de arriba a abajo, como está escrito el programaen lenguaje fuente.

En el desarrollo de algoritmos mediante el lenguaje algorítmico, se presentaronlas instrucciones para su control de flujo, fundamentalmente para selecciones,repeticiones y selecciones múltiples, las cuales hacen que el flujo se desvíe desu sentido natural de arriba-abajo.

En el lenguaje de programación, a las instrucciones que se encargan decontrolar el flujo de la ejecución de un programa se les denomina instruccionesde control. Este control se hace de la misma manera o similar, en todos loslenguajes de programación actuales.

Las instrucciones de control en Java corresponden a las mismas instruccionesde control definidas en el lenguaje algorítmico: selección, repetición o iteracióny de salto. Las instrucciones de selección permiten que el programa en suejecución seleccione distintos caminos en función del resultado de unaexpresión lógica o del estado de una variable. Las de repetición o iteraciónpermiten que el programa repita una serie de instrucciones hasta que se cumplauna condición dada. Las instrucciones de salto permiten que el flujo delprograma salte incondicionalmente a otro lugar del mismo.

Se presenta ademas en este capítulo las instrucciones de control en Java,acompañadas de sus definiciones sintácticas, así como de los ejemplosilustrativos según sea el caso, a fin de que el estudiante se familiarice con suutilización y pueda enfrentar la codificación de programas para resolverproblemas en el computador, utilizando el lenguaje Java.

A lo largo del capítulo se presenta un número considerable de ejemplosresueltos, que acompañados de las explicaciones del caso, le permiten al lectorresolver en Java de una manera práctica, virtualmente cualquiera de losproblemas presentados hasta ahora.

De la representación de objetos a JavaYa se ha indicado que, las clases representan generalizaciones de objetos concaracterísticas y comportamiento similares. Las clases se definen o especificancon un nombre, atributos y métodos. Los objetos como instancias de una clasellevan nombre, atributos y métodos.

Así, al modelar el dominio de un problema, se procede a identificar los objetosy su agrupación en clases, a su vez las clases se organizan jerárquicamente paraidentificar su estructura.

Page 4: Programacion java basica

Programación Java básica: De la representación de objetos a Java 7 - 4

El desarrollo de la estructura y el comportamiento de una clase a partir de lacual se crean los diferentes objetos a utilizar en la solución de un problema es eltrabajo de la programación orientada a objetos (POO), la cual implicaobviamente el desarrollo en el lenguaje de programación, de los diferentesalgoritmos que serán incluidos en cada uno de los métodos de las clases y queserán 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 apartir de la clase que lo representa cuando esta se ejecuta en un computador.Nótese que al ser compilado un programa en lenguaje fuente, se genera unarchivo .class con el nombre de la respectiva clase. El objeto de la clase deun programa compilado, se crea a partir de la ejecución de esa clase, lo cualhace que, cada vez que se ejecute el archivo .class se crea en la memoria delcomputador una instancia de esta clase, o sea un objeto. Los datos o mensajesque se suministren a este objeto en tiempo de ejecución, harán que éste arrojelos resultados esperados.

Para responder a la pregunta de cómo pasar de la representación de objetos a surepresentación como un programa en Java o sea como un objeto en Java, vamosa resolver la siguiente situación alrededor de un problema a resolver.

En el mundo de los objetos, “un problema” es un objeto. También puedesuceder que, un objeto, tenga un problema. En cualquier caso, la solución a eseproblema, no es otra cosa que un objeto también. Modelar una solución entérminos de uno o varios objetos y su ejecución mediante un lenguaje deprogramación orientado a objetos, es la línea conductora del desarrollo desistemas contemporáneo.

Se presentan a continuación unos ejemplos, que persiguen ilustrar de maneramuy general, la conversión del modelo de objetos de aplicaciones sencillas a suforma 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. Losvalores a radio y altura se leen por el teclado. El área y el volumen se escribenen la pantalla.

Suponemos en primer lugar que se han realizado los pasos de la Metodologíapara solución de problemas en el computador hasta el algoritmo y su pruebarespectiva. Para efectos de ilustración se presenta el algoritmo respectivo:

inicio/*variables de entrada, entero: radio, altura;variables de salida, real area, volumen.*/

Page 5: Programacion java basica

Programación Java básica: De la representación 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 enterosmayores 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 yvolúmen*/fin;

Aunque en un lenguaje procedimental, se puede codificar el algoritmodirectamente, convirtiendo las instrucciones casi que literalmente a lasinstrucciones correspondientes del lenguaje de programación, el trabajo bajoobjetos es algo diferente y la codificación del programa pasa por el diseño de lasolución en su representación de objetos.

En otros términos, la solución del problema anterior bajo el enfoque de objetos,significa que se debe diseñar un objeto que resuelva el problema propuesto.Como objeto debe tener nombre, atributos (que pueden ser también los objetosque tiene), así como los métodos correspondientes a su comportamiento.

La clase solución podrá tener como nombre AreaVolCilindro, comoatributos el radio, la altura, el área y el volumen. Se utilizará un sólo método,dentro del cual se llevarán a cabo los procesos de lectura, cálculos y generaciónde resultados. La clase puede tener, por ejemplo, la estructura según la clasedefinida en seguida:

El algoritmo desarrollado para el problema, pasa a ser el método de la clase, yaque los métodos son los que definen el comportamiento de estas. De estamanera, los métodos contienen lo que lo que los objetos realizan y es el lugar

Figura 1 Clase AreaVolCilindro

AreaVolCilindro

entero radio,altura;real area, volumen;

metodo1();

Page 6: Programacion java basica

Programación Java básica: De la representación de objetos a Java 7 - 6

donde se codificarán, con algunas modificaciones, los algoritmos que se handesarrollado para la solución a un problema en particular. Puede afirmarse que,la denominación de funciones, dada en algoritmos, corresponde a métodosdentro de un objeto.

Ejecutando la clase AreaVolCilindro, una vez se la haya compilado, sepodrá resolver el problema indicado. Veamos la codificación de la claseAreaVolCilindro 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 paquetejavax.swing. Esta clase es del paquete Swing que se utilizará en adelante enel texto para la lectura y generación de resultados.

Linea 2-15. es el cuerpo de la clase AreaVolCilindro, de acuerdo al diseñoestablecido antes.

Lineas 3-4: es la declaración de las variables o atributos de la claseAreaVolCilindro.

Lineas 5-14: es el cuerpo del método principal de la clase, cuyo nombre esmain(); es el único método de la clase.

Linea 6: es la declaración de dos variables de tipo String(cadena) paraalmacenar los caracteres leidos mediante el componente JoptionPane.

Linea 7: aquí se utiliza el método showInputDialog de la clase

Page 7: Programacion java basica

Programación Java básica: De la representación de objetos a Java 7 - 7

JoptionPane, para generar la siguiente salida en la pantalla, en la cual seilustra que se están digitando los caracteres 12 (uno y dos) para la base. Sedebe presionar OK una vez se digite el valor indicado.

Linea 8: se convierte la cadena leída a un valor entero, asignado al radiomediante Integer.parseInt(dato1). A partir de esta linea, en la variable radioqueda almacenado el valor numerico de tipo entero 12.

Lineas 9-10: hacen lo mismo que las anteriores, pero esta vez para la altura:

Lineas 11-12: calcula los valores para area y volumen.

Linea 13: genera los resultados en la pantalla utilizando el métodoshowMessageDialog, de la clase JoptionPane. Obsérvese cómo se haconstruido la salida de los resultados, combinando tanto títulos como valores delas variables a escribir.

Figura 2 Lectura de la base

Figura 3 Lectura de la altura

Page 8: Programacion java basica

Programación Java básica: De la representación de objetos a Java 7 - 8

Vemos cómo se ha desarrollado en Java una clase solución al problemaplanteado. Cada vez que se ejecute esa clase en un computador, se generará unobjeto solución para un problema en particular.

Problema No. 2: Desarrollar un programa en Java que permita calcular elvalor de la siguiente serie para sus N(N>0 y N< 20) primeros términos. Elvalor de N se deberá leer por el teclado y verificar que cumple la condiciónindicada. 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 respectivaprueba de escritorio, correspondiente a los pasos de la Metodología para laSolución de problemas en el Computador. Ahora la clase con la cual seresolverá el problema tendrá la siguiente estructura:

El nombre de la clase es SumaFactorial, tiene dos atributos de tipo entero:suma para el resultado y n para el número de términos de la serie; tiene unmétodo en este caso el método principal main(), que denota una aplicación oclase principal. Puede desde luego crearse una clase SumaFactorial que notenga un método principal, es decir que no sea una clase principal, sino que parasu uso se requiera de otra clase, esta si principal. El mecanismo de utilizaciónde los métodos de la clase SumaFactorial, podrá ser mediante la creación deun objeto del tipo SumaFactorial, o utilizando sus métodos haciendo

SumaFactorial

int suma, n;

void main();

Figura 4 Resultados del área y volumen

Page 9: Programacion java basica

Programación Java básica: De la representación de objetos a Java 7 - 9

referencia al nombre de la clase. La solución presentada aquí es como una claseprincipal.

Una forma sencilla de codificar la clase SumaFactorial en el cuerpo de unprograma tipo aplicación es ilustrada a continuación:

/*i variable indice del ciclosuma donde se lleva la sumatorian el valor del numero de terminosnumMas numero de signos + antes del signo -contSignos contador de signos + en cualquier momentofacto donde se lleva acumulado el factorial*/import javax.swing.JOptionPane; // importa classJOptionPanepublic 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 valorpara 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 método main() contiene el desarrollo en Java del algoritmorespectivo para el cálculo de la sumatoria solicitada y la entrada y salida devalores por medio del componente JoptionPane, como en el problema

Page 10: Programacion java basica

Programación Java básica: De la representación de objetos a Java 7 - 10

anterior.

Cuando se ejecuta el archivo .class correspondiente a la clase SumaFactorial,según el programa Java anterior, se crea un objeto el cual operará según losdatos que se suministren. Los resultados al ejecutar la clase se ilustran acontinuación:

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

Figura 5 Entrada de n

Figura 6 Resultados de SumaFactorial

SumaFactorial

int n;

int sumatoria();void main();

Page 11: Programacion java basica

Programación Java básica: De la representación de objetos a Java 7 - 11

Aquí se puede observar que la clase principal SumaFactorial tiene unatributo n, o sea el valor correspondiente al número de términos a calcular y dosmétodos: uno para el cálculo de la sumatoria llamado sumatoria(), el cualdevuelve o retorna un valor entero y el principal main(), para la lectura,llamado al método sumatoria() y escritura de resultados. A continuación sepresenta la codificación de la clase SumaFactorial:

1.import javax.swing.JOptionPane;// importa JOptionPane2. 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;12. if(numMas == contSignos){13. suma = suma - facto;14. numMas = numMas +1;15. contSignos = 0;}16. else {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. int resultado;26. do{27. entrada= JOptionPane.showInputDialog( "Digite un valor

para n:" );28. n= Integer.parseInt(entrada);}29. while(n<1 || n>19);30. resultado= sumatoria();31. JOptionPane.showMessageDialog(null, "La serie da: " +

resultado, "Resultados",JOptionPane.PLAIN_MESSAGE );32. }33. }

La ejecución de la clase anterior arrojará los mismos resultados que losobtenidos anteriormente. Se presenta a continuación algunas explicaciones alcódigo de la clase anterior:

Lineas 2-33: es el cuerpo de la clase SumaFactorial.

Page 12: Programacion java basica

Programación Java básica: De la representación de objetos a Java 7 - 12

Linea 3: declaración de la variable entera n como atributo de la clase.

Lineas 4-22: cuerpo del método sumatoria, donde se calcula la sumatoria delos n primeros términos de la serie. Obsérvese que este método no tieneparámetros ya que el valor de n al ser declarado como atributo de clase(también puede entenderse como una variable global), puede ser accedido desdeel interior del método. Así mismo este método retorna un valor entero, por esoel tipo del método es entero.

Línea 21:instrucción mediante la cual el método sumaserie() devuelve elvalor calculado, el cual es el resultado de la sumatoria y es un valor entero.

Líneas 23-32: cuerpo del método principal main().

Linea 30: llamado al método sumaserie() y almacenamiento del valordevuelto en la variable resultado.

Veamos a continuación una modificación de la versión anterior en donde se hadesarrollado la clase SumaFactorial1, con su atributo n, de tal manera quepueda ser usada por cualquier otra clase que se desarrolle, por ejemplo por laclase PruebaSumaFac, en donde se suministrará un valor para el atributo n yse llamará a la clase SumaFac mediante la creación de un objeto sumatoria. Laclase PruebaSumaFac usa a la clase SumaFac. Obsérvese que en la claseSumaFac, se tiene un método sumatoria, que es el encargado de hacer lasoperaciones del algoritmo del cálculo de la serie dada

Problema No. 4: Desarrollar un programa en Java que permita calcular elvalor de la serie indicada en el problema anterior, pero esta vez utilizando lasiguiente estructura de clases:

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

SumaFactorial

int n;

int sumatoria();

PruebaSumaFac

void main();

Page 13: Programacion java basica

Programación Java básica: De la representación de objetos a Java 7 - 13

un método para la sumatoria y un atributo como en el problema anterior. Portanto la utilización de la clase SumaFactorial se deberá hacer mediante sullamado dentro del cuerpo de otra clase, en este caso PruebaSumaFac que esuna clase principal pues contiene el método main(). Dicho en terminología deobjetos, “la clase PruebaSumaFac usa la clase SumaFactorial”, o sea que entreestas dos clase hay una relación de uso, en el sentido explicado antes.

En esta situación dentro del cuerpo de la clase PruebaSumaFac se deberá crearuna instancia u objeto del tipo SumaFactorial, con el cual se podrá invocar elmétodo sumatoria(), para el cálculo de la serie según el número de términosindicado.

A continuación el código fuente en Java tanto de la clase SumaFactoial comode la clase PruebaSumaFac que usa a la primera. Se debe compilar cada unapor separado y dejándo los archivos PruebaSumafac.class ySumaFactorial.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 cálculo del valor de lasumatoria se hace ahora mediante una clase sencilla, o no principal, que tieneun atributo de clase n y un método sumatoria(). Obsérvese que ya no existedentro de esta clase el método main().

Page 14: Programacion java basica

Programación Java básica: De la representación de objetos a Java 7 - 14

1.import javax.swing.JOptionPane; // importa classJOptionPane

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 métodosumatoria() de la clase SumaFactorial, mediante la creación de unainstancia u objeto de esta, llamado sumaSerie.

Linea 6: se crea un objeto llamado sumaSerie del tipo SumaFactorial,invocando un método constructor SumaFactorial() mediante la cláusulanew. En otros términos, crea una nueva instancia de SumaFactorial con elnombre sumaSerie.

Linea 11: le asigna a la variable o atributo n, del objeto sumaSerie, el valorleído y almacenado en numero.

Linea 12: invoca el método sumatoria() del objeto sumaSerie, paracalcular el valor de la serie. El resultado es almacenado en la variableresultado.

Los resultados obtenidos al ejecutar la clase PruebaSumaFac son los mismosque los obtenidos en las versiones anteriores. Debe anotarse que, la claseSumaFactorial en su última versión, podrá ser utilizada por cualquier otraclase para el cálculo de la serie indicada.

Con estos ejemplos se ilustra de manera general el proceso de pasar de larepresentación de objetos al lenguaje de programación Java.

Page 15: Programacion java basica

Programación Java básica: De la representación de objetos a Java 7 - 15

Componentes de un programa JavaEn los ejemplos presentados se ha visto que la estructura de un programa Javase forma a partir de una o más clases. Cada una de estas clases tienen susatributos y los métodos propios. En cada programa Java hay una clase principal,a partir de la cual se ejecuta éste.

Un programa se puede conformar de más de una clase, en cuyo caso las demásclases diferentes a la clase principal se deben compilar por separado yalmacenarse en el mismo directorio donde se ha compilado la clase principal.

Cada clase está formada por atributos, los cuales pueden ser variables de algúntipo u objetos, así como de métodos, los cuales están formados porinstrucciones tanto aritméticas, lógicas y relacionales, de instrucciones decontrol de flujo como son los ciclos y las repeticiones. Dentro del cuerpo de losmétodos se encuentran además las variables, que pueden ser de tipo entero,lógico, carácter, booleano, la invocación de métodos y objetos y el manejo defunciones.

Las relaciones entre clasesCada una de las relaciones entre objetos señaladas en la Unidad anterior,herencia, uso y composición, se pueden representar dentro del código de unprograma Java.

Codificación de la relación es-unLa relación es-un dada entre clases, es la relación de especialización de una enotra, es decir, aquella que implementa las relaciones de herencia. La forma máscomún de representar esta relación es mediante subclases de una clase. Porejemplo, si se tiene una clase AnimalMamifero, una subclase de ésta esCarnivoros. Dado que un Carnivoro es un AnimalMamifero, su codificaciónquedaría de la siguiente manera:

public class Carnívoro extends AnimalMamifero{.....}

Cualquier característica de tipo public, tanto atributos como métodos de la claseAnimalMamifero, es también una característica de Carnívoro, es decir la claseCarnívoro, hereda todas las carcterísticas públicas de AnimalMamifero. Solobastaría agregarle a Carnívoro las características propias, atributos y métodosque lo caracterizan, en este caso que lo especializan como animal carnívoro.

Page 16: Programacion java basica

Programación Java básica: De la representación de objetos a Java 7 - 16

Codificación de la relación tiene-unEsta relación se da por en la composición de un objeto a partir de otros, porejemplo, la mayoría de objetos en su habitación están formados por otrosobjetos. La LamparaDeMesaDeNoche, se compone del objeto bombillo, delobjeto portaLampara y otros. El perrito Lucas de su vecina, tiene un collar dedientes de Tiburón, etc

Sea por ejemplo la clase LamparaDeMesa, la cual tiene un bombillo, unsuiche y un porta lámpara, su codificación quedaría de la siguiente manera:

public class LamparaDeMesa {private Bombillo bombilloLampara;private Suiche interruptorLampara;

.....}

Indica que la clase LamparaDeMesa tiene un objeto bombilloLampara deltipo Bombillo y un objeto interruptorLampara de tipo Suiche.Obviamente puede contener más objetos.

Codificación de la relación utiliza-unaEn el desarrollo de una clase puede verse la necesidad de utilizar instanciasprovistas por otras clases, por ejemplo la clase Persona, requerirá de unainstancia RelojDespertador, a fin de fijar la hora para su alarma. En estecaso la siguiente codificación ilustra la relación Persona usa-unRelojDespertador:

public class Persona{RelojDespertador miRelojDespertador = new

RelojDespertador();miRelojDespertador.fijarHoraAlarma(laHora);....

}

En el código anterior se crea un objeto miRelojDespertador a partir de laclase relojDespertador, luego se usa el método fijarHoraAlarma(laHora), que está contenido dentro de la clase RelojDespertador, parafijar la hora de la alarma en laHora, valor suministrado como argumento deeste método.

Identificadores en JavaPor identificadores se entiende los nombres dados a variables, métodos, clases,paquetes e interfaces (que se definirán más adelante). Los identificadores no son

Page 17: Programacion java basica

Programación Java básica: De la representación de objetos a Java 7 - 17

cosas u objetos, justamente son la forma de llamar esas cosas u objetos. A lolargo del texto, a través de los diferentes ejercicios y ejemplos se ha manejadoidentificadores como System.out.println, String, args, variable1, grabadora,Ejemplo01 y otros.

Los identificadores, se pueden formar de letras, números, el símbolo _(subrayado) y el símbolo $. Los identificadores se deben iniciar con una letra,con el símbolo _ (subrayado) ó con el signo $. Cada variable u objeto toma unnombre o identificador con el cual se identifican en el programa, aplicación oapplet. Una buena práctica es asignar nombres significativos y mnemotécnicospara los identificadores, lo más cercanos a los significados que ellas tienen orepresentan en el dominio del problema.

Un nombre de variable no puede contener espacios, tampoco se puede iniciarcon un número. Los siguientes son nombre válidos de identificadores:

variablemiVariableMIVARIABLExi_mivariable$mivariable_9pinsandronautaOClaroEsta

Los siguientes son nombres inválidos de identificadores:

Mi Variable // Contiene espacio en blanco9pines // Inicia con un dígitoa+c // El signo + no es un carácter alfanuméricochequeo1-2-3 // El signo menos no es un carácteralfanuméricoO'Reilly // El apóstrofe no es un carácter alfanuméricoOReilly_&_Associates // El símbolo ampersand no esalfanumérico

Si se desea que un identificador se inicie con un número, anteponga el símbolo_ (subrayado) al nombre o identificador, por ejemplo, si se desea usar comoidentificador 8Ciclos, el nombre válido sería _8Ciclos.

Como norma de codificación en Java, se recomienda que cada palabra de lasque conforman el nombre de un identificador se inicie con una letra mayúsculay las demás letras con minúsculas. Para el caso de variables, métodos y objetos,la primera palabra se iniciará con minúscula, en el caso de las clases, el

Page 18: Programacion java basica

Programación Java básica: De la representación de objetos a Java 7 - 18

identificador se inicia con mayúscula , notación que se ha propuesto y utilizadoen los capítulos anteriores. Los siguientes ejemplos ilustran este sistema decodificación de identificadores:

pesoEspecifico // para una variablevolumenTotalLago// para el nombre de un métodoFiguraGeometrica // para denotar la clase FiguraGeometricacuadradoRojo // puede denotar un objeto

El espacio en blancoEl espacio en blanco corresponde al carácter que se produce cuando se presionala barra de espaciamiento en el teclado del computador y que se utiliza paraseparar palabras. Existen en Java otros cuatro espacios en blanco: la tabulaciónhorizontal (horizontal tab), la alimentación de formas (form feed), el retorno decarro o enter (carriage return) y la alimentación de una línea (line feed). Cuandose presiona la tecla de enter o de retorno, se produce la inserción de una línea oun retorno de carro, lo cual se refleja en el código fuente como una nueva línea.

Aparte del uso de espacios en blanco en las literales de caracteres (String), Javasin importar cuantos espacios se utilicen los toma como uno. Se usa tambiénpara separar operandos, símbolos, palabras. El número de espacios que utilicees solamente para una mejor presentación visual a quien lee el programa enlenguaje fuente.

Dentro del cuerpo de una literal tipo carácter de los caracteres mencionados queJava toma como un solo espacio en blanco, sólo se permite escribirdirectamente el carácter espacio en blanco. Retornos de carro, tabulaciones,lineas y formas de alimentación, pueden ser insertadas utilizando las secuenciasde escape:

Secuencia de escape Descripción\ddd Carácter octal (ddd)

\uxxxx Carácter UNICODE hexadecimal (xxxx)\' Comilla simple\” Comilla doble\\ Barra invertida\r Retorno de carro\n Nueva línea (salto a nueva línea)\f Alimentación de página (salto a nueva

página)

Page 19: Programacion java basica

Programación Java básica: De la representación de objetos a Java 7 - 19

Secuencia de escape Descripción\t Tabulación\b Retroceso

No se puede cortar una cadena (String) de carácteres a través de una línea,como por ejemplo en el siguiente caso:

String verso = “No llores por amor,alza la caraque no digan tus ojosque se te ha acabadola paz en el alma.”;

En lugar de esa construcción se debe utilizar la secuencia de escape \n y eloperador de concatenación de carácteres +, 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.”;

Obsérvese que, una instrucción sí se puede cortar a través de múltiples líneas,sin embargo una literal de carácteres (String) no es permitido.

Tipos de datosLos tipos de datos hacen referencia tanto al tipo de contenido, como a la formacomo es almacenado en la memoria del computador. Accesar al contenido de untipo de datos en particular se hace mediante nombres o identificadores.

Los tipos de datos disponibles en Java, también denominados primitivos, sonmuy similares a los tratados en el Capítulo 2, sobre Lenguaje Algorítmico yobviamente similares a la mayoría de los lenguajes de programación, como enel caso los lenguajes C y C++. Estos tipos de datos son: los lógicos (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), cabeanotar que en su implementación se encuentran algunas diferencias según ellenguaje de programación.

Veamos algunos aspectos generales sobre los tipos de datos, comparando C++ yJava:

Page 20: Programacion java basica

Programación Java básica: Tipos de datos 7 - 20

• En C y C++ la manipulación de tipos de datos es dependiente del compiladory la máquina, por ejemplo en el tamaño de los enteros. En Java se especificacada tipo de dato de manera independiente.

• Java previene acerca de la conversión arbitraria entre variables con tipos dedatos no similares. Únicamente se permite la conversión entre variables detipo numérico, así como la conversión entre superclases y subclases delmismo objeto.

• Todas las variables numéricas en Java tienen signo.

En Java cada variable, cada expresión, tienen un tipo de dato. Así mismo cadatipo está definido estrictamente. El compilador Java comprueba todas lasasignaciones, bien explícitas o mediante paso de parámetros en llamadas demétodos, todas las conversiones, expresiones y parámetros, para asegurar lacompatibilidad de los tipos de datos.

Dependiendo de la tarea a realizar, se requerirá definir clases, entendidas comoplantillas en Java, con las cuales se pueden crear instancias de objetos de laaplicación del mundo real. Como se vio antes, tanto aplicaciones como appletsse diseñan sobre la base de la estructura o jerarquía de clases, cuyos datosmiembros pueden ser a su vez clases, o tener la forma de instancias de clasesque 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 ClaseCamionDeCarga

Valores de atributos para elobjeto miCamion

marca Ford 7000fabricante Ford Motor Co.color Rojo ladrillonumeroMotor SF987005643capacidadMotor 7,000 ccplacaNumero NOC 890 numeroEjes 2dueño Federico Garcíacombustible Diesel

En esa lista se observa que fabricante, puede ser a su vez una clase ycontendría entonces la información sobre su dirección, nombre, teléfono,

Page 21: Programacion java basica

Programación Java básica: Tipos de datos 7 - 21

página web, métodos para vender, financiar, hacer mantenimiento y otros. Losdemás atributos hacen referencia a tipos simples que pueden contenerinformación numérica o alfanumérica.

Los atributos capacidadMotor y numeroEjes al hacer referencia a un valornumérico, deberán tener la forma de almacenamiento numérico sin decimal. Laidentificación mediante la placaNumero hace referencia a una cantidad de tipoalfa-numérico, entendida como una cadena de caracteres.

En el caso del objeto miCamion se encuentran tipos de datos que hacenreferencia a cantidades numéricas y de cadenas de caracteres, consideradas deltipo de dato simple, o tipo de datos primitivos.

Veamos ahora el caso de un objeto miRelojDespertador, el cual es unainstancia de la clase RelojDespertador, con entre otros, los siguientesatributos, y sus valores:

Atributos de la ClaseRelojDespertador

Valores de atributos para elobjeto miRelojDespertador

marca Ponycolor Azul Cieloserie Ax-12345tipoMaterial Metal-Plásticoprecio $5,000.00tipoFunciones Alarma nombreDueño UstedhoraActual 8:00 p.m.horaAlarmaActual 5:00 a.m.operacion De cuerda

Se puede identificar que entre sus atributos hay uno con información numéricacon decimales como es el caso del precio y de contenido alfabético como es elcolor y alfanumérico como la serie. Todos ellos son tipos de datosprimitivos, como se explica a continuación.

Tipos de Datos primitivos Java trae definidos los siguientes tipos de datos primitivos :

Page 22: Programacion java basica

Programación Java básica: 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 símbolos de un conjunto de caracteres como por ejemploletras, números y caracteres especiales: char.

• Para cantidades con valores lógicos, falso o verdadero: boolean.

EnterosLos enteros representan las cantidades que no tienen parte decimal ofraccionara. Gran parte del trabajo computacional se fundamenta en lamanipulación de cantidades enteras con signo, es decir que pueden tomarvalores positivos o negativos.

El tamaño, es una cantidad expresada en número de bits (dígitos binarios)asignados en la memoria del computador para almacenar un valor. Representael comportamiento para las variables y expresiones del respectivo tipo,haciendo referencia al rango de valores que se pueden almacenar en lasvariables de ese tipo.

Hay cuatro tipos de datos enteros, dependiendo de las necesidades de rangos dealmacenamiento por parte las variables a utilizar. La siguiente lista indica lostamaños en bits y rangos para los tipos de datos enteros:

Tipo de dato Tamaño en bits Rango de valores permitidolong 64 -9.223.372.036.954.775.808 a

9.223.372.036.854.775.807

int 32 -2.147.483.648 a 2.147.483.647

short 16 -32.768 a 32.767

byte 8 -128 a 127

La memoria del computador se mide en bytes u octetos de bits. Un dígitobinario o bit, puede almacenar un uno o un cero. Es decir que la máximacantidad entera almacenada en un bit es el entero 1. Si hay dos bits, el máximovalor es 11 binario que corresponde al decimal 3, si hay 7 bits el máximo valores 1111111 binario que corresponde al decimal 127. Como en Java una

Page 23: Programacion java basica

Programación Java básica: Tipos de datos 7 - 23

cantidad numérica tiene signo, para el caso de los enteros uno de los bits se dejapara el signo. De esta manera, la capacidad de almacenamiento de valoresenteros en 8 bits (de los cuales toma uno para el signo, el de la izquierda porejemplo) será uno para el signo y en los siete restantes 1111111 binario quecorresponde al decimal 127. Igual calculo se puede hacer para elalmacenamiento en tamaño de 16, 32 o 64 bits.

Declaración de variables enterasPara decidir si se debe crear una variable entera es necesario conocer el tamañomáximo y mínimo que se espera deba contener el dato representado por dichavariable 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 tablaanterior el tipo recomendado es el byte ya que su rango comprende los valoresdel contador a utilizar. Con la siguiente instrucción se declara una variablecontador con el tipo byte.

byte contador;

Los índices de arreglos, como por ejemplo el arreglo arg[] usado comoargumento en el método main(String arg[]) puede ser de tipo int , ya quesu rango difícilmente superaría los 128 elementos. Pero si se requiere un arreglocon mayor numero de indices, se utilizaría el tipo short.

Para el caso de tres variables cuyos valores están dentro del rango del tipo intsu declaración se puede hacer con

short numeroVehiculos, numeroEstudiantes, cantidadPedida;

Si se desea usar variables enteras de tamaño de 64 bits, o sea de tipo long lasiguiente declaración lo establece para las variables indicadas:

long variableLarga, otraLarga, unaGrandota;

Valores realesLos valores reales o de punto flotante se utilizan para cálculos que requieranmayor precisión, la cual se define como la cantidad de dígitos significativos quemaneja el computador exactamente para un tipo de datos dado. Por ejemplo, laraíz cuadrada y las funciones trigonométricas como el seno y el coseno. Estostipos de datos almacenan los bits mas significativos, o sea la mantisa, apartedel exponente. Todas las funciones matemáticas trascendentes como sin(),cos(), sqrt() devuelven valores de doble precisión.

Page 24: Programacion java basica

Programación Java básica: Tipos de datos 7 - 24

Como en el caso de los valores enteros, en los de coma flotante se presentan endos tamaños: float y double, que representan números de precisión simple yde precisión doble.

• float almacena sus valores en 32 bits y se denomina precisión sencilla, surango de valores es establecido de acuerdo a :

mínimo valor negativo -3.40282347 10+38

máximo valor negativo -1.40239846 10-45

mínimo valor positivo 1.40239846 10-45

máximo valor positivo 3.40282347 10+38

Los valores en precisión float o simple, requieren la mitad del espacio quela precisión doble, siendo más rápida, sin embargo es imprecisa cuando losvalores son muy grandes o muy pequeños. Las variables float son útilescuando no se requiere mucha precisión.

• double almacena sus valores en 64 bits y se denomina de precisión doble, surango de valores es establecido de acuerdo a:

mínimo valor negativo -1.7976931348623147 10+308máximo valor negativo -4.94065645841246544 10-324mínimo valor positivo 4.94065645841246544 10-324

máximo valor positivo 1.7976931348623147 10+308

Los valores en precisión double son muy útiles cuando se hacen cálculos connúmeros de gran valor o tras de muchos cálculos iterativos o repetitivos, porejemplo para el cálculo de convergencia de funciones. Las funcionesmatemáticas trascendentes, como sin(), cos() y sqrt() por ejemplo,devuelven valores del tipo double.

En ambos casos, float y double, una parte del tamaño en bits se toma para elsigno de la mantisa, otro para la mantisa, otro para el signo del exponente y otraparte para el exponente. Dando así los rangos de valores indicados. Nótese queaunque el rango cubierto es muy grande, la precisión se limita al número dedígitos significativos de cada tipo.

Declaración de variables realesEjemplo 1: En el siguiente programa se calcula el área de un círculo mediantela clase AreaCirculo.

Page 25: Programacion java basica

Programación Java básica: Tipos de datos 7 - 25

// calculo del area de un circuloimport javax.swing.JOptionPane; // importa class JOptionPaneclass 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:

Valores charEl tipo de datos para almacenar caracteres es el char. Java utiliza el códigoUnicode para representar caracteres. Este sistema define un conjunto decaracteres completamente internacional, que puede representar todos loscaracteres encontrados en todos los idiomas y lenguas. Es la unificación dedocenas de conjuntos de caracteres como latino, griego, arábigo y muchos mas.Para lograr esto el tipo de dato char utiliza 16 bits, por tanto el rango decaracteres es de 0 a 65.536 (1111111111111111 en binario). Tiene sentido lautilización del sistema unicode ya que Java esta diseñado apara permitir que losapplets se puedan utilizar en todo el mundo. Información sobre unicode estádisponible en

http://www.unicode.org y en http://www.stonehand.com/unicode.html

Declaración de variables charLos siguientes son algunos ejemplos de declaración de variables tipo char,

char ca1;

Figura 7 Salida de la clase AreaCirculo

Page 26: Programacion java basica

Programación Java básica: Tipos de datos 7 - 26

char ca2 = “carácter 2”; [] {????????}char ca3 = ´\n´;

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

// uso de variables charimport javax.swing.JOptionPane; // importa class JOptionPaneclass AgregaCaracteres{

public static void main(String args[]) {char parte1, parte2;parte1 = 88; // código que representa xparte2 = 'Y';JOptionPane.showMessageDialog(null, "parte1 y parte2:

"+parte1+" "+parte2,"Resultados",JOptionPane.PLAIN_MESSAGE);}

}

Se obtiene el siguiente resultado:

Valores BooleanosPor definición, los valores booleanos tienen un bit de almacenamiento, solopueden tomar uno de dos valores, true (verdadero) o false (falso). Este es eltipo que devuelven los operadores de comparación relacionales, como en laexpresión area1 < area2 , o el requerido en las expresiones condicionales quecontrolan el flujo como if , for , do, while. Una variable de este tipo, al sercreada toma como valor predeterminado false.

Declaración de variables booleanasEjemplo 3: En el siguiente programa se utilizan variables booleanas,

// Utilización de variables booleanasclass ChequeaBooleana{

Figura 8 Resultados clase AgregaCaracteres

Page 27: Programacion java basica

Programación Java básica: 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 selecciónif (vara){

System.out.println(“ Se ejecuta esta instrucción”);}

}}

Al ejecutarse el programa generara el siguiente resultado por la línea decomandos:

varb tiene el valor falsevarb tiene el valor trueSe ejecuta esta instrucción

Literales en JavaLiterales son código fuente de Java que significan justamente lo que ellas dicenen su asignación literalmente. Una literal es una constante, por ejemplo, “Soyuna Applet”, es una literal tipo String y significa que tiene almacenado elmensaje o cadena Soy una Applet. Para el compilador aunque tiene mas de uncarácter, representa una sola cosa: una literal tipo String. Así mismo 9.86aunque tiene mas de un dígito o carácter, es considerado como una literalnumérica. Cada tipo de datos permite la manipulación del mismo tipo deliterales según el tipo.

Literales de tipo enteroLos enteros son el tipo más utilizado en el trabajo en el computador, cualquiervalor numérico entero es un literal entero. Por ejemplo los valores, 1, 2, 45, 67,98, son valores literales enteros los cuales son valores decimales por cuantoestán en base 10, aunque hay otras bases como la octal en base 8 y lahexadecimal en base 16, con las cuales también se pueden definir literalesnuméricas enteras.

Los valores octales en Java van precedidos por un 0 (cero), por lo cual el valor06 representa una literal entera en base octal. El rango de los dígitos octales vandel 0 al 7.

La base hexadecimal es una base común para los números utilizados por los

Page 28: Programacion java basica

Programación Java básica: Tipos de datos 7 - 28

programadores que coincide con el tamaño de palabra en módulo 8, como elalmacenamiento en 8, 16, 32 o 64 bits visto antes. Una literal hexadecimal serepresenta con el prefijo 0X, seguido de los dígitos hexadecimales cuyo rangoes de 0 al 15, por lo que hay que utilizar las letras de la A a la F para representara los números decimales 10 al 15.

Los literales enteros crean por defecto un valor tipo int, que en Java tiene untamaño de 32 bits. Cuando se asigna un valor literal a una variable enterabyte o short, no se genera error alguno si el literal esta dentro del rango deltipo destino. Para las literales o constantes enteras a especificar como long esnecesario decirle de forma explícita al compilador que el valor literal es de tipolong, mediante la adición de la letra L (mayúscula o minúscula) al final de laliteral. Los siguientes son algunos ejemplos de asignación de constantes enterasa variables:

Constante1 = 9456748378L; // entero decimal en 64 bitsConstante2 = 0X6785ABL; // hexadecimal entero en 64 bitsConstante3 = 30567; // entero decimal en 32 bitsConstante4 = 067543; // entero octal en 32 bitsConstante5 = 0786545678L; // entero octal en 64 bits

Literales en coma flotante o de números reales Los valores literales de coma o punto flotante representan cantidadesdecimales con una componente fraccionaria, en notación estándar o sea la cifraentera seguida de un punto decimal y un conjunto de dígitos expresando la partefraccionaria, o en notación científica al expresar el número en notaciónestándar con un sólo dígito entero y adicionalmente con una componente queexpresa la potencia que debe elevarse el valor 10 como factor multiplicador delnúmero. El exponente se indica con E, o e, seguido de un número decimal consigno. Por ejemplo 2.345 en notación estándar y 2345 E-3 en notacióncientífica.

Las literales de coma flotante son almacenadas por defecto en doble precisión(double) o sea en 64 bits. Si se desea especificar una literal tipo float en 32bits, se le debe añadir a la constante una F, o f al final. Los siguientes sonalgunos ejemplos de literales de coma flotante:

Constante1 = 7.98768 E 23;Constante2 = 3.3657 E-21;Constante3 = 4.6543F;Constante4 = 56878.4328;

Page 29: Programacion java basica

Programación Java básica: Tipos de datos 7 - 29

Literales BooleanosUn valor booleano se expresa solamente con uno de los dos valores lógicos,true (verdadero) y false (falso). Los valores true y false, no sonequivalentes a representación o expresión numérica alguna, es decir noequivalen a 1 y 0 respectivamente como en C o C++ . Las siguientes sonasignaciones literales booleanos a dos variables, obviamente del tipo de datosbooleano.

Respuesta1 = true;Respuesta2 = false;

Literales CharEstas literales se almacenan en 16 bits sin signo, y corresponden a índices delconjunto de caracteres Unicode. Estos literales se pueden convertir a enteros yser manipulados con los operadores de los enteros. Un carácter literal tipochar se representa dentro de un par de comillas simples ( ´ ´ ). Loscaracteres visibles en ASCII se introducen directamente entre el par decomillas. Aquellos que no se los puede representar directamente se utilizansecuencias de escape, como por ejemplo ´\n´ , para el carácter cuyo función escrear una nueva línea, o ´\r´ para el retorno de carro. Las siguientes son algunassecuencias de escape:

\ddd carácter octal\uxxxx caracter UNICODE hexadecimal (xxxx)\´ comilla simple\´´ comilla doble\\barra invertida\rretorno de carro\nnueva linea\falimentar página\ttabulador\bretroceso

Literales String o de cadena de caracteresEste tipo de literales son similares a las usadas en todos los lenguajes deprogramación, cualquier cosa colocada “entre un par de comillas dobles”.Una literal String es una coleción de carácteres (letras, dígitos, signos depuntuación, etc.) que se escribe en una sola linea, ya que Java no tiene carácterde escape para indicar continuación de línea.

Cadena1= “Soy toda una cadena “;CadenaOtra = “ Soy otra cadena y que?”;

Page 30: Programacion java basica

Programación Java básica: Operadores en Java 7 - 30

Operadores en JavaUn operador es un símbolo que representa una operación que toma uno o masargumentos u operandos y opera sobre ellos a fin de generar un resultado.Típicamente los operadores en un programa están entre identificadores yliterales de tipo numérico. Algunos están antes del operando y se denominanprefijos, otros después y se denominan posfijos, algunos toman un solooperando y se denominan operadores unitarios unarios, los que requieren dosoperandos se denominan binarios.

Java brinda un conjunto de 44 operadores, los cuales son como instruccionesque le indican al compilador acerca de la realización de operaciones lógicas omatemáticas. Se agrupan en cuatro grupos: aritméticos, relacionales, lógicos ya nivel de bit.

Operadores aritméticosLos operadores aritméticos se utilizan para realizar operaciones matemáticas,exactamente como están definidas en el Álgebra. La siguiente tabla ilustra lalista de los operadores aritméticos:

Operador Resultado Operador Resultado+ adición += asignación aditiva- Substracción y

signo unitario-= asignación de

substracción* producto *= asignación de producto/ división /= asignación de división

% módulo %= asignación de módulo++ incremento -- decremento

Las cuatro operacionesLas operaciones aritméticas de suma, resta, multiplicación y división se llevan acabo en la forma convencional. El operador unitario - (menos), se utiliza paranegar el signo del operando al cual precede.

Ejemplo 4: El siguiente ejemplo ilustra las cuatro operaciones entre literales yvariables:

import javax.swing.JOptionPane;class CuatroOperaciones{

Page 31: Programacion java basica

Programación Java básica: 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:

Operador móduloEste operador permite calcular el residuo de una división tanto para tiposenteros o de coma flotante.

Ejemplo 5: El siguiente ejemplo ilustra la utilización del operador paraencontrar el resíduo de 53 modulo 10 y de 52.150 modulo 10.

import javax.swing.JOptionPane;

Figura 9 Resultados de la claseCuatroOperaciones

Page 32: Programacion java basica

Programación Java básica: 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:

Operadores aritméticos de asignaciónCada uno de los cuatro operadores aritméticos tiene una forma asociada la cualpermite realizar la operación y la asignación. Por ejemplo, para incrementar elvalor de la variables valor en cuatro unidades.

valor = valor + 4;

Operación valida en Java, sin embargo la forma siguiente arroja el mismoresultado mediante el operador de asignación respectivo de la suma:

valor += 4;

El significado de cada uno de los operadores de asignación se da acontinuación:

Figura 10 Resultados clase CalculoModulo

Page 33: Programacion java basica

Programación Java básica: Operadores en Java 7 - 33

Operador Descripción

= Es el operador de asignación sencilla; coloca el valor de laexpresión del lado derecho en la variable de la parte izquierda delsigno igual.

+= Adiciona el valor de la derecha a la variable de la izquierda yalmacena el resultado en esta variable.

–= Sustrae el valor de la derecha a la variable del lado izquierdo yalmacena el resultado en esta variable.

*= Multiplica la variable del lado izquierdo por el valor de la partederecha y almacena el resultado en esta variable.

/= Divide la variable de la izquierda por el valor de la derecha yalmacena el resultado en esta variable.

%= Obtiene el residuo de la división de la variable del lado izquierdo porel valor del lado derecho y almacena el resultado en la mismavariable.

Se presenta a continuación algunos ejemplos para estos operadores deasignación aritmética:

// incrementa valorTotal en 4 y guarda el resultado en //valorTotalvalorTotal += 4;

// le resta a valorTotal la cantidad 10 y guarda elresultado en //valorTotalvalorTotal -= 10;

//multiplica productoFinal por 10 y guarda el resultado en//productoFinalproductoFinal *= 10;

// divide partirProducto por 2 y guarda el resultado en// partirProductopartirProducto /= 2;

// obtiene el residuo de dividir residuoFinal por 10 yguarda el // resultado en residuoFinalresiduoFinal %= 10;

Operadores de incremento y decrementoPermiten adicionar o substraer de una manera simplificada la unidad a unavariable dada. La forma tradicional de realizar el incremento de una unidad es lasiguiente:

variable1 = variable1 + 1;// incrementa en la unidad a

Page 34: Programacion java basica

Programación Java básica: Operadores en Java 7 - 34

variable1variable2 = variable2 - 1; //decrementa en la unidad avariable2

Mediante los operadores aritméticos de asignación de incremento/decremento(+= y -=) se pueden escribir de la siguiente manera:

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

Java conserva la notación 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, opreceder al operando como en el siguiente caso:

variable1++;// incrementa en la unidad a variable1variable2--;//decrementa en la unidad a variable2

Cuando el operador antecede al operando, el operando es modificado antes deque el valor sea obtenido para su asignación a la variable del lado izquierdo, oen la expresión correspondiente. Cuando el operando antecede al operador, seobtiene primero el valor del operando sin modificación para la variable del ladoizquierdo, y luego si se incrementa el operando. Esa diferencia se ilustra en elsiguiente ejemplo

variable1= 65;variable2 =++variable1;

aquí variable1 toma el valor 66 y en variable2 el de 66. En el siguienteejemplo el operando antecede al operador y la variable2 toma el valor 65 y lavariable1 se incrementa a 66.

variable1= 65;variable2 =variable1++;

Ejemplo 6: El siguiente ejemplo ilustra la utilización del operador deincremento ++ para incrementar la variable controladora del ciclo derepeticiones i , en el primer caso y el operador -- para decrementarla en elsegundo caso.

Page 35: Programacion java basica

Programación Java básica: 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 crecientefor (int i = 0; i < 7; i++) {salida1 = salida1+"\nvalor de i = " + i;}JOptionPane.showMessageDialog(null,salida1);

// el siguiente segmento es decrecientefor (int i = 7; i > 0; i--) {salida2=salida2+"\nvalor de i = " + i;

}JOptionPane.showMessageDialog(null,salida2);}

}

Los siguientes son los resultados obtenidos:

Operadores RelacionalesLos operadores relacionales permiten establecer la relación de un operandorespecto de otro. Cualquier tipo de operandos, integer, float, char yboolean, pueden ser comparados mediante el operador de igualdad lógica ==y el de desigualdad lógica !=. Los operandos de tipo integer, float, char

Figura 12 Resultados de la claseContCreceDecrece

Figura 11 Resultados de la claseContCreceDecrece

Page 36: Programacion java basica

Programación Java básica: Operadores en Java 7 - 36

pueden ser usados para efectos de comparación mayor que o menor que. Elresultado de una operación relacional es de tipo booleano.

Los siguientes son los operadores relacionales, los cuales se utilizanfrecuentemente en las expresiones que controlan los diferentes tipos de ciclos,así como en las expresiones de selección.

Operador Descripción Operador Descripción

== Igual a. < Menor que.

!= No igual a. >= Mayor o igual que.

> Mayor que. <= Menor o igual que.

Ejemplo 7: Desarrollar un programa que permita leer cuatro valores, a, b, c, dy 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:

Page 37: Programacion java basica

Programación Java básica: Operadores en Java 7 - 37

Operadores lógicos booleanosFrecuentemente los operadores relacionales se utilizan en conjunto con otroconjunto de operadores, los operadores condicionales o lógicos booleanos.Estos operan solamente sobre operandos booleanos, dando como resultado unvalor booleano. Los siguientes son los operadores lógicos booleanos:

Operador Resultado Operador Resultado& AND lógico &= Asignación AND

| OR lógico |= Asignación OR

^ XOR lógico (ORexclusivo)

^= Asignación XOR

|| OR en corto circuito == Igual a

&& AND en corto circuito != Distinto de

! NOT unitario lógico ?= If-then-else ternario

Operadores lógicos booleanos básicosLos operadores lógicos booleanos básicos corresponden a AND (&), OR (|),XOR (^) y NOT (!). La siguiente tabla ilustra el resultado de la operación decada operandor para dos operandos A y B de tipo lógico. La primera fila indicalos nombres de los operandos, A y B, seguidos de las operaciones lógicas aevaluar. Los resultados de las operaciones, dependiendo de los valores quetomen A y B, se ilustran en las filas siguientes. El valor verdadero (true) serepresenta con V y el valor falso (false) con F:

Figura 13 Resultados de la claseOperacionesRelacionales

Page 38: Programacion java basica

Programación Java básica: Operadores en Java 7 - 38

A B A | B A & B A ^ B ! AF F F F F VV F V F V FF V V F V VV V V V F F

Ejemplo 8: Desarrollar un programa que permita generar las tablas de verdadpara diferentes operadores logicos booleanos:

1. import javax.swing.*;2. public class OperadoresLogicos {3. public static void main( String args[] ) {4. JTextArea areaSalida = new JTextArea( 17, 20 );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 ) +

Page 39: Programacion java basica

Programación Java básica: Operadores en Java 7 - 39

34. "\n !true: " + ( !true );35. areaSalida.setText( salida );36. JOptionPane.showMessageDialog( null, scroller,37. " Tablas de verdad",

JOptionPane.INFORMATION_MESSAGE );38. System.exit( 0 );39. }40.}

En este programa se construyen los resultados de evaluar las tablas de verdad,mediante la variable salida de tipo String. Obsérvese cómo se van agregandolos diferentes mensajes y resultados en las líneas 7, 12, 17, 22, 27 y 32, a fin deelaborar un reporte. El carácter de escape (\n) permite como en otros ejemplos,saltar a la siguiente línea. Veamos a continuación las explicaciones referidas alos nuevos elementos involucrados en el programa:

Línea 4: se crea un objeto areaSalida del tipo JtextArea que es una clasea partir de la cual se crean componentes para generar áreas de texto editable, esdecir, que se puede modificar en la pantalla. Al área de texto se le asigna 17columnas, por 20 filas medidas en caracteres.

Linea 5: se crea un objeto scroller del tipo JScrollPane, que es una clasea partir de la cual se crean componentes desplazables. Su desplazamiento es enel sentido horizontal ( en la parte inferior del área) y en el sentido vertical (en laparte derecha del área). Dentro de este componente se coloca como argumentoel componente areaSalida.

Linea 35: mediante el método setText() de la clase JtextArea, el objetoareaSalida carga los resultados guardados en salida.

Línea 36: se utiliza el método showMessageDialog del componenteJoptionPane para mostrar los resultados que se han cargado en elcomponente scroller.

Linea 38: para terminar la ejecución del programa se invoca el método 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 áreade texto pueda ser visualizada en su totalidad utilizando el ratón.

Page 40: Programacion java basica

Programación Java básica: Operadores en Java 7 - 40

Operadores lógicos booleanos en cortocircuitoSon los operadores && y || que corresponde a versiones secundarias de losoperadores básicos AND (&) y OR (|), y se les denomina operadores lógicos encortocircuito.

Como se puede observar en la tabla de operadores booleanos, si el operando Aes falso (F) el operador AND (&) dará como resultado falso (F), independientedel valor del operando B. De igual manera, el operador OR (|) dará comoresultado verdad (V) cuando A sea verdad (V) independiente del valor deloperando 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 expresión del ladoderecho cuando el resultado de la operación ya este decidido a partir deloperando o expresión del lado izquierdo. En algunos casos esto puede no serdeseable, refiérase a la discusión anterior sobre pre y post-incremento yoperadores de asignación.

Figura 14 Resultados de la claseOperadoresLogicos

Page 41: Programacion java basica

Programación Java básica: Operadores en Java 7 - 41

Operadores lógicos de asignaciónLos operadores &=, |= y ^=, permite hacer que la variable del lado izquierdotome el valor resultante de evaluar la expresión formada por esta variable con laexpresión del lado derecho del operador. La siguiente tabla lo ilustra:

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

Instrucciones de control de flujo: selecciónLa mayoría de los programas que usted realice requerirán que bajo ciertascondiciones se ejecuten unas instrucciones mientras se evitan ó saltan otras.Java permite este propósito mediante las instrucciones de selección (if - else) yde selección múltiple (switch).

Instrucción if - elseTal como se vio en el Capítulo 2, esta instrucción permite, con base a laevaluación de un predicado o condición de tipo lógico, direccionar el flujo dela ejecución de un programa hacia uno de dos caminos diferentes. La formageneral de esta instrucción en Java es como sigue:

if (expresión booleana) instrucción1;else instrucción2;

expresión booleana es cualquier expresión de tipo lógico, es decir que suresultado al ser evaluada da un valor lógico, true o false.

Instrucción1, instrucción2, puede ser una instrucción simple o un conjunto deinstrucciones, en cuyo caso se deben agrupar entre corchetes {} y formar unbloque de instrucciones, como en el siguiente caso:

if (expresión booleana) {instrucción11;instrucción12;....}

else {

Page 42: Programacion java basica

Programación Java básica: Instrucciones de control de flujo: selección 7 -42

instrucción21;instrucción22;...}

La instrucción opera de la siguiente manera: si expresión booleana toma elvalor true, se ejecutara la instrucción1 o el bloque de instrucciones encaso de haber más de una (instruccion11, instrucción12,..) y no seejecutará la instrucción2 o bloque de instrucciones en caso de haber más deuna (instruccion11, instrucción12,..). Si la expresión booleanatoma el valor false, no se ejecutara instrucción1 o el bloque si es mas deuna instrucción, y se ejecutará la instrucción2 o el bloque en caso de sermas de una instrucción. En ningún caso se ejecutarán ambas instrucciones.

La claúsula else es de carácter opcional, lo que significa que puede no utilizarse,en cuyo caso independiente de la ejecución o no de instrucción1, secontinuará con la siguiente instrucción después del if, como lo indica lasiguiente forma, tanto simple como en su forma con bloque de instrucciones:

if (expresión booleana) instrucción1;instrucción3;

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

if (expresión booleana){instrucción1;....}

instrucción3;

Los siguientes ejemplos que ilustran diferentes situaciones:

// ejemplo del if-else con instrucciones simplesint a, b, c;if(a > b)

c= a+b;else

c= a*b;

En el anterior segmento de código si a es mayor que b, hace c= a+b, de locontrario hace c= a*b.

En el siguiente caso se tiene la forma del if simple, puesto que independientede la ejecución de c=a+b, se continuará con la instrucción d=a*b.

Page 43: Programacion java basica

Programación Java básica: Instrucciones de control de flujo: selección 7 -43

// ejemplo del if simple con instrucciones simplesint a, b, c, d;if(a > b)

c= a+b;d= a*b;

En el siguiente ejemplo la segunda instrucción if contiene dos bloques coninstrucciones en lugar de una sola como en el primer caso. Así mismo seobserva que la expresión 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;}

Instrucciónes if anidadasEs muy común que en los programas sea necesario que la evaluación delpredicado de una instrucción if o if-else sea el destino de otra instrucción if oif-else, en cuyo caso se denominan if anidados. Cuando se utilizan if anidados,es importante tener en cuenta que, una cláusula else se refiere a la instrucción ifmas cercana que esté dentro del mismo bloque y que no tenga asociación conotro else. El siguiente segmento de programa ilustra esta situación:

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. else8. d= 90;9. }10.else11. b=c;

Page 44: Programacion java basica

Programación Java básica: Instrucciones de control de flujo: selección 7 -44

El cuerpo del primer if va entre la línea 2 y la línea 11. Si el predicado (i==20)es falso, no ejecutará las lineas de la 3 a la 9, y ejecutará la línea 11. Ejecutarálas líneas 3 a la 9, si el predicado es verdadero y no ejecutará la línea 11. Si elpredicado (j<i) en la linea 3 es verdadero, ejecutará la línea 4 y continuará conla línea 5. Si el predicado de la línea 3 es falso, no ejecutará la linea 4 ycontinuará con la línea 5. Si el predicado de la línea 5 es verdadero, ejecutará lalínea 6 y no hará la línea 8. Si este predicado es falso, no ejecutará la línea 6 yejecutará la línea 8.

Como se estableció antes, la línea 8, d=90 correspondiente al else de la linea 7,está asociado con el if(k>200), de la línea 5 ya que es el mas cercano y que seencuentra en el mismo bloque. El ultimo else de la línea 10, y la instrucción b=cen la línea 11 está asociado con el primer if(i==20), en la línea 2.

Instrucciónes if -else- if múltiplesLas instrucciones if -else- if múltiples constituyen también una práctica comúnen la programación y se fundamentan en la utilización de secuencias de ifanidados. La siguiente es la forma general de estas instrucciones:

if(expresión booleana1)instrucción1;else if(expresión booleana2) instrucción2;

else if(expresión booleana3) instrucción3;else instrucción4;

En esta forma las instrucciones if se ejecutan de arriba hacia abajo, hasta quealguna de las expresiones booleanas sea verdadera, en cuyo caso se ejecuta lainstrucción asociada y no se ejecuta ninguna de las siguientes. Ahora, sininguna de las expresiones booleanas es verdadera, se ejecutará la instrucciónasociada con el ultimo else. Recuerdese que, cada una de las instruccionespuede ser formada a su vez por bloques encerrados entre corchetes, y estos a suvez pueden contener otras instrucciones if como en la forma siguiente:

if(expresión booleana1){instrucción1;....}else if(expresión booleana2){

instrucción2;....}else if(expresión booleana3){

Page 45: Programacion java basica

Programación Java básica: Instrucciones de control de flujo: selección 7 -45

instrucción3;....}

else {instrucción4;....}

Ejemplo 9: Ilustra el caso de los if anidados para la situación de unaaplicación 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 quepertenece 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 utilización de expresiones booleanas compuestasen los dos else if para determinar el rango en donde se encuentra la edad. Laejecución de este programa arrojara el siguiente resultado:

Page 46: Programacion java basica

Programación Java básica: Instrucciones de control de flujo: selección 7 -46

Ejemplo 10: En el siguiente ejemplo se introduce un valor enterocorrespondiente al número de un mes (entre 1 y 12) y permite encontrar laestación 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 número

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="otoño";elseestacion="valor invalido de mes";

JOptionPane.showMessageDialog(null, "El mes "+mes+" es"+estacion);

}

Figura 15 Entrada de datos para la claseGrupoEdad

Figura 16 Resultados de la clase GrupoEdad

Page 47: Programacion java basica

Programación Java básica: Instrucciones de control de flujo: selección 7 -47

}

Los resultados del programa se ilustran a continuación:

Ejemplo 11: Desarrollar un programa que permita leer dos valores enteros ydeterminar 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 segundovalor 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 )

Figura 17 Lectura datos clase CalculaEstacion

Figura 18 Resultados clase CalculaEstacion

Page 48: Programacion java basica

Programación Java básica: Instrucciones de control de flujo: selección 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

Page 49: Programacion java basica

Programación Java básica: Instrucciones de control de flujo: selección 7 -49

Instrucción de selección múltiple switchEsta instrucción permite transferir el control a diferentes partes del programa,dentro de su cuerpo, dependiendo del valor de una variable o evaluación de unaexpresión. En el lenguaje algorítmico se estableció la instrucción caso paraeste tipo de situaciones.

La siguiente es la forma general de la instrucción switch :

switch(expresion) {case valor1:

instruccion1;break;case valor2:

instruccion2;break;...case valorN:

instruccionN;break;default:instruccionM;}

expresion es la expresión a evaluar cuyo valor resultante debe ser simple ycompatible con cada uno de los valores (valor1, valor2, ..valorN) enseguida de las clausulas case y que determina que instrucción (instruccion1, instruccion2, ..instruccionN) se debe ejecutar.Cada uno de los valores debe ser un literal, es decir debe ser una constante, nouna variable, ademas que deben ser valores únicos sin repeticiones oduplicados, entre los diferentes bloques case.

Figura 21 Resultados clase ComparaEnteros

Page 50: Programacion java basica

Programación Java básica: Instrucciones de control de flujo: selección 7 -50

La forma de la instrucción switch para el caso de bloques de instruccionesdentro de cada una de las opciones de las sentencias case es de la siguientemanera:

switch(expresion) {case valor1:{

instruccion1;....}

break;case valor2:{

instruccion2;....}

break;...case valorN:{

instruccionN;....}

break;default:{

instruccionM;....}

}

La instrucción switch opera de la siguiente manera: el resultado de evaluar laexpresion, se compara con cada uno de los valores indicados en cada una delas cláusulas case. Si coincide con alguno de los valores constantes (valor1,valor2, ..valorN) se ejecutará la instrucción ( o instrucciones)correspondiente a la cláusula case cuyo valor coincide y mediante lainstrucción break se interrumpe esa secuencia para darle el control ó saltar alas instrucciones o código que siguen despues de la instrucción switch . Sininguno de los valores corresponde con el resultado de la expresión entoncesse ejecutará por defecto la clausula default. Esta cláusula es opcional, sinembargo, si ningún valor coincide y no está la cláusula default , no se realizaninguna operación y el control se da a las instrucciones que siguen después dela instrucción switch.

Nótese que la instrucción break se utiliza aquí para “saltar fuera” del switch,a la primera línea de código o instrucción que sigue después de la instrucción

Page 51: Programacion java basica

Programación Java básica: Instrucciones de control de flujo: selección 7 -51

switch.

Una limitación importante de la instrucción switch en Java es que solo puedeseleccionar opciones del tipo byte, char, short, int y long. No sepuede utilizar en las opciones valores primitivos float, double, String,ni ningún otro tipo de objeto. Tampoco se pueden utilizar relaciones diferentesa la igualdad. Para las situaciones no contempladas en el switch, se debeutilizar entonces la instrucción if-else.

Ejemplo 12: El siguiente ejemplo para el calculo del valor a pagar por unacamisa dependiendo de su talla, ustra la utilización de la instrucción 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 latalla "+talla+" es $"+precio);

}}

La ejecución de este programa da como resultado:

Page 52: Programacion java basica

Programación Java básica: Instrucciones de control de flujo: selección 7 -52

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 quedaría 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:

Figura 22 Lectura datos clase ValorAPagar

Figura 23 Resultados clase ValorAPagar

Page 53: Programacion java basica

Programación Java básica: Instrucciones de control de flujo: selección 7 -53

precio=(float)34000.00;break;}

JOptionPane.showMessageDialog(null,"El precio de latalla "+talla+" es $"+precio);

}}

Como se puede observar se ha omitido la instrucción break en las opciones 34y 38, agrupándolas con la 36 y con la 40 respectivamente. El programa continúasu ejecución hasta que encuentre un break o hasta el final del bloque switch.El resultado para la ejecución de este programa es el siguiente:

Ejemplo 14: En el siguiente caso se utiliza la cláusula default para indicar queuna calificación no es aprobatoria:

import javax.swing.*;class ApruebaNoAprueba{

public static void main(String args[]) {String entrada,resultado;

Figura 24 Entrada datos clase ValorAPagar1

Figura 25 Resultados clase ValorAPagar1

Page 54: Programacion java basica

Programación Java básica: Instrucciones de control de flujo: selección 7 -54

int nota;do{

entrada=JOptionPane.showInputDialog("Digite unacalificacion 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 calificación es"+resultado);

System.exit(0);}

}

El programa al ser ejecutado dará la siguiente salida:

Figura 26 Lectura datos claseApruebaNoAprueba

Figura 27 Resultados claseApruebaNoAprueba

Page 55: Programacion java basica

Programación Java básica: Instrucciones de control de flujo: selección 7 -55

Ejemplo 15: El siguiente ejemplo corresponde al del calculo de la estación aque corresponde un mes determinado, solo que esta vez se utilizara lainstrucción switch, y se leerá el valor del mes por medio del componenteJoptionPane:

import javax.swing.JOptionPane;class CalculaEstacion2{

public static void main(String argumento[]) {String entrada, estacion;int mes;entrada=JOptionPane.showInputDialog("Digite el número

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 = "otoño";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

Page 56: Programacion java basica

Programación Java básica: Instrucciones de control de flujo: selección 7 -56

resultados:

Instrucciones switch anidadasDe igual manera que las instrucciones if-else anidadas, se pueden utilizar lasinstrucciones switch, como parte de un bloque de instrucciones de un switchexterno. Cada bloque switch define su propio bloque, con lo cual no seproducen conflictos entre las constantes o literales de las cláusulas case de cadainstrucción switch. Mas adelante se presentará un ejemplo de uso de lainstrucción switch anidada.

Instrucciones control de flujo: ciclos Java, como otros lenguajes de programación, tiene tres tipos de instruccionespara manejar ciclos, repeticiones o bucles: for, while y do-while. Tal como setrató en el Capítulo 2, Lenguaje Algorítmico, estas instrucciones ejecutanrepetidamente el mismo conjunto de instrucciones contenidas en su bloque,hasta que se cumpla una condición determinada, expresada por una expresiónde tipo booleano. Con frecuencia este tipo de instrucciones se utilizan

Figura 28Lectura datos clase CalculaEstacion2

Figura 29 Resultados claseCalculaEstacion2

Page 57: Programacion java basica

Programación Java básica: Instrucciones control de flujo: ciclos 7 - 57

asociadas con estructuras de datos del tipo arreglos, para realizar operacionessobre cada elemento de la estructura, por ejemplo en un problema demultiplicación de matrices.

La diferencia sustantiva de cada una de las anteriores instrucciones radica en lascaracterísticas de la forma de control del ciclo respectivo:

• Cuando se conoce de antemano el número de veces que se repetirá un ciclo,se utilizará preferencialmente la instrucción for.

• Si se requiere que el ciclo se repita al menos una vez es decir, primero serealiza la acción o instrucciones del bloque y luego se pregunta por lacondición, se puede utilizar do-while.

• Si se requiere de un ciclo el cual se ejecuta cero o mas veces, es decir,primero se evalúa la condición y dependiendo de esta se realiza o no elciclo, se puede utilizar while.

La estructura lógica de los ciclos o bucles está formada de cuatro partes:

• Inicialización: hace referencia al código que establece las condiciones deinicio del ciclo. Por ejemplo la variable que va a controlar el ciclo.

• Cuerpo: comprende el bloque de instrucciones que se desea repetir con elciclo y que es el propósito principal de este.

• Iteración: es el código que se ejecuta después del cuerpo pero antes de unnuevo ciclo o repetición. En este se incrementa la variable controladora delciclo.

• Terminación: Corresponde a una expresión de tipo booleano que es evaluadacada vez que se hace un ciclo, para verificar si este debe terminar ocontinuar. Se evalúa respecto de la variable controladora del ciclo.

Instrucción whileEs la instrucción básica para el manejo de los ciclos o iteraciones, ya quepermite ejecutar repetidamente una o mas instrucciones, mientras una condicióno predicado lógico de terminación sea verdadera. Lo cual significa que, evalúala condición antes de iniciar un ciclo, el cual puede no realizarse si la condiciónno es verdadera. Su forma general es la siguiente:

[inicialización;]while (condición de terminación) {

cuerpo;

Page 58: Programacion java basica

Programación Java básica: Instrucciones control de flujo: ciclos 7 - 58

[iteración;]}

Ejemplo 16: Desarrollar un programa que permita generar y escribir los 10primeros números 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 inicialización del ciclo, se le asigna a lavariable entero el valor 1. está variable forma parte de la condición determinación, en la línea 4, la cual al evaluarse la primera vez, da comoresultado true, es decir la variable entero es menor o igual a 10, por tantorealiza la primera iteración del cuerpo del ciclo, formado esta vez por lainstrucción System.out.println para generar la salida en la pantalla decomandos.

Linea 4- 9: cuerpo del ciclo, el cual es iniciado con la instrucción while y laprimer llave. Mientras la condición sea verdadera, se realizará la generación deuna línea en la pantalla con el valor de entero.

Línea 5: escribe los valores de la variable entero.

Línea 6: Después de escribir el valor entero generado la primera vez en la Línea3, se incrementa la variable entero mediante la expresión entero++, que esla parte de iteración del ciclo.

Se repite el proceso de evaluar la condición de terminación; al sernuevamente verdadera, se realiza una vez mas el ciclo generando la salida eiterando nuevamente. Así sucesivamente hasta que la condición determinación se torna falsa, lo cual se logra cuando se ha generado la salidacon System.out.println, del valor entero igual a 10, incrementando luegoen la iteración su valor a 11, el cual hace que la condición de

Page 59: Programacion java basica

Programación Java básica: Instrucciones control de flujo: ciclos 7 - 59

terminación tome el valor false, y no realizándose mas el ciclo del while.Se continúa con la siguiente instrucción en la línea 8, la cual genera un mensajede terminación e indica el valor final de la variable entero.

Obsérvese que, si el valor de la variable entero es mayor que 10 antes deiniciar el ciclo, este nunca se realiza, aunque escribirá el mensaje determinación, indicando el valor asignado a la variable.

Cuando se ejecuta el programa anterior da como resultado en la pantalla decomandos:

Numero = 1Numero = 2Numero = 3Numero = 4Numero = 5Numero = 6Numero = 7Numero = 8Numero = 9Numero = 10Ciclo terminado, valor de entero= 11

Ejemplo 17: Desarrollar un programa en Java que permita evaluar la funciónf x=x2­2 x entre los valores a y b (a < b) y a incrementos dx. Los

valores para a, b, dx, serán leídos por el teclado. Los valores de la evaluaciónde la función, así como los de la ordenada x, se escribirán 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 ");

Page 60: Programacion java basica

Programación Java básica: 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 darformato 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 desalida fx y x.

Linea 7: crea un objeto precision, del tipo DecimalFormat a partir delconstructor de esta o sea DecimalFormat(“0.00”), en el cual define quetendrá dos cifras decimales en la salida de resultados.

Linea 8: crea un objeto areaDeSalida del tipo JTextArea, a partir delconstructor JTextArea(10,20), el cual define un área de 10 columnas por 20filas. En esta área se guardarán los resultados.

Linea 9: crea un objeto scroller del tipo JScrollPane, a partir delconstructor JScrollPane(areaDeSalida), el cual contendrá el objetoareaDeSalida, de tal manera que se podrá hacer desplazamiento horizontal yvertical de la información mostrada.

Linea 10: mediante el componente JoptionPane, se introduce la informacionpara la cadena input.

Linea 11: se convierte la cadena leida input, la cual puede contener cifrasdecimales en un valor real de tipo Double, elc ual se almacena en a, mediante elmétodo parseDouble(input), de la clase Double.

Lineas12-15: se hace la misma operación para introducir y convertir a valoresreales los valores para b y dx.

Page 61: Programacion java basica

Programación Java básica: Instrucciones control de flujo: ciclos 7 - 61

Linea 16. se agrega, mediante el método append(), la primera línea de texto alobjeto areaDeSalida. Obsérvese la utilización del comando de escape \tpara hacer un tabulado, así como el del \n para saltar a una nueva línea.

Linea 17. asigna a la variable x el valor del punto inicial a. La variable x es laque controlará la ejecución del ciclo.

Linea 18: inicio del ciclo, el cual es controlado por el predicado o condición(a<=b), es decir que, mientras esa condición sea verdadera, se ejecutarán lasinstrucciones del cuerpo del ciclo while denotadas por el par de llaves {}.

Linea 19: cálculo del valor de fx mediante la evaluación de la expresión paraun valor de x.

Linea 20: agrega al objeto areaDeSalida, el texto correspondiente a losresultados de fx y x. Obsérvese el uso del método format() del objetoprecision, para darle formato de salida con dos decimales, a las variables fx yx.

Linea 21: se incrementa la variable x en el valor dx y se repite el ciclo si lacondición de la línea 18 sigue siendo verdadera.

Linea 23: se escriben los resultados del objeto scroller. Se coloca un título“Evalua Funcion f(x) = x*x – 2*x” en la parte superior de la ventana delcomponente JOptionPane y se utiliza la constanteINFORMATION_MESSAGE, para que aparezca un ícono alusivo ainformación.

Linea 24: se invoca el método exit(0), para terminar la ejecución delprograma.

Los resultados obtenidos al ejecutar el anterior programa, para los valores de a,b, dx dados son los siguientes:

Figura 30 Lectura valor a

Page 62: Programacion java basica

Programación Java básica: Instrucciones control de flujo: ciclos 7 - 62

Ejemplo 18 : Desarrollar un programa que permita leer 5 valores enteros ycalcular su promedio:

import javax.swing.JOptionPane;public class PromedioEnteros {

public static void main( String args[] ) {int total= 0, contador= 0, valorEntero,

Figura 31 Lectura valor b

Figura 32 Lectura valor dx

Figura 33 Resultados clase EvaluaFuncion

Page 63: Programacion java basica

Programación Java básica: Instrucciones control de flujo: ciclos 7 - 63

promedioEnteros;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 enterosson los siguientes:

Ejemplo 19: Desarrollar el problema anterior pero esta vez el ciclo se hacecon un registro centinela. Se debe escribir también el numero de valores leídos.

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 -9termina el programa" );

valorEntero =Integer.parseInt( entrada );while ( valorEntero != -9 ) {

total = total + valorEntero;

Figura 34 Resultados clase PromedioValores

Page 64: Programacion java basica

Programación Java básica: Instrucciones control de flujo: ciclos 7 - 64

contador = contador + 1;entrada = JOptionPane.showInputDialog(

"Digite un valor entero > 0: " );valorEntero = Integer.parseInt( entrada );

}promedioEnteros = total / contador;JOptionPane.showMessageDialog(

null, "El promedio de los "+contador+" valoresleidos 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:

Ejemplo 20: Desarrollar un programa Java tipo Applet que permita dibujar 15rectángulos.

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

Figura 35 Resultados clase PromedioEnteros1

Page 65: Programacion java basica

Programación Java básica: Instrucciones control de flujo: ciclos 7 - 65

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

Los resultados son los siguientes:

Instrucción do-whileEn esta instrucción de ciclo, la evaluación de la condición de terminación sehace al final del ciclo y no antes del ciclo como en la instrucción while vistaantes. Esto significa que, aunque la condición de terminación sea falsa, serealiza al menos una sola vez el ciclo. La forma general de esta instrucción es:

[inicializacion;]do {

cuerpo;[iteración;]

}while(condición de terminación);

inicialización, cuerpo, iteración y condición de terminación,tienen el mismo significado dado antes en la instrucción while.

El ejemplo visto antes de la generación de los 10 primeros números enteros ,ilustra en este caso, la utilización de la instrucción do-while .

Ejemplo 21:

1.class CicloDoWhile{

Figura 36 Resultados applet ContadorWhile1

Page 66: Programacion java basica

Programación Java básica: Instrucciones control de flujo: ciclos 7 - 66

2. public static void main(String args[]){3. int entero = 1;4. do{5. System.out.println(“Numero = “+entero);6. entero++;7. }while(entero<10);8. System.out.println(“Ciclo terminado, valor de entero=

“+entero);9. }10.}

En la línea 3 se inicializa la variable entero con el valor 1, a fin de quecontrole con sus incrementos sucesivos en la línea 6, la condición a evaluar alfinal de cada ciclo de la línea 7. La instrucción do-while va entre las lineas 4 y7. Una vez agotado el ciclo con la condición de la línea 7, se da control a lasiguiente instrucción después dl ciclo, System.out.println de la línea 8.Los resultados obtenidos son similares al ejemplo visto antes:

Numero = 1Numero = 2Numero = 3Numero = 4Numero = 5Numero = 6Numero = 7Numero = 8Numero = 9Numero = 10Ciclo terminado, valor de entero= 11

Como se puede observar, el control de terminación del ciclo se realiza una vezha hecho la iteración, con lo cual, aunque el valor de la variable en suinicialización fuera 15 por ejemplo, se realizará el primer ciclo, en cuyo caso sedará el siguiente resultado:

Numero = 15Ciclo terminado, valor de entero= 16

Ejemplo 22 : Desarrollar el mismo problema del ejemplo anterior, pero estavez utilizando la instrucción 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;

Page 67: Programacion java basica

Programación Java básica: 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:

Page 68: Programacion java basica

Programación Java básica: Instrucciones control de flujo: ciclos 7 - 68

Ejemplo 23: desarrollar un apllet que permita dibujar 15 rectángulos.

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:

Figura 37 Resultados clase EvaluaFuncion2

Page 69: Programacion java basica

Programación Java básica: Instrucciones control de flujo: ciclos 7 - 69

Instrucción forEsta instrucción presenta una forma compacta para realizar los ciclos, suutilización radica en que se conoce de antemano el número de veces que se deberealizar el ciclo, su forma general es la siguiente:

for (inicializacion; condicion de terminación; iteracion )cuerpo;

inicializacion;,condicion de terminación, iteracion,cuerpo, tienen el mismo significado dado antes. El mismo ejemplo tratado enlas dos instrucciones anteriores se presenta a continuación para ilustrar lainstrucción 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 instrucción for de la línea 3, contiene tanto laincialización de la variable, como la condición de terminación y el incremento odecremento de la variable controladora del ciclo. El cuerpo dl ciclo va entre laslíneas 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

Figura 38 Resultados applet ContadorDoWhile

Page 70: Programacion java basica

Programación Java básica: Instrucciones control de flujo: ciclos 7 - 70

la instrucción inmediatamente siguiente a la línea donde se encuentra lainstrucción for.

Los resultados obtenidos una vez se ejecute el programa son los siguientes:

Numero = 1Numero = 2Numero = 3Numero = 4Numero = 5Numero = 6Numero = 7Numero = 8Numero = 9Numero = 10Ciclo terminado, valor de entero= 11

Ejemplo 25: dibujar 15 rectángulos con la instrucción 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 código HTML para ejecutar el anetrior applet:

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

Los resultados son los siguientes:

Page 71: Programacion java basica

Programación Java básica: Instrucciones control de flujo: ciclos 7 - 71

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 39 Resultados applet ContadorFor1

Figura 40 Resultados calse SumaPares

Page 72: Programacion java basica

Programación Java básica: Instrucciones control de flujo: ciclos 7 - 72

Ejemplo 27: Desarrollar un programa Java que permita leer la informaciónde N (N>1) vehículos correspondiente a marcaVehiculo (marca del vehículo) ycolorVehiculo (color del vehículo) y calcular la distribución del número devehículos según marca y color. Escribir el total de vehículos según color y eltotal de vehículos según marca. Para la marca del vehículo se tienen lossiguientes códigos:

1 Renault, 2 Ford, 3 Mazda

Para el color del vehículo se tienen los siguientes códigos:

1 Rojo, 2 Blanco, 3 Azul

En este caso se utilizará el ciclo while para la repetición del ciclo de lectura devalores para cada vehículo y una instrucción switch anidada para llevar losacumulados según el color y la marca del vehículo leido. A continuación elprograma 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 número

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

Page 73: Programacion java basica

Programación Java básica: Instrucciones control de flujo: ciclos 7 - 73

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

Page 74: Programacion java basica

Programación Java básica: 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"+contRenault+"\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.}

Mas de una expresión en la inicialización e iteración del ciclo forAlgunas veces es necesario incluir mas de una expresión en las partes deinicialización e iteración de los ciclos for, como puede serejemplificado en la aplicación siguiente:

Figura 41 Resultados clase CuentaCarros

Page 75: Programacion java basica

Programación Java básica: Instrucciones control de flujo: ciclos 7 - 75

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

}}

Aquí se están usando dos variables val1 y val2 en la parte de inicialización,las cuales obviamente se modifican en la parte de iteración. La condición determinación del ciclo es controlada por los valores que toman val1 y val2.Terminándose el ciclo cuando las dos variables sean iguales. El resultadodespués de su ejecución es el siguiente:

Instrucciones para saltoJava dispone de cuatro formas para transferir control de un lugar a otro delprograma: break, continue, return y throw, que aunque no producen el desvíode flujo por sí mismas, se utilizan en conexión con instrucciones de control deflujo como en el caso de switch, ya vista antes, así como con el if-else, while,do-while y for. La instrucción return se tratará mas adelante en la unidad demétodos y la instrucción throw, que permite el manejo de excepciones setratará mas adelante en la unidad de manejo de excepciones, junto con las

Figura 42 Resultados clase MasDeUno

Page 76: Programacion java basica

Programación Java básica: Instrucciones para salto 7 - 76

instrucciones try, catch y finally.

breakYa se ha visto la utilización de break en la instrucción switch para interrumpirla acción del case y darle control a la siguiente instrucción después de switch.También se la puede utilizar para interrumpir el bloque de código de un ciclo ysalir de este, dándole control a la siguiente instrucción. La interrupción del cicloo bloque que se esté desarrollando puede hacerse mediante la instrucción breakcon etiqueta, a fin de darle el control a otra parte del programa denominado cones etiqueta. De esta manera la instrucción break tiene tres usos:

• Para terminar una secuencia de instrucciones en un switch, tal como se vióantes al tratar esta instrucción.

• Para salir desde el interior de un ciclo for, do-while o while, sin pasar por lacondición de terminación, y sin ejecutar el resto de instrucciones dentro delcuerpo del ciclo, continuando con la siguiente instrucción despues del ciclodonde se encuentre.

• Como una forma del tradicional goto de los viejos lenguajes deprogramación, al permitir saltar a otra parte del programa indicado con unaetiqueta.

Veamos su utilización 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:

Page 77: Programacion java basica

Programación Java básica: Instrucciones para salto 7 - 77

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 línea 4, la instrucción break, indica que saltefuera del ciclo for, a la instrucción inmediatamente siguiente. El programa dacomo resultado los siguientes valores:

Valor de i= 0Valor de i= 1Valor de i= 2Valor de i= 3Valor de i= 4Instrucción despues del ciclo

El mismo programa anterior pero utilizando en esta oportunidad la instruccióndo-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);

Figura 43 Resultados clase ChequeoBreak

Page 78: Programacion java basica

Programación Java básica: Instrucciones para salto 7 - 78

7. i++;8. }while(i <100);9. System.out.println(“Instruccion despues del

ciclo”);10. }11.}12.

Dando el mismo resultado que en el caso del ciclo for.

La instrucción 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. }

9. System.out.println();10. }11. System.out.println(“Ciclos terminados”);12. }13.}

El cual dara los siguientes resultados:

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

Obsérvese que, la instrucción break en el ciclo interior, actúa cuando el valorde i es igual a j, dándole el control a la instrucción siguiente al ciclo interno,System.out.println() y continuando con el ciclo externo, incrementandoel valor de i, y entrando nuevamente al ciclo interno, hasta que se cumplenuevamente la condición de igualdad de i con j, así sucesivamente hasta que seagota el ciclo externo con el valor de i igual a 5.

Page 79: Programacion java basica

Programación Java básica: Instrucciones para salto 7 - 79

La ultima forma de la instrucción break tiene que ver con su utilización comoequivalencia de un goto. Esta forma no es la mas aconsejable puesto que daríalugar a los denominados programas “espagettis”, dificultando su entendimientoy mantenimiento. Por ejemplo, para salir desde el ciclo mas interno de unconjunto de ciclos anidados, la forma del break con etiqueta es una alternativa,puesto que salta directamente al lugar del programa que se desea continuar suejecución. Obviamente esta práctica no es la mas aconsejable y debe restringirseal máximo. La forma general de la instrucción break con etiqueta es:

break etiqueta;

en donde etiqueta es el nombre de la etiqueta o identificador asociado con unbloque de código en otra parte del programa, que debe contener dentro de sucuerpo a la instrucción break con etiqueta. El control se transfiere entonces ala siguiente instrucción o bloque después del bloque que contiene la etiqueta.El bloque denominado con la etiqueta, se le asigna la etiqueta seguida de dospuntos, como se ilustra a continuación:

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

10. System.out.println();11. }12. System.out.println(“Ciclos terminados con break

aqui:”);13. }14.}

Al ejecutarse da los siguientes resultados:

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

Page 80: Programacion java basica

Programación Java básica: 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 claseChequeoBreakLabel

Page 81: Programacion java basica

Programación Java básica: Instrucciones para salto 7 - 81

Instrucción continueA diferencia de la instrucción break que interrumpe la ejecución de un ciclo, lainstrucción continue permite interrumpir la iteración actual, no continuandocon el resto del código del ciclo, pero continuando con la siguiente iteración delmismo ciclo. En los ciclos while y do-while, el control se transfiere desde lainstrucción continue hasta despues del cuerpo del ciclo, para verificar lacondición de terminación. Para el caso del ciclo for, el control setransfiere primero a la parte de iteración y luego a la condición determinación. En los tres casos, el código después de la instruccióncontinue no se ejecuta. El siguiente ejemplo ilustra la utilización de estainstrucción:

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 del1 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;

Page 82: Programacion java basica

Programación Java básica: Instrucciones para salto 7 - 82

salida += contador + " ";}

salida += "\nSe utiliza el CONTINUE para saltar losvalores 7 y 14";

JOptionPane.showMessageDialog( null, salida );System.exit( 0 );

}}

Los resultados son los siguientes:

La instrucción continue tambien se puede utilizar con etiqueta para transferir elcontrol 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);}

}

Figura 45 Resultados clase ChequeoContinue

Page 83: Programacion java basica

Programación Java básica: Instrucciones para salto 7 - 83

El resultado es el siguiente:

ArreglosEn Java como en los demás lenguajes de programación, se permite el manejo deconjuntos de datos del mismo tipo, a los cuales se hace referencia mediante unmismo nombre o identificador. Es el caso de los denominados vectores oarreglos de una dimensión, matrices o arreglos de dos dimensiones y los demúltiples dimensiones. Los arreglos son entonces agrupamientos de valores delmismo tipo de dato.

El nombre o identificador de los arreglos sigue las mismas reglas que para lasvariables sencillas, solo que se agrega un par de paréntesis [] para indicar quees un arreglo en su declaración de tipo.

Arreglos uni-dimensionalesSea 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 días de cada uno de los meses del año (para un año nobisiesto). Su definición en Java como arreglo se dará con la siguiente forma:

int diasDeMeses[];

Figura 46 Resultados de la claseChequeoContinueEtiqueta

Page 84: Programacion java basica

Programación Java básica: Arreglos 7 - 84

Como sucede con la declaración de otras variables, el valor asignado pordefecto al arreglo es cero. Sin embargo, para los arreglos existe un valorespecial que se le asigna cuando no se han asignado valores a sus elementos, esel valor null que representa que el arreglo no tiene valores aún asignados.

Estrictamente hablando, se ha creado un objeto tipo int con la expresiónanterior, de tal manera que, para darle valores, se debe utilizar en primer lugarel operador new, para asignar el tamaño del arreglo, en este caso debe tenerespacio para albergar los doce valores correspondiente a los doce meses del año.El tamaño 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 albergarlos días de los meses del año. Se pudo utilizar la siguiente expresión para definir lamisma operación:

int DiasDeMeses[] = new int[12];

En la siguiente clase se define el arreglo y se genera por la pantalla decomandos 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);

}}

Page 85: Programacion java basica

Programación Java básica: Arreglos 7 - 85

Al ejecutar este programa aparece en la pantalla:

Una forma más simple de guardar los valores en el arreglo DiasDeMeses[] esmediante 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);

}}

Obteniéndose en la pantalla los mismos resultados que el ejemplo anterior. EnJava, el tamaño del arreglo se debe especificar. Una referencia a una posiciónfuera de los limites indicados en la definición del tamaño generará un error entiempo de ejecución.

Ejemplo 40 : Desarrollar un programa que permita asignarle a un arregloentero 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;

Figura 47 Resultados clase DiasMeses

Page 86: Programacion java basica

Programación Java básica: Arreglos 7 - 86

salida += " n[ "+i+" ] = " + "\t" + n[ i ] +"\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 );}

}

Al ejecutar el programa se obtienen los siguientes resultados:

Ejemplo 41: Desarrolle un programa que permita leer N (n>0) elementos deun 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{

Figura 48 Resultados de la claseInicializaArreglo1

Page 87: Programacion java basica

Programación Java básica: 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

términos:");n = Integer.parseInt(entrada);}while(n<=1 || n>100);for(int i = 1; i <= n; i++){

entrada=JOptionPane.showInputDialog("Digite valorpara 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 siguientesvalores: 12, 13, 14, 15, 29, 21, 45, 34, 32, 61, 26:

Figura 49 Lectura numero de términos

Page 88: Programacion java basica

Programación Java básica: Arreglos 7 - 88

Ejemplo 42: Escriba un programa que permita calcular la frecuencia devalores 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

Figura 50 Lectura de valores del arreglo

Figura 51 Resultados de la clase SumaArreglo1

Page 89: Programacion java basica

Programación Java básica: 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 );}

}

Page 90: Programacion java basica

Programación Java básica: Arreglos 7 - 90

Ejemplo 43: Desarrollar un programa que dados los valores de un arreglounidimensional, permita dibujar el histograma correspondiente a los valoresdel 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";

Figura 52 Resultados clase FrecuenciaValores

Page 91: Programacion java basica

Programación Java básica: 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:

Arreglos bi-dimensionalesEn Java los arreglos de más de una dimensión, o multidimensionales, son enrealidad matrices de matrices. Para declarar una variable del tipo arreglomultidimensional, se requiere especificar cada índice adicional utilizando unapareja de corchetes [ ]. Por ejemplo, para definir un arreglo o matriz de dosdimensiones de tamaño 5x4, es decir de 5 filas por cuatro columnas, tendremosla siguiente codificación:

int MatBidi[][]= new int[3][4];

Figura 53 Resultados clase CalculaHistograma

Page 92: Programacion java basica

Programación Java básica: Arreglos 7 - 92

Con este código se establecen 3 por 4 posiciones que se asignan a la variableMarizBidimencional que es de tipo entero. Su representación es de lasiguiente manera:

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

Los índices del lado izquierdo representan las filas y los índices del ladoderecho representan las columnas del arreglo MatBidi[][] declarado en lainstrucción anterior. Obsérvese que los subindices empiezan desde [0][0], conlo cual debe tenerse cuidado al manejar los arreglos.

El siguiente ejemplo toma los elementos de una matriz de tamaño 3 por 3 ycalcula 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:

Page 93: Programacion java basica

Programación Java básica: Arreglos 7 - 93

Ahora el mismo programa anterior pero esta vez leyendo los valores para elarreglo.

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

término [ "+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 losvalores para el arreglo como en el caso siguiente para el elemento [2][1],

Figura 54 Resultados clase SumaArregloBi

Page 94: Programacion java basica

Programación Java básica: Arreglos 7 - 94

Se obtendrán los mismos resultados que en el caso anterior:

Ejemplo 46: El siguiente ejemplo corresponde a una aplicación que permitecalcular el numero de vehículos que de un conjunto de datos según marca ycolor. Así mismo indica cuál es la marca con el mayor húmero de vehículos,así como de cual color hay más vehículos.

Las marcas y los colores a tener en cuenta con sus respectivos códigos 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 cincocolumnas. Por facilidad y entendimiento del problema y su solución, no setendrá en cuenta los indices de la fila 0 y la columna 0. Se tendrán en cuenta losindices 1, 2, 3, 4 tanto para las filas como para las columnas.

La siguiente tabla ilustra la distribución de los elementos del arreglo tabla[5][5],en donde por ejemplo, tabla[1][3], es el número de vehículos marca Renault quetienen el color blanco:

Figura 55 Lectura de datos claseSumaArregloBi1

Figura 56 Resultados clase SumaArregloBi1

Page 95: Programacion java basica

Programación Java básica: Arreglos 7 - 95

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

El siguiente listado es el programa tipo aplicación escrito en Java, al cual hayque suministrarle los datos según 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 número de

vehiculos a leer:");n = Integer.parseInt(entrada);for(contVehiculos = 1; contVehiculos <=n;contVehiculos

++){do{

entrada=JOptionPane.showInputDialog("Digite una marcade vehiculo:\n1 Renault\n2 Ford\n3 Mazda");

codigoMarca = Integer.parseInt(entrada);}while(!(codigoMarca>= 1 && codigoMarca <=3));do{

entrada=JOptionPane.showInputDialog("Digite un colorde 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]

Page 96: Programacion java basica

Programación Java básica: 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 ejecución del programa con los datos suministrados para 20vehículos cuyos datos son leídos de acuerdo a las siguientes entradas:

Figura 57 Lectura número de vehículos

Figura 58 Lectura de la marca de un vehículo

Page 97: Programacion java basica

Programación Java básica: Arreglos 7 - 97

Para el caso de un arreglo de tres dimensiones, de tamaño 3x4x5, la siguienteforma lo declara y establece su tamaño:

int TresDimensiones[][][]= new int[3][4][5];

Ejemplo 47: Desarrollar un programa tipo aplicación en Java que permitaleer 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];

Figura 59 Lectura del color de un vehículo

Figura 60 Resultadosde la clase CuentaCarros2

Page 98: Programacion java basica

Programación Java básica: 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);

}}

Page 99: Programacion java basica

Programación Java básica: Arreglos 7 - 99

Al ejecutar el programa y suministrando los datos para dos matrices se obtienenlos siguientes resultados:

RecapitulaciónSe ha presentado el paso del modelo de objetos a la programación en Java,indicando cómo el programa al ser un objeto, se forma en su estructura de lasmismas partes de una clase. Se vio a través de ejemplos cómo las relaciones dees-un, tiene-un y utiliza-un entre clases, se pueden convertir a códigos en Java.

Se presentaron los componentes de un programa en Java, se estableció la formade definir identificadores, así como las normas de codificación. Se definieronlos tipos de datos primitivos y se establecieron sus características desde el puntode vista de su tamaño y la forma de manipulación de sus valores.

Figura 61 Resultados de la clase MultiplicaMatriz

Page 100: Programacion java basica

Programación Java básica: Recapitulación 7 - 100

El tratamiento de arreglos tanto unidimensionales como bidimensionales sepresentó acompañado de los respectivos ejemplos. Se presentaron losoperadores aritméticos, lógicos, relacionales y de manejo de caracteres.

Se ha presentado las instrucciones que le permiten controlar el flujo de laejecución de un programa en Java. Estas instrucciones le permiten programar lasolución de prácticamente cualquier problema en el computador.