0% encontró este documento útil (0 votos)
62 vistas100 páginas

Lectura 4

Este documento presenta los conceptos básicos de programación en Java, incluyendo tipos de datos, operadores, arreglos, instrucciones de control de flujo y componentes de entrada y salida. Explica cómo pasar del modelo de objetos al lenguaje Java y provee ejemplos de cómo representar problemas y soluciones como objetos en Java.

Cargado por

Lamedger
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
62 vistas100 páginas

Lectura 4

Este documento presenta los conceptos básicos de programación en Java, incluyendo tipos de datos, operadores, arreglos, instrucciones de control de flujo y componentes de entrada y salida. Explica cómo pasar del modelo de objetos al lenguaje Java y provee ejemplos de cómo representar problemas y soluciones como objetos en Java.

Cargado por

Lamedger
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 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.
Programación Java básica: Programación Java básica 7 - 2

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

Para tal efecto se han diseñado aplicaciones que le dan forma a las clases
asociadas con cada uno de los problemas a resolver. Aunque no se ha dado la
estructura formal de las clases, tanto las aplicaciones como las applets ilustradas
le dan al lector estudioso una idea de la estructura general que tienen estos tipos
de programas en Java.

Java es un lenguaje orientado a objetos, todo en Java se maneja como objetos.


En las interacciones de los objetos se precisa el intercambio de mensajes y la
realización de determinadas tareas, que involucran variables y operaciones a
realizar entre estas. La manera como la información pueda ser almacenada en
un campo o en una variable, está relacionada con el tipo de información que
dicha variable almacena, para diferenciar una variable de otra en cuanto a lo que
puede almacenar se utiliza el término tipo de dato. Java como lenguaje de
programación, maneja varios tipos de datos, que se pueden utilizar al declarar
variables y arreglos o matrices, definir también el tipo de dato (valores) que
puede almacenar dicha variable, arreglo o matriz}.

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

Dentro de los tipos de datos estructurados se encuentran los arreglos o vectores


que son conjuntos de elementos de un tipo dado a cada uno de los cuales se
puede acceder mediante un nombre y un indice que indica la posición del
elemento dentro del arreglo. Los arreglos tanto unidimensionales como
bidimensionales se tratarán, junto con algunas aplicaciones para la
manipulación este tipo de datos.

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

Se utilizará componentes Swing para denotar la entrada/salida. En contraste con


la entrada salida de datos vía linea de comandos,presentada en algunos ejemplos
de los capítulos anteriores.
Programación Java básica: Introducción 7 - 3

En ausencia de instrucciones de control del flujo en un programa, su ejecución


se realiza en una sola dirección, de arriba a abajo, como está escrito el programa
en lenguaje fuente.

En el desarrollo de algoritmos mediante el lenguaje algorítmico, se presentaron


las instrucciones para su control de flujo, fundamentalmente para selecciones,
repeticiones y selecciones múltiples, las cuales hacen que el flujo se desvíe de
su sentido natural de arriba-abajo.

En el lenguaje de programación, a las instrucciones que se encargan de


controlar el flujo de la ejecución de un programa se les denomina instrucciones
de control. Este control se hace de la misma manera o similar, en todos los
lenguajes de programación actuales.

Las instrucciones de control en Java corresponden a las mismas instrucciones


de control definidas en el lenguaje algorítmico: selección, repetición o iteración
y de salto. Las instrucciones de selección permiten que el programa en su
ejecución seleccione distintos caminos en función del resultado de una
expresión lógica o del estado de una variable. Las de repetición o iteración
permiten que el programa repita una serie de instrucciones hasta que se cumpla
una condición dada. Las instrucciones de salto permiten que el flujo del
programa 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 ejemplos
ilustrativos según sea el caso, a fin de que el estudiante se familiarice con su
utilización y pueda enfrentar la codificación de programas para resolver
problemas en el computador, utilizando el lenguaje Java.

A lo largo del capítulo se presenta un número considerable de ejemplos


resueltos, que acompañados de las explicaciones del caso, le permiten al lector
resolver en Java de una manera práctica, virtualmente cualquiera de los
problemas presentados hasta ahora.

De la representación de objetos a Java


Ya se ha indicado que, las clases representan generalizaciones de objetos con
características y comportamiento similares. Las clases se definen o especifican
con un nombre, atributos y métodos. Los objetos como instancias de una clase
llevan nombre, atributos y métodos.

Así, al modelar el dominio de un problema, se procede a identificar los objetos


y su agrupación en clases, a su vez las clases se organizan jerárquicamente para
identificar su estructura.
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 la


cual se crean los diferentes objetos a utilizar en la solución de un problema es el
trabajo de la programación orientada a objetos (POO), la cual implica
obviamente el desarrollo en el lenguaje de programación, de los diferentes
algoritmos que serán incluidos en cada uno de los métodos de las clases y que
será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 a
partir 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 un
archivo .class con el nombre de la respectiva clase. El objeto de la clase de
un programa compilado, se crea a partir de la ejecución de esa clase, lo cual
hace que, cada vez que se ejecute el archivo .class se crea en la memoria del
computador una instancia de esta clase, o sea un objeto. Los datos o mensajes
que se suministren a este objeto en tiempo de ejecución, harán que éste arroje
los resultados esperados.

Para responder a la pregunta de cómo pasar de la representación de objetos a su


representación como un programa en Java o sea como un objeto en Java, vamos
a resolver la siguiente situación alrededor de un problema a resolver.

En el mundo de los objetos, “un problema” es un objeto. También puede


suceder que, un objeto, tenga un problema. En cualquier caso, la solución a ese
problema, no es otra cosa que un objeto también. Modelar una solución en
términos de uno o varios objetos y su ejecución mediante un lenguaje de
programación orientado a objetos, es la línea conductora del desarrollo de
sistemas contemporáneo.

Se presentan a continuación unos ejemplos, que persiguen ilustrar de manera


muy general, la conversión del modelo de objetos de aplicaciones sencillas a su
forma codificada en lenguaje Java.

Problema No. 1: Desarrollar un programa en Java que permita calcular el


área y el volumen de un cilindro, dados el radio de la base y la altura. Los
valores a radio y altura se leen por el teclado. El área y el volumen se escriben
en la pantalla.

Suponemos en primer lugar que se han realizado los pasos de la Metodología


para solución de problemas en el computador hasta el algoritmo y su prueba
respectiva. Para efectos de ilustración se presenta el algoritmo respectivo:
inicio
/*variables de entrada, entero: radio, altura;
variables de salida, real area, volumen.*/
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 enteros
mayores que cero*/
volumen = 3.1416*radio*radio*altura;
area = 2*3.1416*radio*radio + 2*3.1416*radio*altura;
escriba(“El volumen del cilindro es “, volumen);
escriba(“El area del cilindro es “, area);
/* post: se ha calcula y escrito los valores de area y
volúmen*/
fin;

Aunque en un lenguaje procedimental, se puede codificar el algoritmo


directamente, convirtiendo las instrucciones casi que literalmente a las
instrucciones correspondientes del lenguaje de programación, el trabajo bajo
objetos es algo diferente y la codificación del programa pasa por el diseño de la
solució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 objetos
que tiene), así como los métodos correspondientes a su comportamiento.

La clase solución podrá tener como nombre AreaVolCilindro, como


atributos 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ón
de resultados. La clase puede tener, por ejemplo, la estructura según la clase
definida en seguida:

AreaVolCilindro

entero radio,altura;
real area, volumen;

metodo1();

Figura 1 Clase AreaVolCilindro

El algoritmo desarrollado para el problema, pasa a ser el método de la clase, ya


que los métodos son los que definen el comportamiento de estas. De esta
manera, los métodos contienen lo que lo que los objetos realizan y es el lugar
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 han


desarrollado para la solución a un problema en particular. Puede afirmarse que,
la denominación de funciones, dada en algoritmos, corresponde a métodos
dentro de un objeto.

Ejecutando la clase AreaVolCilindro, una vez se la haya compilado, se


podrá resolver el problema indicado. Veamos la codificación de la clase
AreaVolCilindro en lenguaje Java:

1.import javax.swing.JOptionPane;
2.public class AreaVolCilindro{
3.static int radio, altura;
4.static float area, volumen;
5. public static void main(String args[]){
6. String dato1, dato2;
7. dato1 = JOptionPane.showInputDialog("Digite valor
radio de la base:");
8. radio = Integer.parseInt(dato1);
9. dato2 = JOptionPane.showInputDialog("Digite valor
altura:");
10. altura = Integer.parseInt(dato2);
11. area = (float)((2*3.1416*radio)*altura +
2*3.1416*radio*radio);
12. volumen = (float)(3.1416*radio*radio)*altura;
13. JOptionPane.showMessageDialog(null, "El area es =
"+ area +"\nEl volumen es = "+volumen );
14. }
15. }

Linea 1: indica que se está importando la clase JoptionPane del paquete


javax.swing. Esta clase es del paquete Swing que se utilizará en adelante en
el texto para la lectura y generación de resultados.

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


establecido antes.

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


AreaVolCilindro.

Lineas 5-14: es el cuerpo del método principal de la clase, cuyo nombre es


main(); es el único método de la clase.

Linea 6: es la declaración de dos variables de tipo String(cadena) para


almacenar los caracteres leidos mediante el componente JoptionPane.

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


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 se


ilustra que se están digitando los caracteres 12 (uno y dos) para la base. Se
debe presionar OK una vez se digite el valor indicado.

Figura 2 Lectura de la base

Linea 8: se convierte la cadena leída a un valor entero, asignado al radio


mediante Integer.parseInt(dato1). A partir de esta linea, en la variable radio
queda almacenado el valor numerico de tipo entero 12.

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

Figura 3 Lectura de la altura

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

Linea 13: genera los resultados en la pantalla utilizando el método


showMessageDialog, de la clase JoptionPane. Obsérvese cómo se ha
construido la salida de los resultados, combinando tanto títulos como valores de
las variables a escribir.
Programación Java básica: De la representación de objetos a Java 7 - 8

Figura 4 Resultados del área y volumen

Vemos cómo se ha desarrollado en Java una clase solución al problema


planteado. Cada vez que se ejecute esa clase en un computador, se generará un
objeto solución para un problema en particular.

Problema No. 2: Desarrollar un programa en Java que permita calcular el


valor de la siguiente serie para sus N(N>0 y N< 20) primeros términos. El
valor de N se deberá leer por el teclado y verificar que cumple la condición
indicada. El resultado se debe mostrar por la pantalla.

S = 1 - 2! + 3! +4! - 5! + 6! + 7! ...

Se supone nuevamente que se ha desarrollado el algoritmo y su respectiva


prueba de escritorio, correspondiente a los pasos de la Metodología para la
Solución de problemas en el Computador. Ahora la clase con la cual se
resolverá el problema tendrá la siguiente estructura:

SumaFactorial

int suma, n;

void main();

El nombre de la clase es SumaFactorial, tiene dos atributos de tipo entero:


suma para el resultado y n para el número de términos de la serie; tiene un
método en este caso el método principal main(), que denota una aplicación o
clase principal. Puede desde luego crearse una clase SumaFactorial que no
tenga un método principal, es decir que no sea una clase principal, sino que para
su uso se requiera de otra clase, esta si principal. El mecanismo de utilización
de los métodos de la clase SumaFactorial, podrá ser mediante la creación de
un objeto del tipo SumaFactorial, o utilizando sus métodos haciendo
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 clase


principal.

Una forma sencilla de codificar la clase SumaFactorial en el cuerpo de un


programa tipo aplicación es ilustrada a continuación:
/*
i variable indice del ciclo
suma donde se lleva la sumatoria
n el valor del numero de terminos
numMas numero de signos + antes del signo -
contSignos contador de signos + en cualquier momento
facto donde se lleva acumulado el factorial
*/
import javax.swing.JOptionPane; // importa class
JOptionPane
public class SumaFactorial{
static int suma, n;
public static void main(String dato[]){
int numMas, contSignos, facto;
String entrada;
suma = 0;
numMas = 1;
contSignos =0;
do{
entrada= JOptionPane.showInputDialog("Digite un valor
para n:”);
n= Integer.parseInt(entrada);}
while(n<1 || n >19)
facto = 1;
for (i = 1; i<= n; i++){
facto=facto*i;
if(numMas == contSignos){
suma = suma - facto;
numMas = numMas +1;
contSignos = 0;}
else{
suma = suma + facto;
contSignos = contSignos +1;}
}
JOptionPane.showMessageDialog(null, "La serie da: " +
suma, "Resultados", JOptionPane.PLAIN_MESSAGE );
}
}

Para este caso, el método main() contiene el desarrollo en Java del algoritmo
respectivo para el cálculo de la sumatoria solicitada y la entrada y salida de
valores por medio del componente JoptionPane, como en el problema
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 los
datos que se suministren. Los resultados al ejecutar la clase se ilustran a
continuación:

Figura 5 Entrada de n

Figura 6 Resultados de SumaFactorial

Problema No.3: Desarrollar un programa en Java que permita calcular el


valor de la serie indicada en el problema anterior, pero esta vez utilizando
una clase con la siguiente estructura:

SumaFactorial

int n;

int sumatoria();
void main();
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 un


atributo n, o sea el valor correspondiente al número de términos a calcular y dos
métodos: uno para el cálculo de la sumatoria llamado sumatoria(), el cual
devuelve o retorna un valor entero y el principal main(), para la lectura,
llamado al método sumatoria() y escritura de resultados. A continuación se
presenta la codificación de la clase SumaFactorial:
1.import javax.swing.JOptionPane;// importa JOptionPane
2. public class SumaFactorial{
3. static int n;
4. static int sumatoria() {
5. int i, facto;
6. int suma = 0;
7. int numMas = 1;
8. int contSignos = 0;
9. facto = 1;
10. for (i = 1; i<= n; i++){
11. facto=facto*i;
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 los


obtenidos anteriormente. Se presenta a continuación algunas explicaciones al
código de la clase anterior:

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


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 de


los n primeros términos de la serie. Obsérvese que este método no tiene
pará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 desde
el interior del método. Así mismo este método retorna un valor entero, por eso
el tipo del método es entero.

Línea 21:instrucción mediante la cual el método sumaserie() devuelve el


valor 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 valor


devuelto en la variable resultado.

Veamos a continuación una modificación de la versión anterior en donde se ha


desarrollado la clase SumaFactorial1, con su atributo n, de tal manera que
pueda ser usada por cualquier otra clase que se desarrolle, por ejemplo por la
clase PruebaSumaFac, en donde se suministrará un valor para el atributo n y
se llamará a la clase SumaFac mediante la creación de un objeto sumatoria. La
clase PruebaSumaFac usa a la clase SumaFac. Obsérvese que en la clase
SumaFac, se tiene un método sumatoria, que es el encargado de hacer las
operaciones del algoritmo del cálculo de la serie dada

Problema No. 4: Desarrollar un programa en Java que permita calcular el


valor de la serie indicada en el problema anterior, pero esta vez utilizando la
siguiente estructura de clases:

PruebaSumaFac SumaFactorial

int n;

void main(); int sumatoria();

En este diagrama se está indicando que la clase SumaFactorial ahora no será


una clase principal, pues no contiene el método main(), sin embargo contiene
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. Por


tanto la utilización de la clase SumaFactorial se deberá hacer mediante su
llamado dentro del cuerpo de otra clase, en este caso PruebaSumaFac que es
una clase principal pues contiene el método main(). Dicho en terminología de
objetos, “la clase PruebaSumaFac usa la clase SumaFactorial”, o sea que entre
estas 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á crear


una instancia u objeto del tipo SumaFactorial, con el cual se podrá invocar el
método sumatoria(), para el cálculo de la serie según el número de términos
indicado.

A continuación el código fuente en Java tanto de la clase SumaFactoial como


de la clase PruebaSumaFac que usa a la primera. Se debe compilar cada una
por separado y dejándo los archivos PruebaSumafac.class y
SumaFactorial.class en el mismo directorio.

1.public class SumaFactorial{


2. static int n;
3. int sumatoria() {
4. int i, facto;
5. int suma = 0;
6. int numMas = 1;
7. int contSignos = 0;
8. facto = 1;
9. for (i = 1; i<= n; i++){
10. facto=facto*i;
11. if(numMas == contSignos){
12. suma = suma - facto;
13. numMas = numMas +1;
14. contSignos = 0;}
15. else {
16. suma = suma + facto;
17. contSignos = contSignos +1;
18. }
19. }
20. return suma;
21. }
22.}

Lineas 1-22: cuerpo de la clase SumaFactorial. El cálculo del valor de la


sumatoria se hace ahora mediante una clase sencilla, o no principal, que tiene
un atributo de clase n y un método sumatoria(). Obsérvese que ya no existe
dentro de esta clase el método main().
Programación Java básica: De la representación de objetos a Java 7 - 14

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


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

14. }
15. }

Lineas 1-15: cuerpo de la clase principal PruebaSumaFac que usa el método


sumatoria() de la clase SumaFactorial, mediante la creación de una
instancia 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áusula
new. En otros términos, crea una nueva instancia de SumaFactorial con el
nombre sumaSerie.

Linea 11: le asigna a la variable o atributo n, del objeto sumaSerie, el valor


leído y almacenado en numero.

Linea 12: invoca el método sumatoria() del objeto sumaSerie, para


calcular el valor de la serie. El resultado es almacenado en la variable
resultado.

Los resultados obtenidos al ejecutar la clase PruebaSumaFac son los mismos


que los obtenidos en las versiones anteriores. Debe anotarse que, la clase
SumaFactorial en su última versión, podrá ser utilizada por cualquier otra
clase para el cálculo de la serie indicada.

Con estos ejemplos se ilustra de manera general el proceso de pasar de la


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

Componentes de un programa Java


En los ejemplos presentados se ha visto que la estructura de un programa Java
se forma a partir de una o más clases. Cada una de estas clases tienen sus
atributos 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ás
clases diferentes a la clase principal se deben compilar por separado y
almacenarse en el mismo directorio donde se ha compilado la clase principal.

Cada clase está formada por atributos, los cuales pueden ser variables de algún
tipo u objetos, así como de métodos, los cuales están formados por
instrucciones tanto aritméticas, lógicas y relacionales, de instrucciones de
control de flujo como son los ciclos y las repeticiones. Dentro del cuerpo de los
mé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 de
funciones.

Las relaciones entre clases


Cada 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 un
programa Java.

Codificación de la relación es-un


La relación es-un dada entre clases, es la relación de especialización de una en
otra, es decir, aquella que implementa las relaciones de herencia. La forma más
común de representar esta relación es mediante subclases de una clase. Por
ejemplo, si se tiene una clase AnimalMamifero, una subclase de ésta es
Carnivoros. Dado que un Carnivoro es un AnimalMamifero, su codificación
quedaría de la siguiente manera:
public class Carnívoro extends AnimalMamifero{
.....
}

Cualquier característica de tipo public, tanto atributos como métodos de la clase


AnimalMamifero, es también una característica de Carnívoro, es decir la clase
Carnívoro, hereda todas las carcterísticas públicas de AnimalMamifero. Solo
bastaría agregarle a Carnívoro las características propias, atributos y métodos
que lo caracterizan, en este caso que lo especializan como animal carnívoro.
Programación Java básica: De la representación de objetos a Java 7 - 16

Codificación de la relación tiene-un


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

Sea por ejemplo la clase LamparaDeMesa, la cual tiene un bombillo, un


suiche 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 del


tipo Bombillo y un objeto interruptorLampara de tipo Suiche.
Obviamente puede contener más objetos.

Codificación de la relación utiliza-una


En el desarrollo de una clase puede verse la necesidad de utilizar instancias
provistas por otras clases, por ejemplo la clase Persona, requerirá de una
instancia RelojDespertador, a fin de fijar la hora para su alarma. En este
caso la siguiente codificación ilustra la relación Persona usa-un
RelojDespertador:

public class Persona{


RelojDespertador miRelojDespertador = new
RelojDespertador();
miRelojDespertador.fijarHoraAlarma(laHora);
....
}

En el código anterior se crea un objeto miRelojDespertador a partir de la


clase relojDespertador, luego se usa el método fijarHoraAlarma
(laHora), que está contenido dentro de la clase RelojDespertador, para
fijar la hora de la alarma en laHora, valor suministrado como argumento de
este método.

Identificadores en Java
Por 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
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 lo


largo del texto, a través de los diferentes ejercicios y ejemplos se ha manejado
identificadores como System.out.println, String, args, variable1, grabadora,
Ejemplo01 y otros.

Los identificadores, se pueden formar de letras, 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 un
nombre o identificador con el cual se identifican en el programa, aplicación o
applet. Una buena práctica es asignar nombres significativos y mnemotécnicos
para los identificadores, lo más cercanos a los significados que ellas tienen o
representan en el dominio del problema.

Un nombre de variable no puede contener espacios, tampoco se puede iniciar


con un número. Los siguientes son nombre válidos de identificadores:
variable
miVariable
MIVARIABLE
x
i
_mivariable
$mivariable
_9pins
andronauta
OClaroEsta

Los siguientes son nombres inválidos de identificadores:


Mi Variable // Contiene espacio en blanco
9pines // Inicia con un dígito
a+c // El signo + no es un carácter alfanumérico
chequeo1-2-3 // El signo menos no es un carácter
alfanumérico
O'Reilly // El apóstrofe no es un carácter alfanumérico
OReilly_&_Associates // El símbolo ampersand no es
alfanumé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 como
identificador 8Ciclos, el nombre válido sería _8Ciclos.

Como norma de codificación en Java, se recomienda que cada palabra de las


que conforman el nombre de un identificador se inicie con una letra mayúscula
y 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
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 utilizado


en los capítulos anteriores. Los siguientes ejemplos ilustran este sistema de
codificación de identificadores:
pesoEspecifico // para una variable
volumenTotalLago// para el nombre de un método
FiguraGeometrica // para denotar la clase FiguraGeometrica
cuadradoRojo // puede denotar un objeto

El espacio en blanco
El espacio en blanco corresponde al carácter que se produce cuando se presiona
la barra de espaciamiento en el teclado del computador y que se utiliza para
separar palabras. Existen en Java otros cuatro espacios en blanco: la tabulación
horizontal (horizontal tab), la alimentación de formas (form feed), el retorno de
carro o enter (carriage return) y la alimentación de una línea (line feed). Cuando
se presiona la tecla de enter o de retorno, se produce la inserción de una línea o
un 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), Java
sin importar cuantos espacios se utilicen los toma como uno. Se usa también
para separar operandos, símbolos, palabras. El número de espacios que utilice
es solamente para una mejor presentación visual a quien lee el programa en
lenguaje fuente.

Dentro del cuerpo de una literal tipo carácter de los caracteres mencionados que
Java toma como un solo espacio en blanco, sólo se permite escribir
directamente el carácter espacio en blanco. Retornos de carro, tabulaciones,
lineas y formas de alimentación, pueden ser insertadas utilizando las secuencias
de 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)
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 cara
que no digan tus ojos
que se te ha acabado
la paz en el alma.”;

En lugar de esa construcción se debe utilizar la secuencia de escape \n y el


operador 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 datos
Los tipos de datos hacen referencia tanto al tipo de contenido, como a la forma
como es almacenado en la memoria del computador. Accesar al contenido de un
tipo de datos en particular se hace mediante nombres o identificadores.

Los tipos de datos disponibles en Java, también denominados primitivos, son


muy similares a los tratados en el Capítulo 2, sobre Lenguaje Algorítmico y
obviamente similares a la mayoría de los lenguajes de programación, como en
el 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), cabe
anotar que en su implementación se encuentran algunas diferencias según el
lenguaje de programación.

Veamos algunos aspectos generales sobre los tipos de datos, comparando C++ y
Java:
Programación Java básica: Tipos de datos 7 - 20

• En C y C++ la manipulación de tipos de datos es dependiente del compilador


y la máquina, por ejemplo en el tamaño de los enteros. En Java se especifica
cada tipo de dato de manera independiente.

• Java previene acerca de la conversión arbitraria entre variables con tipos de


datos no similares. Únicamente se permite la conversión entre variables de
tipo numérico, así como la conversión entre superclases y subclases del
mismo objeto.

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

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

Dependiendo de la tarea a realizar, se requerirá definir clases, entendidas como


plantillas en Java, con las cuales se pueden crear instancias de objetos de la
aplicación del mundo real. Como se vio antes, tanto aplicaciones como applets
se diseñan sobre la base de la estructura o jerarquía de clases, cuyos datos
miembros pueden ser a su vez clases, o tener la forma de instancias de clases
que vienen incorporadas en el lenguaje Java.

Sea el caso de una clase denominada CamionDeCarga que puede contener,


entre otros, los siguientes tipos de datos miembros o atributos:

Atributos de la Clase Valores de atributos para el


CamionDeCarga objeto miCamion
marca Ford 7000
fabricante Ford Motor Co.
color Rojo ladrillo
numeroMotor SF987005643
capacidadMotor 7,000 cc
placaNumero NOC 890
numeroEjes 2
dueño Federico García
combustible Diesel

En esa lista se observa que fabricante, puede ser a su vez una clase y
contendría entonces la información sobre su dirección, nombre, teléfono,
Programación Java básica: Tipos de datos 7 - 21

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

Los atributos capacidadMotor y numeroEjes al hacer referencia a un valor


numérico, deberán tener la forma de almacenamiento numérico sin decimal. La
identificación mediante la placaNumero hace referencia a una cantidad de tipo
alfa-numérico, entendida como una cadena de caracteres.

En el caso del objeto miCamion se encuentran tipos de datos que hacen


referencia a cantidades numéricas y de cadenas de caracteres, consideradas del
tipo de dato simple, o tipo de datos primitivos.

Veamos ahora el caso de un objeto miRelojDespertador, el cual es una


instancia de la clase RelojDespertador, con entre otros, los siguientes
atributos, y sus valores:

Atributos de la Clase Valores de atributos para el


RelojDespertador objeto miRelojDespertador
marca Pony
color Azul Cielo
serie Ax-12345
tipoMaterial Metal-Plástico
precio $5,000.00
tipoFunciones Alarma
nombreDueño Usted
horaActual 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érica
con decimales como es el caso del precio y de contenido alfabético como es el
color y alfanumérico como la serie. Todos ellos son tipos de datos
primitivos, como se explica a continuación.

Tipos de Datos primitivos


Java trae definidos los siguientes tipos de datos primitivos :
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 ejemplo


letras, números y caracteres especiales: char.

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

Enteros
Los enteros representan las cantidades que no tienen parte decimal o
fraccionara. Gran parte del trabajo computacional se fundamenta en la
manipulación de cantidades enteras con signo, es decir que pueden tomar
valores 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. Representa
el comportamiento para las variables y expresiones del respectivo tipo,
haciendo referencia al rango de valores que se pueden almacenar en las
variables de ese tipo.

Hay cuatro tipos de datos enteros, dependiendo de las necesidades de rangos de


almacenamiento por parte las variables a utilizar. La siguiente lista indica los
tamaños en bits y rangos para los tipos de datos enteros:

Tipo de dato Tamaño en bits Rango de valores permitido


long 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ígito


binario o bit, puede almacenar un uno o un cero. Es decir que la máxima
cantidad entera almacenada en un bit es el entero 1. Si hay dos bits, el máximo
valor es 11 binario que corresponde al decimal 3, si hay 7 bits el máximo valor
es 1111111 binario que corresponde al decimal 127. Como en Java una
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 deja
para el signo. De esta manera, la capacidad de almacenamiento de valores
enteros en 8 bits (de los cuales toma uno para el signo, el de la izquierda por
ejemplo) será uno para el signo y en los siete restantes 1111111 binario que
corresponde al decimal 127. Igual calculo se puede hacer para el
almacenamiento en tamaño de 16, 32 o 64 bits.

Declaración de variables enteras


Para decidir si se debe crear una variable entera es necesario conocer el tamaño
máximo y mínimo que se espera deba contener el dato representado por dicha
variable y asignarle un nombre con el cual se haga referencia.

Si se desea un contador que tome valores entre 1 y 100, de acuerdo a la tabla


anterior el tipo recomendado es el byte ya que su rango comprende los valores
del contador a utilizar. Con la siguiente instrucción se declara una variable
contador con el tipo byte.

byte contador;

Los índices de arreglos, como por ejemplo el arreglo arg[] usado como
argumento en el método main(String arg[]) puede ser de tipo int , ya que
su rango difícilmente superaría los 128 elementos. Pero si se requiere un arreglo
con 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 int
su 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 la


siguiente declaración lo establece para las variables indicadas:
long variableLarga, otraLarga, unaGrandota;

Valores reales
Los valores reales o de punto flotante se utilizan para cálculos que requieran
mayor precisión, la cual se define como la cantidad de dígitos significativos que
maneja el computador exactamente para un tipo de datos dado. Por ejemplo, la
raíz cuadrada y las funciones trigonométricas como el seno y el coseno. Estos
tipos de datos almacenan los bits mas significativos, o sea la mantisa, aparte
del exponente. Todas las funciones matemáticas trascendentes como sin(),
cos(), sqrt() devuelven valores de doble precisión.
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 en


dos tamaños: float y double, que representan números de precisión simple y
de precisión doble.

• float almacena sus valores en 32 bits y se denomina precisión sencilla, su


rango 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 que
la precisión doble, siendo más rápida, sin embargo es imprecisa cuando los
valores son muy grandes o muy pequeños. Las variables float son útiles
cuando no se requiere mucha precisión.

• double almacena sus valores en 64 bits y se denomina de precisión doble, su


rango de valores es establecido de acuerdo a:

mínimo valor negativo -1.7976931348623147 10+308


máximo valor negativo -4.94065645841246544 10-324
mí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 con
números de gran valor o tras de muchos cálculos iterativos o repetitivos, por
ejemplo para el cálculo de convergencia de funciones. Las funciones
matemá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 el
signo de la mantisa, otro para la mantisa, otro para el signo del exponente y otra
parte para el exponente. Dando así los rangos de valores indicados. Nótese que
aunque el rango cubierto es muy grande, la precisión se limita al número de
dígitos significativos de cada tipo.

Declaración de variables reales


Ejemplo 1: En el siguiente programa se calcula el área de un círculo mediante
la clase AreaCirculo.
Programación Java básica: Tipos de datos 7 - 25

// calculo del area de un circulo


import javax.swing.JOptionPane; // importa class JOptionPane
class AreaCirculo {
public static void main(String args[]) {
double pi, radio, area;
radio = 10.8;
pi = 3.1416;
area = pi*radio*radio;
JOptionPane.showMessageDialog(null, "El area del circulo
con radio "+radio+" es "+area, "Resultados",
JOptionPane.PLAIN_MESSAGE );
}
}

Cuyo resultado se presenta enseguida:

Figura 7 Salida de la clase AreaCirculo

Valores char
El tipo de datos para almacenar caracteres es el char. Java utiliza el código
Unicode para representar caracteres. Este sistema define un conjunto de
caracteres completamente internacional, que puede representar todos los
caracteres encontrados en todos los idiomas y lenguas. Es la unificación de
docenas 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 de
caracteres es de 0 a 65.536 (1111111111111111 en binario). Tiene sentido la
utilización del sistema unicode ya que Java esta diseñado apara permitir que los
applets 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 char


Los siguientes son algunos ejemplos de declaración de variables tipo char,
char ca1;
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 char
import javax.swing.JOptionPane; // importa class JOptionPane
class AgregaCaracteres{
public static void main(String args[]) {
char parte1, parte2;
parte1 = 88; // código que representa x
parte2 = 'Y';
JOptionPane.showMessageDialog(null, "parte1 y parte2:
"+parte1+" "+parte2,"Resultados",JOptionPane.PLAIN_MESSAGE);
}
}

Se obtiene el siguiente resultado:

Figura 8 Resultados clase AgregaCaracteres

Valores Booleanos
Por definición, los valores booleanos tienen un bit de almacenamiento, solo
pueden tomar uno de dos valores, true (verdadero) o false (falso). Este es el
tipo que devuelven los operadores de comparación relacionales, como en la
expresión area1 < area2 , o el requerido en las expresiones condicionales que
controlan el flujo como if , for , do, while. Una variable de este tipo, al ser
creada toma como valor predeterminado false.

Declaración de variables booleanas


Ejemplo 3: En el siguiente programa se utilizan variables booleanas,
// Utilización de variables booleanas
class ChequeaBooleana{
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ón
if (vara){
System.out.println(“ Se ejecuta esta instrucción”);
}
}
}

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


comandos:
varb tiene el valor false
varb tiene el valor true
Se ejecuta esta instrucción

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

Literales de tipo entero


Los enteros son el tipo más utilizado en el trabajo en el computador, cualquier
valor 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 cuanto
están en base 10, aunque hay otras bases como la octal en base 8 y la
hexadecimal en base 16, con las cuales también se pueden definir literales
numéricas enteras.

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

La base hexadecimal es una base común para los números utilizados por los
Programación Java básica: Tipos de datos 7 - 28

programadores que coincide con el tamaño de palabra en módulo 8, como el


almacenamiento en 8, 16, 32 o 64 bits visto antes. Una literal hexadecimal se
representa con el prefijo 0X, seguido de los dígitos hexadecimales cuyo rango
es de 0 al 15, por lo que hay que utilizar las letras de la A a la F para representar
a los números decimales 10 al 15.

Los literales enteros crean por defecto un valor tipo int, que en Java tiene un
tamaño de 32 bits. Cuando se asigna un valor literal a una variable entera
byte o short, no se genera error alguno si el literal esta dentro del rango del
tipo destino. Para las literales o constantes enteras a especificar como long es
necesario decirle de forma explícita al compilador que el valor literal es de tipo
long, mediante la adición de la letra L (mayúscula o minúscula) al final de la
literal. Los siguientes son algunos ejemplos de asignación de constantes enteras
a variables:
Constante1 = 9456748378L; // entero decimal en 64 bits
Constante2 = 0X6785ABL; // hexadecimal entero en 64 bits
Constante3 = 30567; // entero decimal en 32 bits
Constante4 = 067543; // entero octal en 32 bits
Constante5 = 0786545678L; // entero octal en 64 bits

Literales en coma flotante o de números reales


Los valores literales de coma o punto flotante representan cantidades
decimales con una componente fraccionaria, en notación estándar o sea la cifra
entera seguida de un punto decimal y un conjunto de dígitos expresando la parte
fraccionaria, o en notación científica al expresar el número en notación
estándar con un sólo dígito entero y adicionalmente con una componente que
expresa la potencia que debe elevarse el valor 10 como factor multiplicador del
número. El exponente se indica con E, o e, seguido de un número decimal con
signo. Por ejemplo 2.345 en notación estándar y 2345 E-3 en notación
cientí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 32
bits, se le debe añadir a la constante una F, o f al final. Los siguientes son
algunos ejemplos de literales de coma flotante:
Constante1 = 7.98768 E 23;
Constante2 = 3.3657 E-21;
Constante3 = 4.6543F;
Constante4 = 56878.4328;
Programación Java básica: Tipos de datos 7 - 29

Literales Booleanos
Un valor booleano se expresa solamente con uno de los dos valores lógicos,
true (verdadero) y false (falso). Los valores true y false, no son
equivalentes a representación o expresión numérica alguna, es decir no
equivalen a 1 y 0 respectivamente como en C o C++ . Las siguientes son
asignaciones literales booleanos a dos variables, obviamente del tipo de datos
booleano.
Respuesta1 = true;
Respuesta2 = false;

Literales Char
Estas literales se almacenan en 16 bits sin signo, y corresponden a índices del
conjunto de caracteres Unicode. Estos literales se pueden convertir a enteros y
ser manipulados con los operadores de los enteros. Un carácter literal tipo
char se representa dentro de un par de comillas simples ( ´ ´ ). Los
caracteres visibles en ASCII se introducen directamente entre el par de
comillas. Aquellos que no se los puede representar directamente se utilizan
secuencias de escape, como por ejemplo ´\n´ , para el carácter cuyo función es
crear una nueva línea, o ´\r´ para el retorno de carro. Las siguientes son algunas
secuencias 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 caracteres


Este tipo de literales son similares a las usadas en todos los lenguajes de
programación, cualquier cosa colocada “entre un par de comillas dobles”.
Una literal String es una coleción de carácteres (letras, dígitos, signos de
puntuación, etc.) que se escribe en una sola linea, ya que Java no tiene carácter
de escape para indicar continuación de línea.
Cadena1= “Soy toda una cadena “;
CadenaOtra = “ Soy otra cadena y que?”;
Programación Java básica: Operadores en Java 7 - 30

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

Java brinda un conjunto de 44 operadores, los cuales son como instrucciones


que le indican al compilador acerca de la realización de operaciones lógicas o
matemáticas. Se agrupan en cuatro grupos: aritméticos, relacionales, lógicos y
a nivel de bit.

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

Operador Resultado Operador Resultado


+ adición += asignación aditiva
- Substracción y -= asignación de
signo unitario 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 operaciones


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

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


variables:

import javax.swing.JOptionPane;
class CuatroOperaciones{
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:

Figura 9 Resultados de la clase


CuatroOperaciones

Operador módulo
Este operador permite calcular el residuo de una división tanto para tipos
enteros o de coma flotante.

Ejemplo 5: El siguiente ejemplo ilustra la utilización del operador para


encontrar el resíduo de 53 modulo 10 y de 52.150 modulo 10.
import javax.swing.JOptionPane;
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:

Figura 10 Resultados clase CalculoModulo

Operadores aritméticos de asignación


Cada uno de los cuatro operadores aritméticos tiene una forma asociada la cual
permite realizar la operación y la asignación. Por ejemplo, para incrementar el
valor de la variables valor en cuatro unidades.
valor = valor + 4;

Operación valida en Java, sin embargo la forma siguiente arroja el mismo


resultado 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 a


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

Operador Descripción
= Es el operador de asignación sencilla; coloca el valor de la
expresión del lado derecho en la variable de la parte izquierda del
signo igual.

+= Adiciona el valor de la derecha a la variable de la izquierda y


almacena el resultado en esta variable.

–= Sustrae el valor de la derecha a la variable del lado izquierdo y


almacena el resultado en esta variable.

*= Multiplica la variable del lado izquierdo por el valor de la parte


derecha y almacena el resultado en esta variable.

/= Divide la variable de la izquierda por el valor de la derecha y


almacena el resultado en esta variable.

%= Obtiene el residuo de la división de la variable del lado izquierdo por


el valor del lado derecho y almacena el resultado en la misma
variable.

Se presenta a continuación algunos ejemplos para estos operadores de


asignación aritmética:
// incrementa valorTotal en 4 y guarda el resultado en //
valorTotal
valorTotal += 4;

// le resta a valorTotal la cantidad 10 y guarda el


resultado en //valorTotal
valorTotal -= 10;

//multiplica productoFinal por 10 y guarda el resultado en


//productoFinal
productoFinal *= 10;

// divide partirProducto por 2 y guarda el resultado en


// partirProducto
partirProducto /= 2;

// obtiene el residuo de dividir residuoFinal por 10 y


guarda el // resultado en residuoFinal
residuoFinal %= 10;

Operadores de incremento y decremento


Permiten adicionar o substraer de una manera simplificada la unidad a una
variable dada. La forma tradicional de realizar el incremento de una unidad es la
siguiente:
variable1 = variable1 + 1;// incrementa en la unidad a
Programación Java básica: Operadores en Java 7 - 34

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

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 variable1
variable2 -= 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, o


preceder al operando como en el siguiente caso:
variable1++;// incrementa en la unidad a variable1
variable2--;//decrementa en la unidad a variable2

Cuando el operador antecede al operando, el operando es modificado antes de


que el valor sea obtenido para su asignación a la variable del lado izquierdo, o
en la expresión correspondiente. Cuando el operando antecede al operador, se
obtiene primero el valor del operando sin modificación para la variable del lado
izquierdo, y luego si se incrementa el operando. Esa diferencia se ilustra en el
siguiente ejemplo
variable1= 65;
variable2 =++variable1;

aquí variable1 toma el valor 66 y en variable2 el de 66. En el siguiente


ejemplo el operando antecede al operador y la variable2 toma el valor 65 y la
variable1 se incrementa a 66.

variable1= 65;
variable2 =variable1++;

Ejemplo 6: El siguiente ejemplo ilustra la utilización del operador de


incremento ++ para incrementar la variable controladora del ciclo de
repeticiones i , en el primer caso y el operador -- para decrementarla en el
segundo caso.
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 creciente
for (int i = 0; i < 7; i++) {
salida1 = salida1+"\nvalor de i = " + i;
}
JOptionPane.showMessageDialog(null,salida1);
// el siguiente segmento es decreciente
for (int i = 7; i > 0; i--) {
salida2=salida2+"\nvalor de i = " + i;
}
JOptionPane.showMessageDialog(null,salida2);
}
}

Los siguientes son los resultados obtenidos:

Figura 11 Resultados de la clase Figura 12 Resultados de la clase


ContCreceDecrece ContCreceDecrece

Operadores Relacionales
Los operadores relacionales permiten establecer la relación de un operando
respecto de otro. Cualquier tipo de operandos, integer, float, char y
boolean, pueden ser comparados mediante el operador de igualdad lógica ==
y el de desigualdad lógica !=. Los operandos de tipo integer, float, char
Programación Java básica: Operadores en Java 7 - 36

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

Los siguientes son los operadores relacionales, los cuales se utilizan


frecuentemente en las expresiones que controlan los diferentes tipos de ciclos,
así como en las expresiones de 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, d


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

El cual dará los siguientes resultados:


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

Figura 13 Resultados de la clase


OperacionesRelacionales

Operadores lógicos booleanos


Frecuentemente los operadores relacionales se utilizan en conjunto con otro
conjunto de operadores, los operadores condicionales o lógicos booleanos.
Estos operan solamente sobre operandos booleanos, dando como resultado un
valor 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 (OR ^= Asignación XOR
exclusivo)
|| 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ásicos


Los operadores lógicos booleanos básicos corresponden a AND (&), OR (|),
XOR (^) y NOT (!). La siguiente tabla ilustra el resultado de la operación de
cada operandor para dos operandos A y B de tipo lógico. La primera fila indica
los nombres de los operandos, A y B, seguidos de las operaciones lógicas a
evaluar. Los resultados de las operaciones, dependiendo de los valores que
tomen A y B, se ilustran en las filas siguientes. El valor verdadero (true) se
representa con V y el valor falso (false) con F:
Programación Java básica: Operadores en Java 7 - 38

A B A|B A&B A^B !A


F F F F F V
V F V F V F
F V V F V V
V V V V F F

Ejemplo 8: Desarrollar un programa que permita generar las tablas de verdad


para diferentes operadores logicos booleanos:
1. import javax.swing.*;
2. public class OperadoresLogicos {
3. public static void main( String args[] ) {
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 ) +
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 agregando
los diferentes mensajes y resultados en las líneas 7, 12, 17, 22, 27 y 32, a fin de
elaborar 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 a
los nuevos elementos involucrados en el programa:

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

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

Linea 35: mediante el método setText() de la clase JtextArea, el objeto


areaSalida carga los resultados guardados en salida.

Línea 36: se utiliza el método showMessageDialog del componente


JoptionPane para mostrar los resultados que se han cargado en el
componente 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 área
de texto pueda ser visualizada en su totalidad utilizando el ratón.
Programación Java básica: Operadores en Java 7 - 40

Figura 14 Resultados de la clase


OperadoresLogicos

Operadores lógicos booleanos en cortocircuito


Son los operadores && y || que corresponde a versiones secundarias de los
operadores básicos AND (&) y OR (|), y se les denomina operadores lógicos en
cortocircuito.

Como se puede observar en la tabla de operadores booleanos, si el operando A


es falso (F) el operador AND (&) dará como resultado falso (F), independiente
del valor del operando B. De igual manera, el operador OR (|) dará como
resultado verdad (V) cuando A sea verdad (V) independiente del valor del
operando B.

Las formas de los operadores en cortocircuito && y ||, en lugar de las formas &
y | hará que Java no se preocupe en evaluar el operando o expresión del lado
derecho cuando el resultado de la operación ya este decidido a partir del
operando o expresión del lado izquierdo. En algunos casos esto puede no ser
deseable, refiérase a la discusión anterior sobre pre y post-incremento y
operadores de asignación.
Programación Java básica: Operadores en Java 7 - 41

Operadores lógicos de asignación


Los operadores &=, |= y ^=, permite hacer que la variable del lado izquierdo
tome el valor resultante de evaluar la expresión formada por esta variable con la
expresió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ón


La mayoría de los programas que usted realice requerirán que bajo ciertas
condiciones se ejecuten unas instrucciones mientras se evitan ó saltan otras.
Java permite este propósito mediante las instrucciones de selección (if - else) y
de selección múltiple (switch).

Instrucción if - else
Tal como se vio en el Capítulo 2, esta instrucción permite, con base a la
evaluación de un predicado o condición de tipo lógico, direccionar el flujo de
la ejecución de un programa hacia uno de dos caminos diferentes. La forma
general 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 su


resultado al ser evaluada da un valor lógico, true o false.

Instrucción1, instrucción2, puede ser una instrucción simple o un conjunto de


instrucciones, en cuyo caso se deben agrupar entre corchetes {} y formar un
bloque de instrucciones, como en el siguiente caso:

if (expresión booleana) {
instrucción11;
instrucción12;
....
}
else {
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 el


valor true, se ejecutara la instrucción1 o el bloque de instrucciones en
caso de haber más de una (instruccion11, instrucción12,..) y no se
ejecutará la instrucción2 o bloque de instrucciones en caso de haber más de
una (instruccion11, instrucción12,..). Si la expresión booleana
toma el valor false, no se ejecutara instrucción1 o el bloque si es mas de
una instrucción, y se ejecutará la instrucción2 o el bloque en caso de ser
mas 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, se
continuará con la siguiente instrucción después del if, como lo indica la
siguiente 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 simples
int 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 lo


contrario hace c= a*b.

En el siguiente caso se tiene la forma del if simple, puesto que independiente


de la ejecución de c=a+b, se continuará con la instrucción d=a*b.
Programación Java básica: Instrucciones de control de flujo: selección 7 -
43

// ejemplo del if simple con instrucciones simples


int a, b, c, d;
if(a > b)
c= a+b;
d= a*b;

En el siguiente ejemplo la segunda instrucción if contiene dos bloques con


instrucciones en lugar de una sola como en el primer caso. Así mismo se
observa 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 anidadas
Es muy común que en los programas sea necesario que la evaluación del
predicado de una instrucción if o if-else sea el destino de otra instrucción if o
if-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 if
mas cercana que esté dentro del mismo bloque y que no tenga asociación con
otro 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. else
8. d= 90;
9. }
10.else
11. b=c;
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 el
predicado (j<i) en la linea 3 es verdadero, ejecutará la línea 4 y continuará con
la línea 5. Si el predicado de la línea 3 es falso, no ejecutará la linea 4 y
continuará con la línea 5. Si el predicado de la línea 5 es verdadero, ejecutará la
línea 6 y no hará la línea 8. Si este predicado es falso, no ejecutará la línea 6 y
ejecutará 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 se
encuentra en el mismo bloque. El ultimo else de la línea 10, y la instrucción b=c
en la línea 11 está asociado con el primer if(i==20), en la línea 2.

Instrucciónes if -else- if múltiples


Las instrucciones if -else- if múltiples constituyen también una práctica común
en la programación y se fundamentan en la utilización de secuencias de if
anidados. 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 que
alguna de las expresiones booleanas sea verdadera, en cuyo caso se ejecuta la
instrucción asociada y no se ejecuta ninguna de las siguientes. Ahora, si
ninguna de las expresiones booleanas es verdadera, se ejecutará la instrucción
asociada con el ultimo else. Recuerdese que, cada una de las instrucciones
puede ser formada a su vez por bloques encerrados entre corchetes, y estos a su
vez pueden contener otras instrucciones if como en la forma siguiente:
if(expresión booleana1){
instrucción1;
....
}
else if(expresión booleana2){
instrucción2;
....
}
else if(expresión booleana3){
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 una


aplicació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 que
pertenece esa edad */
if(edad <= 18)
grupo ="menor";
else if((edad > 18) && (edad < 60))
grupo = "adulto";
else if ((edad >= 60) && (edad < 100))
grupo="tercera edad";
else grupo = "cuarta edad";
JOptionPane.showMessageDialog(null, "La edad "+edad+"
corresponde a "+ grupo);
}
}

En este ejemplo se ilustra la utilización de expresiones booleanas compuestas


en los dos else if para determinar el rango en donde se encuentra la edad. La
ejecución de este programa arrojara el siguiente resultado:
Programación Java básica: Instrucciones de control de flujo: selección 7 -
46

Figura 15 Entrada de datos para la clase


GrupoEdad

Figura 16 Resultados de la clase GrupoEdad

Ejemplo 10: En el siguiente ejemplo se introduce un valor entero


correspondiente al número de un mes (entre 1 y 12) y permite encontrar la
estació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";
else
estacion="valor invalido de mes";
JOptionPane.showMessageDialog(null, "El mes "+mes+" es
"+estacion);
}
Programación Java básica: Instrucciones de control de flujo: selección 7 -
47

Los resultados del programa se ilustran a continuación:

Figura 17 Lectura datos clase CalculaEstacion

Figura 18 Resultados clase CalculaEstacion

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


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

Figura 21 Resultados clase ComparaEnteros

Instrucción de selección múltiple switch


Esta 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 una
expresión. En el lenguaje algorítmico se estableció la instrucción caso para
este 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 y


compatible con cada uno de los valores (valor1, valor2, ..valorN) en
seguida 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, no
una variable, ademas que deben ser valores únicos sin repeticiones o
duplicados, entre los diferentes bloques case.
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 instrucciones


dentro de cada una de las opciones de las sentencias case es de la siguiente
manera:

switch(expresion) {
case valor1:{
instruccion1;
....
}
break;
case valor2:{
instruccion2;
....
}
break;
.
.
.
case valorN:{
instruccionN;
....
}
break;
default:{
instruccionM;
....
}
}

La instrucción switch opera de la siguiente manera: el resultado de evaluar la


expresion, se compara con cada uno de los valores indicados en cada una de
las 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 la
instrucción break se interrumpe esa secuencia para darle el control ó saltar a
las instrucciones o código que siguen despues de la instrucción switch . Si
ninguno de los valores corresponde con el resultado de la expresión entonces
se ejecutará por defecto la clausula default. Esta cláusula es opcional, sin
embargo, si ningún valor coincide y no está la cláusula default , no se realiza
ninguna operación y el control se da a las instrucciones que siguen después de
la 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
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 puede


seleccionar opciones del tipo byte, char, short, int y long. No se
puede utilizar en las opciones valores primitivos float, double, String,
ni ningún otro tipo de objeto. Tampoco se pueden utilizar relaciones diferentes
a la igualdad. Para las situaciones no contempladas en el switch, se debe
utilizar entonces la instrucción if-else.

Ejemplo 12: El siguiente ejemplo para el calculo del valor a pagar por una
camisa 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 la
talla "+talla+" es $"+precio);
}
}

La ejecución de este programa da como resultado:


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

Figura 22 Lectura datos clase ValorAPagar

Figura 23 Resultados clase ValorAPagar

Ejemplo 13: Ahora si se quisiera asignar a las tallas 34 y 36 3l mismo valor,


asi como a las 38 y 40, el programa 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:
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 la
talla "+talla+" es $"+precio);
}
}

Como se puede observar se ha omitido la instrucción break en las opciones 34


y 38, agrupándolas con la 36 y con la 40 respectivamente. El programa continúa
su 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:

Figura 24 Entrada datos clase ValorAPagar1

Figura 25 Resultados clase ValorAPagar1

Ejemplo 14: En el siguiente caso se utiliza la cláusula default para indicar que
una calificación no es aprobatoria:
import javax.swing.*;
class ApruebaNoAprueba{
public static void main(String args[]) {
String entrada,resultado;
Programación Java básica: Instrucciones de control de flujo: selección 7 -
54

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

El programa al ser ejecutado dará la siguiente salida:

Figura 26 Lectura datos clase


ApruebaNoAprueba

Figura 27 Resultados clase


ApruebaNoAprueba
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 a


que corresponde un mes determinado, solo que esta vez se utilizara la
instrucción switch, y se leerá el valor del mes por medio del componente
JoptionPane:
import javax.swing.JOptionPane;
class CalculaEstacion2{
public static void main(String argumento[]) {
String entrada, estacion;
int mes;
entrada=JOptionPane.showInputDialog("Digite el 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


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

resultados:

Figura 28Lectura datos clase CalculaEstacion2

Figura 29 Resultados clase


CalculaEstacion2

Instrucciones switch anidadas


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

Instrucciones control de flujo: ciclos


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

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

La diferencia sustantiva de cada una de las anteriores instrucciones radica en las


caracterí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 se


realiza la acción o instrucciones del bloque y luego se pregunta por la
condició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 el
ciclo, 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 de


inicio del ciclo. Por ejemplo la variable que va a controlar el ciclo.

• Cuerpo: comprende el bloque de instrucciones que se desea repetir con el


ciclo y que es el propósito principal de este.

• Iteración: es el código que se ejecuta después del cuerpo pero antes de un


nuevo ciclo o repetición. En este se incrementa la variable controladora del
ciclo.

• Terminación: Corresponde a una expresión de tipo booleano que es evaluada


cada vez que se hace un ciclo, para verificar si este debe terminar o
continuar. Se evalúa respecto de la variable controladora del ciclo.

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

[inicialización;]
while (condición de terminación) {
cuerpo;
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 10


primeros 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 la


variable entero el valor 1. está variable forma parte de la condición de
terminación, en la línea 4, la cual al evaluarse la primera vez, da como
resultado true, es decir la variable entero es menor o igual a 10, por tanto
realiza la primera iteración del cuerpo del ciclo, formado esta vez por la
instrucción System.out.println para generar la salida en la pantalla de
comandos.

Linea 4- 9: cuerpo del ciclo, el cual es iniciado con la instrucción while y la


primer llave. Mientras la condición sea verdadera, se realizará la generación de
una 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ínea


3, se incrementa la variable entero mediante la expresión entero++, que es
la parte de iteración del ciclo.

Se repite el proceso de evaluar la condición de terminación; al ser


nuevamente verdadera, se realiza una vez mas el ciclo generando la salida e
iterando nuevamente. Así sucesivamente hasta que la condición de
terminación se torna falsa, lo cual se logra cuando se ha generado la salida
con System.out.println, del valor entero igual a 10, incrementando luego
en la iteración su valor a 11, el cual hace que la condición de
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 mensaje
de 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 de


iniciar el ciclo, este nunca se realiza, aunque escribirá el mensaje de
terminación, indicando el valor asignado a la variable.

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


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

Ejemplo 17: Desarrollar un programa en Java que permita evaluar la función


2
f  x= x ­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ón
de 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 ");
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 dar


formato a la salida de resultados de las variables reales x y fx.

Linea 5:define de tipo double a las variables de entrada a, b, dx, y de


salida fx y x.

Linea 7: crea un objeto precision, del tipo DecimalFormat a partir del


constructor de esta o sea DecimalFormat(“0.00”), en el cual define que
tendrá dos cifras decimales en la salida de resultados.

Linea 8: crea un objeto areaDeSalida del tipo JTextArea, a partir del


constructor JTextArea(10,20), el cual define un área de 10 columnas por 20
filas. En esta área se guardarán los resultados.

Linea 9: crea un objeto scroller del tipo JScrollPane, a partir del


constructor JScrollPane(areaDeSalida), el cual contendrá el objeto
areaDeSalida, de tal manera que se podrá hacer desplazamiento horizontal y
vertical de la información mostrada.

Linea 10: mediante el componente JoptionPane, se introduce la informacion


para la cadena input.

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

Lineas12-15: se hace la misma operación para introducir y convertir a valores


reales los valores para b y dx.
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 al


objeto areaDeSalida. Obsérvese la utilización del comando de escape \t
para 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 la


que 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 las
instrucciones 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 para


un valor de x.

Linea 20: agrega al objeto areaDeSalida, el texto correspondiente a los


resultados de fx y x. Obsérvese el uso del método format() del objeto
precision, para darle formato de salida con dos decimales, a las variables fx y
x.

Linea 21: se incrementa la variable x en el valor dx y se repite el ciclo si la


condició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 del
componente JOptionPane y se utiliza la constante
INFORMATION_MESSAGE, para que aparezca un ícono alusivo a
información.

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


programa.

Los resultados obtenidos al ejecutar el anterior programa, para los valores de a,


b, dx dados son los siguientes:

Figura 30 Lectura valor a


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

Figura 31 Lectura valor b

Figura 32 Lectura valor dx

Figura 33 Resultados clase EvaluaFuncion

Ejemplo 18 : Desarrollar un programa que permita leer 5 valores enteros y


calcular su promedio:
import javax.swing.JOptionPane;
public class PromedioEnteros {
public static void main( String args[] ) {
int total= 0, contador= 0, valorEntero,
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 enteros
son los siguientes:

Figura 34 Resultados clase PromedioValores

Ejemplo 19: Desarrollar el problema anterior pero esta vez el ciclo se hace
con un registro centinela. Se debe escribir 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 -9
termina el programa" );
valorEntero =Integer.parseInt( entrada );
while ( valorEntero != -9 ) {
total = total + valorEntero;
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+" valores
leidos es: " + promedioEnteros, "Calculo Promedios",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
}

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

Figura 35 Resultados clase PromedioEnteros1

Ejemplo 20: Desarrollar un programa Java tipo Applet que permita dibujar 15
rectá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 el


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

Figura 36 Resultados applet ContadorWhile1

Instrucción do-while
En esta instrucción de ciclo, la evaluación de la condición de terminación se
hace al final del ciclo y no antes del ciclo como en la instrucción while vista
antes. Esto significa que, aunque la condición de terminación sea falsa, se
realiza 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{
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 que


controle con sus incrementos sucesivos en la línea 6, la condición a evaluar al
final de cada ciclo de la línea 7. La instrucción do-while va entre las lineas 4 y
7. Una vez agotado el ciclo con la condición de la línea 7, se da control a la
siguiente instrucción después dl ciclo, System.out.println de la línea 8.
Los resultados obtenidos son similares al ejemplo visto antes:
Numero = 1
Numero = 2
Numero = 3
Numero = 4
Numero = 5
Numero = 6
Numero = 7
Numero = 8
Numero = 9
Numero = 10
Ciclo terminado, valor de entero= 11

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

Ejemplo 22 : Desarrollar el mismo problema del ejemplo anterior, pero esta


vez utilizando la 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;
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:
Programación Java básica: Instrucciones control de flujo: ciclos 7 - 68

Figura 37 Resultados clase EvaluaFuncion2

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:


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

Figura 38 Resultados applet ContadorDoWhile

Instrucción for
Esta instrucción presenta una forma compacta para realizar los ciclos, su
utilización radica en que se conoce de antemano el número de veces que se debe
realizar 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 en
las dos instrucciones anteriores se presenta a continuación para ilustrar la
instrucció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 la


incialización de la variable, como la condición de terminación y el incremento o
decremento de la variable controladora del ciclo. El cuerpo dl ciclo va entre las
lí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
Programación Java básica: Instrucciones control de flujo: ciclos 7 - 70

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


instrucción for.

Los resultados obtenidos una vez se ejecute el programa son los siguientes:
Numero = 1
Numero = 2
Numero = 3
Numero = 4
Numero = 5
Numero = 6
Numero = 7
Numero = 8
Numero = 9
Numero = 10
Ciclo terminado, valor de entero= 11

Ejemplo 25: dibujar 15 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:


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

Figura 39 Resultados applet ContadorFor1

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


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

Y los resultados son:

Figura 40 Resultados calse SumaPares


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

Ejemplo 27: Desarrollar un programa Java que permita leer la información


de N (N>1) vehículos correspondiente a marcaVehiculo (marca del vehículo) y
colorVehiculo (color del vehículo) y calcular la distribución del número de
vehículos según marca y color. Escribir el total de vehículos según color y el
total de vehículos según marca. Para la marca del vehículo se tienen los
siguientes 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 de
valores para cada vehículo y una instrucción switch anidada para llevar los
acumulados según el color y la marca del vehículo leido. A continuación el
programa en Java:
1.import javax.swing.*;
2.import java.text.*;
3.public class CuentaCarros1{
4.public static void main(String arg[]){
5. String entrada;
6. int codigoMarca, codigoColor, n, contVehiculos=0;
7. int contRenault=0, contFord=0, contMazda=0,
renaultRojo=0, renaultBlanco=0, renaultAzul=0;
8. int fordRojo=0, fordBlanco=0, fordAzul=0, mazdaRojo=0,
mazdaBlanco = 0, mazdaAzul =0;
9. int contRojo=0, contBlanco = 0, contAzul=0;
10. JTextArea areaDeSalida = new JTextArea(10,37);
11. JScrollPane scroller = new JScrollPane(areaDeSalida);
12. entrada=JOptionPane.showInputDialog("Digite el 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) {
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;
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"+con
tRenault+"\n"+
80. "Ford\t"+fordRojo+"\t"+fordBlanco+"\t"+fordAzul+"\t
"+contFord+"\n"+
81. "Mazda\t"+mazdaRojo+"\t"+mazdaBlanco+"\t"+mazdaAzul
+"\t"+contMazda+"\n"+
82. "Total\t"+contRojo+"\t"+contBlanco+"\t"+contAzul+"\
t"+n+"\n");
83. JOptionPane.showMessageDialog(null,scroller,
"Encuesta",JOptionPane.INFORMATION_MESSAGE);
84. System.exit(0);}
85.}

Figura 41 Resultados clase CuentaCarros

Mas de una expresión en la inicialización e iteración del ciclo for


Algunas veces es necesario incluir mas de una expresión en las partes de
inicialización e iteración de los ciclos for, como puede ser
ejemplificado en la aplicación siguiente:
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 de
terminación del ciclo es controlada por los valores que toman val1 y val2.
Terminándose el ciclo cuando las dos variables sean iguales. El resultado
después de su ejecución es el siguiente:

Figura 42 Resultados clase MasDeUno

Instrucciones para salto


Java dispone de cuatro formas para transferir control de un lugar a otro del
programa: break, continue, return y throw, que aunque no producen el desvío
de flujo por sí mismas, se utilizan en conexión con instrucciones de control de
flujo como en el caso de switch, ya vista antes, así como con el if-else, while,
do-while y for. La instrucción return se tratará mas adelante en la unidad de
métodos y la instrucción throw, que permite el manejo de excepciones se
tratará mas adelante en la unidad de manejo de excepciones, junto con las
Programación Java básica: Instrucciones para salto 7 - 76

instrucciones try, catch y finally.

break
Ya se ha visto la utilización de break en la instrucción switch para interrumpir
la 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 y
salir de este, dándole control a la siguiente instrucción. La interrupción del ciclo
o bloque que se esté desarrollando puede hacerse mediante la instrucción break
con etiqueta, a fin de darle el control a otra parte del programa denominado con
es 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 la
condición de terminación, y sin ejecutar el resto de instrucciones dentro del
cuerpo del ciclo, continuando con la siguiente instrucción despues del ciclo
donde se encuentre.

• Como una forma del tradicional goto de los viejos lenguajes de


programación, al permitir saltar a otra parte del programa indicado con una
etiqueta.

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

Figura 43 Resultados clase ChequeoBreak

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

Cuando i tome el valor 5 en la línea 4, la instrucción break, indica que salte


fuera del ciclo for, a la instrucción inmediatamente siguiente. El programa da
como resultado los siguientes valores:

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

El mismo programa anterior pero utilizando en esta oportunidad la instrucción


do-while:

Ejemplo 31:
1.class RompeDoWhile{
2. public static void main(String args[]){
3. int i = 1;
4. do{
5. if(i==5) break;
6. System.out.println(“Valor de i= “+i);
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= 0
valor de i= 2 valor de j = 0 1
valor de i= 3 valor de j = 0 1 2
valor de i= 4 valor de j = 0 1 2 3
valor 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 valor


de 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, incrementando
el valor de i, y entrando nuevamente al ciclo interno, hasta que se cumple
nuevamente la condición de igualdad de i con j, así sucesivamente hasta que se
agota el ciclo externo con el valor de i igual a 5.
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 como
equivalencia de un goto. Esta forma no es la mas aconsejable puesto que daría
lugar a los denominados programas “espagettis”, dificultando su entendimiento
y mantenimiento. Por ejemplo, para salir desde el ciclo mas interno de un
conjunto de ciclos anidados, la forma del break con etiqueta es una alternativa,
puesto que salta directamente al lugar del programa que se desea continuar su
ejecución. Obviamente esta práctica no es la mas aconsejable y debe restringirse
al 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 un


bloque de código en otra parte del programa, que debe contener dentro de su
cuerpo a la instrucción break con etiqueta. El control se transfiere entonces a
la 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 dos
puntos, 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 = 0
valor de i= 2 valor de j = 0 1
valor de i= 3 valor de j = 0 1 2
valor de i= 4 valor de j = 0 1 2 3
valor de i= 5 valor de j = Ciclos terminados con break
aqui:
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 clase


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

Instrucción continue
A diferencia de la instrucción break que interrumpe la ejecución de un ciclo, la
instrucción continue permite interrumpir la iteración actual, no continuando
con el resto del código del ciclo, pero continuando con la siguiente iteración del
mismo ciclo. En los ciclos while y do-while, el control se transfiere desde la
instrucción continue hasta despues del cuerpo del ciclo, para verificar la
condición de terminación. Para el caso del ciclo for, el control se
transfiere primero a la parte de iteración y luego a la condición de
terminación. En los tres casos, el código después de la instrucción
continue no se ejecuta. El siguiente ejemplo ilustra la utilización de esta
instrucció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 del


1 al 20 pero que salte el numero 7 y el 14
import javax.swing.JOptionPane;
public class ChequeoContinue{
public static void main( String args[] ) {
String salida = "";
for ( int contador = 1; contador <= 20; contador++ )
{
if ( contador == 7 || contador ==14)
continue;
Programación Java básica: Instrucciones para salto 7 - 82

salida += contador + " ";


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

Los resultados son los siguientes:

Figura 45 Resultados clase ChequeoContinue

La instrucción continue tambien se puede utilizar con etiqueta para transferir el


control a otra parte del programa, su forma general es:

continue etiqueta;

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

El resultado es el siguiente:

Figura 46 Resultados de la clase


ChequeoContinueEtiqueta

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

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

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

que representa los días de cada uno de los meses del año (para un año no
bisiesto). Su definición en Java como arreglo se dará con la siguiente forma:
int diasDeMeses[];
Programación Java básica: Arreglos 7 - 84

Como sucede con la declaración de otras variables, el valor asignado por


defecto al arreglo es cero. Sin embargo, para los arreglos existe un valor
especial que se le asigna cuando no se han asignado valores a sus elementos, es
el valor null que representa que el arreglo no tiene valores aún asignados.

Estrictamente hablando, se ha creado un objeto tipo int con la expresión


anterior, de tal manera que, para darle valores, se debe utilizar en primer lugar
el operador new, para asignar el tamaño del arreglo, en este caso debe tener
espacio 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 albergar


los días de los meses del año. Se pudo utilizar la siguiente expresión para definir la
misma operación:

int DiasDeMeses[] = new int[12];

En la siguiente clase se define el arreglo y se genera por la pantalla de


comandos los valores para Enero y Julio:

Ejemplo 38:

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

Al ejecutar este programa aparece en la pantalla:

Figura 47 Resultados clase DiasMeses

Una forma más simple de guardar los valores en el arreglo DiasDeMeses[] es


mediante la siguiente estructura de clase:

Ejemplo 39:
import javax.swing.*;
class DiasMeses2{
public static void main(String args[]){
String salida="";
int DiasDeMeses[]={31, 28, 31, 30, 31, 30, 31, 31, 30,
31, 30, 31};
salida+="Enero tiene "+DiasDeMeses[1]+" dias\n";
salida+="Julio tiene "+DiasDeMeses[7]+" dias";
JOptionPane.showMessageDialog(null,salida);
}
}

Obteniéndose en la pantalla los mismos resultados que el ejemplo anterior. En


Java, el tamaño del arreglo se debe especificar. Una referencia a una posición
fuera de los limites indicados en la definición del tamaño generará un error en
tiempo de ejecución.

Ejemplo 40 : Desarrollar un programa que permita asignarle a un arreglo


entero N los valores 10, 9, 8 ,... .
import javax.swing.*;
public class InicializaArreglo1 {
public static void main( String args[] ) {
String salida = "";
int n[] = new int[ 10 ];
salida += "Valores del arreglo n[ ]\nElemento
\tvalor\n";
for ( int i = 0; i < n.length; i++ ){
n[i]= n.length-i;
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:

Figura 48 Resultados de la clase


InicializaArreglo1

Ejemplo 41: Desarrolle un programa que permita leer N (n>0) elementos de


un arreglo unidimensional de tipo entero y calcular, la suma de sus elementos,
el promedio, y el numero de elementos mayores que el promedio.
import javax.swing.JOptionPane;
public class SumaArreglo1{
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 valor
para A["+i+"]:");
a[i] = Integer.parseInt(entrada);
suma = suma +a[i];
}
prom= suma/n;
for(int i = 1; i<= n; i++){
if(a[i]>prom)nMayores++;}
JOptionPane.showMessageDialog(null, "El valor de la suma
es " +suma+
"\nEl valor del promedio es "+prom+"\nElementos
mayores que el promedio "+nMayores);
}
}

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

Figura 49 Lectura numero de términos


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

Figura 50 Lectura de valores del arreglo

Figura 51 Resultados de la clase SumaArreglo1

Ejemplo 42: Escriba un programa que permita calcular la frecuencia de


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

for(int j=1; j<=5;j++){


salida +="a["+cont+"]= "+arregloA[cont]+" \t";
cont=cont+1;}
salida+="\n";
}
for ( int indice1 = 0;indice1 < arregloA.length;
indice1++ )
++frecuencia[ arregloA[ indice1 ] ];
salida += "\nResultado del calculo de la
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 );
}
}
Programación Java básica: Arreglos 7 - 90

Figura 52 Resultados clase FrecuenciaValores

Ejemplo 43: Desarrollar un programa que dados los valores de un arreglo


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

Figura 53 Resultados clase CalculaHistograma

Arreglos bi-dimensionales
En Java los arreglos de más de una dimensión, o multidimensionales, son en
realidad matrices de matrices. Para declarar una variable del tipo arreglo
multidimensional, se requiere especificar cada índice adicional utilizando una
pareja de corchetes [ ]. Por ejemplo, para definir un arreglo o matriz de dos
dimensiones de tamaño 5x4, es decir de 5 filas por cuatro columnas, tendremos
la siguiente codificación:
int MatBidi[][]= new int[3][4];
Programación Java básica: Arreglos 7 - 92

Con este código se establecen 3 por 4 posiciones que se asignan a la variable


MarizBidimencional que es de tipo entero. Su representación es de la
siguiente manera:

Columna 0 Columna 1 Columna 2 Columna 3


Fila 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 lado
derecho representan las columnas del arreglo MatBidi[][] declarado en la
instrucción anterior. Obsérvese que los subindices empiezan desde [0][0], con
lo cual debe tenerse cuidado al manejar los arreglos.

El siguiente ejemplo toma los elementos de una matriz de tamaño 3 por 3 y


calcula la suma de todos sus elementos:

Ejemplo 44:
import javax.swing.*;
class SumaArregloBi{
public static void main(String args[]){
int matriz[][] = new int[3][3];
int i, j, suma = 0;
matriz[0][0]= 1;
matriz[0][1]= 2;
matriz[0][2]= 3;
matriz[1][0]= 4;
matriz[1][1]= 5;
matriz[1][2]= 6;
matriz[2][0]= 7;
matriz[2][1]= 8;
matriz[2][2]= 9;
for (i=0; i<=2; i++)
for (j=0;j<=2;j++)
suma = suma + matriz[i][j];
JOptionPane.showMessageDialog(null,"La suma de
los elementos es "+suma);
System.exit(0); }
}

El resultado del programa es el siguiente:


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

Figura 54 Resultados clase SumaArregloBi

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

Ejemplo 45:
import javax.swing.*;
class SumaArregloBi1{
public static void main(String args[]){
int matriz[][] = new int[3][3];
int i, j, suma = 0;
String entrada;
for (i=0; i<=2; i++)
for (j=0;j<=2;j++){
entrada= JOptionPane.showInputDialog("Digite el
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 los


valores para el arreglo como en el caso siguiente para el elemento [2][1],
Programación Java básica: Arreglos 7 - 94

Figura 55 Lectura de datos clase


SumaArregloBi1

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

Figura 56 Resultados clase SumaArregloBi1

Ejemplo 46: El siguiente ejemplo corresponde a una aplicación que permite


calcular el numero de vehículos que de un conjunto de datos según marca y
color. 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 cinco


columnas. Por facilidad y entendimiento del problema y su solución, no se
tendrá en cuenta los indices de la fila 0 y la columna 0. Se tendrán en cuenta los
indices 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 que
tienen el color blanco:
Programación Java básica: Arreglos 7 - 95

Color Rojo Color Blanco Color Azul Total Vehiculos


Renault 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 hay


que 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 marca
de vehiculo:\n1 Renault\n2 Ford\n3 Mazda");
codigoMarca = Integer.parseInt(entrada);}
while(!(codigoMarca>= 1 && codigoMarca <=3));
do{
entrada=JOptionPane.showInputDialog("Digite un color
de vehiculo:\n1 Rojo\n2 Blanco\n3 Azul");
codigoColor = Integer.parseInt(entrada);}
while(!(codigoColor>= 1 && codigoColor <=3));
tabla[codigoMarca][codigoColor]++;
tabla[4][codigoColor]++;
tabla[codigoMarca][4]++;
tabla[4][4]++;
}
areaDeSalida.append(" \tDistribucion de vehiculos
segun marca y color\n\n"+
"\tBlanco \tRojo \tAzul \t Total \n"+"Renault\t"+
tabla[1][1]+"\t"+tabla[1][2]+"\t"+tabla[1][3]
+"\t"+tabla[1][4]+"\n"+
"Ford\t"+tabla[2][1]+"\t"+tabla[2][2]+"\t"+tabla[2][3]
+"\t"+tabla[2][4]+"\n"+
"Mazda\t"+tabla[3][1]+"\t"+tabla[3][2]+"\t"+tabla[3]
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 20


vehí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


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

Figura 59 Lectura del color de un vehículo

Figura 60 Resultadosde la clase CuentaCarros2

Para el caso de un arreglo de tres dimensiones, de tamaño 3x4x5, la siguiente


forma 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 permita


leer dos matrices generales de tipo entero y efectuar su producto.
import javax.swing.*;
class MultiplicaMatriz{
public static void main(String valores[]){
int c[][] = new int[10][10];
int a[][] = new int[10][10];
int b[][] = new int[10][10];
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);
}
}
Programación Java básica: Arreglos 7 - 99

Al ejecutar el programa y suministrando los datos para dos matrices se obtienen


los siguientes resultados:

Figura 61 Resultados de la clase MultiplicaMatriz

Recapitulación
Se 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 las
mismas partes de una clase. Se vio a través de ejemplos cómo las relaciones de
es-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 forma


de definir identificadores, así como las normas de codificación. Se definieron
los tipos de datos primitivos y se establecieron sus características desde el punto
de vista de su tamaño y la forma de manipulación de sus valores.
Programación Java básica: Recapitulación 7 - 100

El tratamiento de arreglos tanto unidimensionales como bidimensionales se


presentó acompañado de los respectivos ejemplos. Se presentaron los
operadores aritméticos, lógicos, relacionales y de manejo de caracteres.

Se ha presentado las instrucciones que le permiten controlar el flujo de la


ejecución de un programa en Java. Estas instrucciones le permiten programar la
solución de prácticamente cualquier problema en el computador.

También podría gustarte