58
 ESTRUCTURAS REPETITIVAS EN JAVA Se denominan estructuras repetitivas a las estructuras que permiten incluir dentro de ellas un grupo de instrucciones que deben hacerse mientras una cierta condición sea válida, esto significa que dichas instrucciones pueden ejecutarse 0 o n veces. Una estructura repetitiva está compuesta de una instrucción de repetición, la condición y el bloque de instrucciones que deberá ejecutarse mientras la condición se cumpla. Java ofrece tres tipos de estructuras repetitivas, las cuales se presentarán en este capítulo. INSTRUCCIÓN WHILE Es una de las instrucciones repetitivas más utilizadas en los diferentes lenguajes de programación, prácticamente todos la implementan. La forma en la cual funciona es equivalente a mencionar, en una conversación casual, algo como: Mientras estés estudiando en la universidad, deberás llegar a casa antes de las 11 p.m . Es claro que mientras la persona no termine el semestre que está cursando es su obligación estar en la casa, a más tardar, a las 11 de la noche. Mientras el equipo siga ganando y no se presenten faltas por disciplina, se les seguirá entregando el premio . Para seguir obteniendo el premio, es necesario que el equipo siga ganando y no se presenten faltas contra la disciplina. Mientras consigues completar la plata para comprar un televisor para ti, o encuentras una promoción, deberás seguir viendo televisión con nosotros . Aquí es claro que mientras no se cumpla una, o ambas, condiciones la persona deberá ver televisión con la familia. En java estas situaciones se manejan a través de la instrucción while ( condición  ), cuya sintaxis se presenta a continuación: while ( condición  ) {  /** En es te espacio debe ir e l bloque de código que se requ iere se e jecute mientras la condición se cumpla. */  } Del anterior bloque, se deben hacer las siguientes consideraciones:  while es indispensable en el encabezado del bloque. ndición, o sea no es posible dejar los paréntesis vacíos. La condición se maneja igual que en las estructuras selectivas, es decir puede ser simple o estar compuesta de varias condiciones unidas a través de operadores y (& - &&) u o (| - ||). 2 dición no se cumple la primera vez que se llega al while , las instrucciones contenidas en él no se ejecutarán ni una vez. instrucciones que estén sujetas al cumplimiento de la condición. Si es una instrucción no son necesarias, si son varias si lo son, pero es recomendable utilizarlas siempre. Sea que se utilicen o no llaves, debe ser claro que las instrucciones dentro del while forman un bloque de código, así que si se definen variables dentro de este bloque, dejaran de existir una vez se salga de él.

Estructuras Repetitivas en Java Jorge

Embed Size (px)

Citation preview

Page 1: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 1/58

ESTRUCTURAS REPETITIVAS EN JAVA

Se denominan estructuras repetitivas a las estructuras que permiten incluir dentrode ellas un grupo de instrucciones que deben hacerse mientras una ciertacondición sea válida, esto significa que dichas instrucciones pueden ejecutarse 0 o

n veces.Una estructura repetitiva está compuesta de una instrucción de repetición, lacondición y el bloque de instrucciones que deberá ejecutarse mientras la condiciónse cumpla. Java ofrece tres tipos de estructuras repetitivas, las cuales sepresentarán en este capítulo.

INSTRUCCIÓN WHILE

Es una de las instrucciones repetitivas más utilizadas en los diferentes lenguajesde programación, prácticamente todos la implementan. La forma en la cualfunciona es equivalente a mencionar, en una conversación casual, algo como:

Mientras estés estudiando en la universidad, deberás llegar a casa antes de las 

11 p.m . Es claro que mientras la persona no termine el semestre que estácursando es su obligación estar en la casa, a más tardar, a las 11 de la noche.

Mientras el equipo siga ganando y no se presenten faltas por disciplina, se les seguirá entregando el premio . Para seguir obteniendo el premio, es necesarioque el equipo siga ganando y no se presenten faltas contra la disciplina.

Mientras consigues completar la plata para comprar un televisor para ti, o encuentras una promoción, deberás seguir viendo televisión con nosotros . Aquíes claro que mientras no se cumpla una, o ambas, condiciones la personadeberá ver televisión con la familia.En java estas situaciones se manejan a través de la instrucción while ( condición ),cuya sintaxis se presenta a continuación:while ( condición ) { 

 /** En este espacio debe ir el bloque de código que se requiere se ejecutemientras la condición se cumpla. */ 

 }Del anterior bloque, se deben hacer las siguientes consideraciones:

while es indispensable en el encabezado del bloque.ndición, o sea no es

posible dejar los paréntesis vacíos. La condición se maneja igual que en lasestructuras selectivas, es decir puede ser simple o estar compuesta de variascondiciones unidas a través de operadores y (& - &&) u o (| - ||).2

dición no se cumple la primera vez que se llega al while , lasinstrucciones contenidas en él no se ejecutarán ni una vez.

instrucciones que estén sujetas al cumplimiento de la condición. Si es unainstrucción no son necesarias, si son varias si lo son, pero es recomendableutilizarlas siempre. Sea que se utilicen o no llaves, debe ser claro que lasinstrucciones dentro del while forman un bloque de código, así que si sedefinen variables dentro de este bloque, dejaran de existir una vez se salga deél.

Page 2: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 2/58

 

Estructura repetitiva while

Hasta ahora hemos empleado estructuras SECUENCIALES y CONDICIONALES. Existe otrotipo de estructuras tan importantes como las anteriores que son las estructurasREPETITIVAS.Una estructura repetitiva permite ejecutar una instrucción o un conjunto de instruccionesvarias veces.Una ejecución repetitiva de sentencias se caracteriza por:- La o las sentencias que se repiten.- El test o prueba de condición antes de cada repetición, que motivará que se repitan o no lassentencias.

Estructura repetitiva while.Representación gráfica de la estructura while:

No debemos confundir la representación gráfica de la estructura repetitiva while (Mientras)con la estructura condicional if (Si)Funcionamiento: En primer lugar se verifica la condición, si la misma resulta verdadera seejecutan las operaciones que indicamos por la rama del Verdadero.A la rama del verdadero la graficamos en la parte inferior de la condición. Una línea al final

Page 3: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 3/58

del bloque de repetición la conecta con la parte superior de la estructura repetitiva.En caso que la condición sea Falsa continúa por la rama del Falso y sale de la estructurarepetitiva para continuar con la ejecución del algoritmo.El bloque se repite MIENTRAS la condición sea Verdadera.Importante: Si la condición siempre retorna verdadero estamos en presencia de un ciclo

repetitivo infinito. Dicha situación es un error de programación, nunca finalizará el programa.

Problema 1:

Realizar un programa que imprima en pantalla los números del 1 al 100.Sin conocer las estructuras repetitivas podemos resolver el problema empleando unaestructura secuencial. Inicializamos una variable con el valor 1, luego imprimimos la variable,incrementamos nuevamente la variable y así sucesivamente.

Diagrama de flujo:

Si continuamos con el diagrama no nos alcanzarían las próximas 5 páginas para finalizarlo.Emplear una estructura secuencial para resolver este problema produce un diagrama de flujoy un programa en Java muy largo.Ahora veamos la solución empleando una estructura repetitiva while:

Page 4: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 4/58

 Es muy importante analizar este diagrama:

La primera operación inicializa la variable x en 1, seguidamente comienza la estructurarepetitiva while y disponemos la siguiente condición ( x <= 100), se lee MIENTRAS lavariable x sea menor o igual a 100.Al ejecutarse la condición retorna VERDADERO porque el contenido de x (1) es menor oigual a 100. Al ser la condición verdadera se ejecuta el bloque de instrucciones que contienela estructura while. El bloque de instrucciones contiene una salida y una operación.Se imprime el contenido de x, y seguidamente se incrementa la variable x en uno.La operación x=x + 1 se lee como "en la variable x se guarda el contenido de x más 1". Esdecir, si x contiene 1 luego de ejecutarse esta operación se almacenará en x un 2.Al finalizar el bloque de instrucciones que contiene la estructura repetitiva se verificanuevamente la condición de la estructura repetitiva y se repite el proceso explicadoanteriormente.

Mientras la condición retorne verdadero se ejecuta el bloque de instrucciones; al retornarfalso la verificación de la condición se sale de la estructura repetitiva y continua el algoritmo,en este caso finaliza el programa.Lo más difícil es la definición de la condición de la estructura while y qué bloque deinstrucciones se van a repetir. Observar que si, por ejemplo, disponemos la condición x>=100 ( si x es mayor o igual a 100) no provoca ningún error sintáctico pero estamos enpresencia de un error lógico porque al evaluarse por primera vez la condición retorna falso yno se ejecuta el bloque de instrucciones que queríamos repetir 100 veces.

Page 5: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 5/58

No existe una RECETA para definir una condición de una estructura repetitiva, sino que selogra con una práctica continua solucionando problemas.Una vez planteado el diagrama debemos verificar si el mismo es una solución válida alproblema (en este caso se debe imprimir los números del 1 al 100 en pantalla), para ellopodemos hacer un seguimiento del flujo del diagrama y los valores que toman las variables a

lo largo de la ejecución:x1234..100101 Cuando x vale 101 la condición de la estructura repetitiva retorna falso,en este caso finaliza el diagrama.Importante: Podemos observar que el bloque repetitivo puede no ejecutarse ninguna vez si

la condición retorna falso la primera vez.La variable x debe estar inicializada con algún valor antes que se ejecute la operación x=x +1 en caso de no estar inicializada aparece un error de compilación.

Programa:

public class EstructuraRepetitivaWhile1 {public static void main(String[] ar) {int x;x=1;while (x<=100) {

System.out.print(x);System.out.print(" - ");x = x + 1;}}}

Importante:Como podemos observar no hemos creado un objeto de la clase Scanner. Estodebido a que en este programa no hay que ingresar datos por teclado. Para las salidasutilizamos la función print, que se encuentra creada por defecto en cualquier programa quecodifiquemos en Java.Recordemos que un problema no estará 100% solucionado si no hacemos el programa enJava que muestre los resultados buscados.

Probemos algunas modificaciones de este programa y veamos que cambios se deberíanhacer para:1 - Imprimir los números del 1 al 500.2 - Imprimir los números del 50 al 100.3 - Imprimir los números del -50 al 0.4 - Imprimir los números del 2 al 100 pero de 2 en 2 (2,4,6,8 ....100).Respuestas:1 - Debemos cambiar la condición del while con x<=500.2 - Debemos inicializar x con el valor 50.

Page 6: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 6/58

3 - Inicializar x con el valor -50 y fijar la condición x<=0.4 - Inicializar a x con el valor 2 y dentro del bloque repetitivo incrementar a x en 2( x = x + 2 ).

Problema 2:

Escribir un programa que solicite la carga de un valor positivo y nos muestre desde 1 hastael valor ingresado de uno en uno.Ejemplo: Si ingresamos 30 se debe mostrar en pantalla los números del 1 al 30.Es de FUNDAMENTAL importancia analizar los diagramas de flujo y la posterior codificaciónen Java de los siguientes problemas, en varios problemas se presentan otras situaciones novistas en el ejercicio anterior.

Diagrama de flujo:

Podemos observar que se ingresa por teclado la variable n. El operador puede cargarcualquier valor.Si el operador carga 10 el bloque repetitivo se ejecutará 10 veces, ya que la condición es

Page 7: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 7/58

“Mientras x<=n ”, es decir “mientras x sea menor o igual a 10”; pues x comienza en uno y seincrementa en uno cada vez que se ejecuta el bloque repetitivo.A la prueba del diagrama la podemos realizar dándole valores a las variables; por ejemplo, siingresamos 5 el seguimiento es el siguiente:n x

5 1 (Se imprime el contenido de x)2 " "3 " "4 " "5 " "6 (Sale del while porque 6 no es menor o igual a 5)

Programa:

import java.util.Scanner;

public class EstructuraRepetitivaWhile2 {public static void main(String[] ar) {Scanner teclado=new Scanner(System.in);int n,x;System.out.print("Ingrese el valor final:");n=teclado.nextInt();x=1;while (x<=n) {System.out.print(x);System.out.print(" - ");x = x + 1;}

}}

Los nombres de las variables n y x pueden ser palabras o letras (como en este caso)La variable x recibe el nombre de CONTADOR. Un contador es un tipo especial de variableque se incrementa o decrementa con valores constantes durante la ejecución del programa.El contador x nos indica en cada momento la cantidad de valores impresos en pantalla.

Problema 3:

Desarrollar un programa que permita la carga de 10 valores por teclado y nos muestreposteriormente la suma de los valores ingresados y su promedio.

Diagrama de flujo:

Page 8: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 8/58

 En este problema, a semejanza de los anteriores, llevamos un CONTADOR llamado x quenos sirve para contar las vueltas que debe repetir el while.

Page 9: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 9/58

También aparece el concepto de ACUMULADOR (un acumulador es un tipo especial devariable que se incrementa o decrementa con valores variables durante la ejecución delprograma)Hemos dado el nombre de suma a nuestro acumulador. Cada ciclo que se repita laestructura repetitiva, la variable suma se incrementa con el contenido ingresado en la

variable valor.La prueba del diagrama se realiza dándole valores a las variables:valor suma x promedio0 0(Antes de entrar a la estructura repetitiva estos son los valores).5 5 116 21 27 28 310 38 42 40 520 60 65 65 7

5 70 810 80 92 82 108 90 119

Este es un seguimiento del diagrama planteado. Los números que toma la variable valordependerá de qué cifras cargue el operador durante la ejecución del programa.El promedio se calcula al salir de la estructura repetitiva (es decir primero sumamos los 10valores ingresados y luego los dividimos por 10)Hay que tener en cuenta que cuando en la variable valor se carga el primer valor (en esteejemplo 5) al cargarse el segundo valor (16) el valor anterior 5 se pierde, por ello la

necesidad de ir almacenando en la variable suma los valores ingresados.

Programa:

import java.util.Scanner;

public class EstructuraRepetitivaWhile3 {public static void main(String[] ar) {Scanner teclado=new Scanner(System.in);int x,suma,valor,promedio;x=1;

suma=0;while (x<=10) {System.out.print("Ingrese un valor:");valor=teclado.nextInt();suma=suma+valor;x=x+1;}promedio=suma/10;System.out.print("La suma de los 10 valores es:");

Page 10: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 10/58

System.out.println(suma);System.out.print("El promedio es:");System.out.print(promedio);}

}

Problema 4:

Una planta que fabrica perfiles de hierro posee un lote de n piezas.Confeccionar un programa que pida ingresar por teclado la cantidad de piezas a procesar yluego ingrese la longitud de cada perfil; sabiendo que la pieza cuya longitud estécomprendida en el rango de 1,20 y 1,30 son aptas. Imprimir por pantalla la cantidad depiezas aptas que hay en el lote.

Diagrama de flujo: 

Page 11: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 11/58

 Podemos observar que dentro de una estructura repetitiva puede haber estructurascondicionales (inclusive puede haber otras estructuras repetitivas que veremos másadelante)En este problema hay que cargar inicialmente la cantidad de piezas a ingresar ( n ),seguidamente se cargan n valores de largos de piezas.Cada vez que ingresamos un largo de pieza (largo) verificamos si es una medida correcta

Page 12: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 12/58

(debe estar entre 1.20 y 1.30 el largo para que sea correcta), en caso de ser correcta laCONTAMOS (incrementamos la variable cantidad en 1)Al contador cantidad lo inicializamos en cero porque inicialmente no se ha cargado ningúnlargo de medida.Cuando salimos de la estructura repetitiva porque se han cargado n largos de piezas

mostramos por pantalla el contador cantidad (que representa la cantidad de piezas aptas)En este problema tenemos dos CONTADORES:x (Cuenta la cantidad de piezas cargadas hasta el momento)cantidad (Cuenta los perfiles de hierro aptos)

Programa:

import java.util.Scanner;

public class EstructuraRepetitivaWhile4 {public static void main(String[] ar) {

Scanner teclado=new Scanner(System.in);int x,cantidad,n;float largo;x=1;cantidad=0;System.out.print("Cuantas piezar procesará:");n=teclado.nextInt();while (x<=n) {System.out.print("Ingrese la medida de la pieza:");largo=teclado.nextFloat();if (largo>=1.20 && largo<=1.30) {cantidad = cantidad +1;

}x=x + 1;}System.out.print("La cantidad de piezas aptas son:");System.out.print(cantidad);}}

Problemas propuestosHa llegado la parte fundamental, que es el momento donde uno desarrolla individualmenteun algoritmo para la resolución de problemas.El tiempo a dedicar a esta sección EJERCICIOS PROPUESTOS debe ser mucho mayor queel empleado a la sección de EJERCICIOS RESUELTOS.

La experiencia dice que debemos dedicar el 80% del tiempo a la resolución individual deproblemas y el otro 20% al análisis y codificación de problemas ya resueltos por otraspersonas.Es de vital importancia para llegar a ser un buen PROGRAMADOR poder resolver problemasen forma individual.

1. Escribir un programa que solicite ingresar 10 notas de alumnos y nos informe cuántostienen notas mayores o iguales a 7 y cuántos menores.

Page 13: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 13/58

2. Se ingresan un conjunto de n alturas de personas por teclado. Mostrar la alturapromedio de las personas.

3. En una empresa trabajan n empleados cuyos sueldos oscilan entre $100 y $500,realizar un programa que lea los sueldos que cobra cada empleado e informe cuántosempleados cobran entre $100 y $300 y cuántos cobran más de $300. Además el

programa deberá informar el importe que gasta la empresa en sueldos al personal.4. Realizar un programa que imprima 25 términos de la serie 11 - 22 - 33 - 44, etc. (No

se ingresan valores por teclado)5. Mostrar los múltiplos de 8 hasta el valor 500. Debe aparecer en pantalla 8 - 16 - 24,

etc.6. Realizar un programa que permita cargar dos listas de 15 valores cada una. Informar

con un mensaje cual de las dos listas tiene un valor acumulado mayor (mensajes"Lista 1 mayor", "Lista 2 mayor", "Listas iguales")Tener en cuenta que puede haber dos o más estructuras repetitivas en un algoritmo.

7. Desarrollar un programa que permita cargar n números enteros y luego nos informecuántos valores fueron pares y cuántos impares.Emplear el operador “%” en la condición de la estructura condicional:  

if (valor%2==0) //Si el if da verdadero luego es par. 

13 Estructuras Repetitivas3.1 El concepto.Se denominan estructuras repetitivas a las estructuras que permiten incluir dentrode ellas un grupo de instrucciones que deben hacerse mientras una ciertacondición sea válida, esto significa que dichas instrucciones pueden ejecutarse 0 o

n veces.Una estructura repetitiva está compuesta de una instrucción de repetición, lacondición y el bloque de instrucciones que deberá ejecutarse mientras la condiciónse cumpla. Java ofrece tres tipos de estructuras repetitivas, las cuales sepresentarán en este capítulo.3.2 Instrucción while (condición).Es una de las instrucciones repetitivas más utilizadas en los diferentes lenguajesde programación, prácticamente todos la implementan. La forma en la cualfunciona es equivalente a mencionar, en una conversación casual, algo como:

Page 14: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 14/58

Mientras estés estudiando en la universidad, deberás llegar a casa antes de las 11 p.m . Es claro que mientras la persona no termine el semestre que estácursando es su obligación estar en la casa, a más tardar, a las 11 de la noche.

Mientras el equipo siga ganando y no se presenten faltas por disciplina, se les seguirá entregando el premio . Para seguir obteniendo el premio, es necesario

que el equipo siga ganando y no se presenten faltas contra la disciplina.Mientras consigues completar la plata para comprar un televisor para ti, o 

encuentras una promoción, deberás seguir viendo televisión con nosotros . Aquíes claro que mientras no se cumpla una, o ambas, condiciones la personadeberá ver televisión con la familia.En java estas situaciones se manejan a través de la instrucción while ( condición ),cuya sintaxis se presenta a continuación:while ( condición ) { 

 /** En este espacio debe ir el bloque de código que se requiere se ejecutemientras la condición se cumpla. */ 

 }Del anterior bloque, se deben hacer las siguientes consideraciones:

while es indispensable en el encabezado del bloque.

posible dejar los paréntesis vacíos. La condición se maneja igual que en lasestructuras selectivas, es decir puede ser simple o estar compuesta de variascondiciones unidas a través de operadores y (& - &&) u o (| - ||).2

while , lasinstrucciones contenidas en él no se ejecutarán ni una vez.

instrucciones que estén sujetas al cumplimiento de la condición. Si es unainstrucción no son necesarias, si son varias si lo son, pero es recomendableutilizarlas siempre. Sea que se utilicen o no llaves, debe ser claro que las

instrucciones dentro del while forman un bloque de código, así que si sedefinen variables dentro de este bloque, dejaran de existir una vez se salga deél.Ejercicio Resuelto:Problema: Suponga que se desea elaborar un programa que calcule e imprima losvalores de la serie de Fibonnacci, menores al número cincuenta.Análisis:

Salidas.

repetitiva.Entradas.

 // Observe este es un caso en el cual ¡ no se requiere pedir nada !

Procedimiento.

Page 15: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 15/58

 

Código en java:import java.util.*;public class Fibonacci {public static void main(String args[]) {

generarNúmeros();}public static void generarNúmeros(){3int anterior = 0, temporal = 0;int siguienteTérmino = 1;System.out.println(anterior);while (siguienteTérmino < 50) {System.out.println(siguienteTérmino);temporal = siguienteTérmino;siguienteTérmino += anterior;anterior = temporal;

}}}Ejercicios Resueltos:Problema: Suponga que se desea elaborar un programa que calcule e imprima losvalores de la serie de Fibonnacci, menores que cincuenta. Los números pares deben irmarcados con un asterisco.Análisis:

Salidas.

acompañado de un asterisco. Esta salida es repetitiva.Entradas .

Procedimiento.

alor de retorno:

Page 16: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 16/58

 

marcados con un asterisco.

e siguienteTérmino + ' '.

Código en java:import java.util.*;public class FibonacciConParesResaltados {4public static void main(String args[]) {generarNúmeros();}public static void generarNúmeros(){int anterior = 0, temporal = 0;int siguienteTérmino = 1;char signo = '*';System.out.println(anterior+" "+signo);

while (siguienteTérmino < 50) {signo = (siguienteTérmino % 2 == 0) ? '*' : ' ';System.out.println(siguienteTérmino+" "+signo);temporal = siguienteTérmino;siguienteTérmino += anterior;anterior = temporal;}}}Problema: Se necesita saber el valor total de los libros que hay en una librería, se sabeque el valor de un libro se calcula multiplicando el número de páginas por 100. Si laedición no es nacional o el libro fue editado este año se le aplica un recargo, al valor

obtenido, del 10%. No se sabe cuántos libros hay en la librería.Análisis:

Salidas.bros. Esta salida es única.

Entradas 

Page 17: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 17/58

Procedimiento.

ring[ ]):void

5

bro.

Código en java:import java.util.Scanner.*;public class ValorDelLibro {public static void main (String arg[] ) {gestiónLibros();}public static void gestiónLibros(){Scanner lector = new Scanner(System.in);char respuesta = 's';

Page 18: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 18/58

double valorTotal = 0;while ((respuesta == 's') || (respuesta == 'S')){double valor = 0;System.out.println("Digite la cantidad de páginas");int númeroDePáginas = lector.nextInt ();

System.out.println("Digite (1) si es edición nacional \n(2) si es extranjera");int nacional = lector.nextInt ();System.out.println("Digite (1) si es edición de este año \n(2) si es de otro año");int año = lector.nextInt ();valor = calcularBase(númeroDePáginas);if ((nacional == 2) || (año == 1)) {valor += recargo(valor);}valorTotal += valorDelLibro;System.out.println("¿ Hay más libros ?");respuesta =lector.nexLine ().charAt(0);}

System.out.println ("El valor total de los libros es "+valorTotal);}public static double calcularBase(int páginas){return páginas * 100;}public static double recargo(double base){return base* 0.1;}}6Problema: Se necesita sumar los números pares entre un valor cualquiera, digitado por elusuario, y 100.

Análisis:Salidas.

Entradas 

Procedimiento.

El número a partir del cual se debe sumar

Page 19: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 19/58

 

ador quedó con un valor diferente a 0

Código en java:import java.util.Scanner.*;public class Pares {public static void main(String args[]) {sumar();}public static void sumar(){

Scanner lector = new Scanner(System.in);System.out.println("Digite el número con el que se inicia la suma: ");int topeInferior = lector.nextInt();if (topeInferior %2 == 1){topeInferior++; }double acumulador = 0;while (topeInferior <= 100) {acumulador += topeInferior;topeInferior += 2;}if (acumulador > 0) {System.out.println("La suma dio: " + acumulador);

7} else {System.out.println("¡El tope inferior fue mayor que 100!");}}}Ejercicios Propuestos.1. Se le ha pedido que haga un programa que permita calcular el combinatorio de dosnúmeros naturales, siempre y cuando el primero sea mayor o igual al segundo. Laforma de calcular el combinatorio de dos números naturales es:númeroUnoCnúmeroDos = númeroUno! / ((númeroUno-númeroDos)! * númeroDos!)Tenga en cuenta:

El factorial de un número se calcula multiplicando desde 1 hasta el número, incluido.Por ejemplo: 3! = 1 * 2 * 3 = 6

factorial de cero es 1, por definición.Análisis:

Salidas.Entradas.Procedimiento.

8

Page 20: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 20/58

Código en java:2. Se le ha encomendado la labor de elaborar un programa que le permita a un niñoestudiar las tablas de multiplicar. Las condiciones que se le han puesto son:

debe mostrar el resultado correcto.3. En un teatro se ha decidido que la entrada sea controlada por una máquina, y a ustedse le ha pedido que haga el programa que diga si una persona puede ingresar o no. Aliniciar labores se debe indicar cuál es la censura de la película (para todos, mayores de12 años o mayores de 18 años), además el valor de la entrada. Una persona puedeingresar si no han entrado más de 30 personas, que es la capacidad máxima delteatro, si la persona tiene la edad requerida y si la boleta que compró cumple con elvalor de la entrada. Entran personas hasta que se llene el teatro o hasta que la edadde la persona sea cero. Al terminar la máquina debe mostrar un mensaje que indiquecuántas personas ingresaron y cuál fue la edad promedio de los espectadores.9

3.3 Instrucción do – while (condición).Esta instrucción indica que un bloque de instrucciones debe ejecutarse mínimouna vez y mientras que la condición siga siendo válida. Equivaldría a comentar enuna conversación casual algo como:

Ponle tantas capas de pintura a esa pared como sea necesario para que desaparezca ese color . Es claro que debe aplicarse como mínimo una capa depintura y después de eso, tantas como se requiera para que el antiguo colordesaparezca.

Él comerá pasteles hasta que se acaben o encuentre el premiado . Aquí seindica que se comerá al menos un pastel, y se detendrá si es el premiado, o sitermina con todos los pasteles existentes.En java se cuenta con la instrucción do  – while ( condición ), cuya sintaxis se

presenta a continuación:do { 

 /** En este espacio debe ir el bloque de código que se requiere se ejecute, almenos una vez, y siga ejecutándose mientras la condición se cumpla. */ 

 } while ( condición ); Del anterior bloque, se deben hacer las siguientes consideraciones:

do es indispensable en el encabezado del bloque.

instrucciones que se quiera incluir en la instrucción. Sigue siendo válido el quelas instrucciones contenidas en esta instrucción conforman un bloque decódigo, y su comportamiento es idéntico a los casos ya mencionados.

while , e inmediatamente

después de la última de las instrucciones que conforman el bloque a repetir.Aquí también se requiere condición, o sea no es posible dejar los paréntesisvacíos. La condición se maneja exactamente igual que en los casos anteriores.

en el bloque se ejecutarán una vez, puesto que la condición se verificaDESPUÉS de la primera ejecución del bloque.Ejercicios Resueltos:Problema: Se necesita un programa que muestre, por pantalla, los primeros 100 númerospares. Además se necesita que cumpla con el siguiente formato:

Page 21: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 21/58

de par es múltiplo de cuatro, al lado del número debe aparecer la palabra'cuatro'.Los bloques de código, en java, están delimitados por las llaves, así que si se define unavariable dentro del bloque de código demarcado por la instrucción do  – while (condición),esta

variable NO puede utilizarse en la condición, pues la condición se encuentra por fuera delbloque de código.10

, al lado del número debe aparecer la palabra'ambos'.Análisis:

Salidas.

Entradas Procedimiento.método main:

+main(String[ ]):voidsalidas:

tros:

ntradas:

entre 5 es 0

“cuatro” 

Page 22: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 22/58

 

Código en java:import java.util.Scanner.*;public class ParesConMensaje {

public static void main(String arg[]) {11numeros();}public static numeros(){int contador = 1;int nuevoPar;do {nuevoPar = contador++ * 2;String mensaje = asignaMensaje(nuevoPar);System.out.println(nuevoPar + " " + mensaje);} while (contador < 100);

}public static String asignaMensaje(int par){if (par % 4 == 0 && par % 5 == 0) {return “ambos”; if (par % 4 == 0) {return “cuatro”; if (par % 5 == 0) {return “cinco”; return “ ”; }}Problema: Se necesita un programa que genere números en forma aleatoria. Los

números deben estar entre 1 y 10. El usuario jugará a adivinar el número, y cuando lologre, el programa deberá decirle cuántos intentos necesitó.Análisis:

Salidas: 

Entradas 

Procedimiento.

mero.

Page 23: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 23/58

 

12

Código en java:import java.util.Scanner.*;import java.util.*;public class Adivine {public static void main(java.lang.String[] args) {// Las dos siguientes instrucciones permiten obtener un número en forma aleatoria.Random generador = new Random();

int número = generador.nextInt(10000);número %= 10;número++;jugar(número);}public static void jugar(int número){int contador = 0, nuevoNúmero;do {contador++;System.out.println("Digita un número entre 1 y 10");nuevoNúmero = lector.nextInt();if (nuevoNúmero = número) {

System.out.println("Lo lograste, al " + contador + " intento"); }} while (número != nuevoNúmero);}}Problema: Se necesita un programa que defina si una palabra es palíndromo1 o no.Análisis:

Salidas.la palabra es o no palíndromo.

Entradas 

Procedimiento.

es palíndromo

Page 24: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 24/58

 

1 “Palabra o frase que se lee igual de izquierda a derecha, que de derecha a izquierda”.  Según el Diccionario de la Lengua Española. Vigésima segunda edición.13

= longitud de la palabra – 1.

contadorDos

contadorDos )

Código en java:import java.util.Scanner.*;public class Palíndromo {public static void main(java.lang.String[] args) {Scanner lector = new Scanner(System.in);System.out.println("Digite la palabra a evaluar: ");

String palabra = lector.nexLine();boolean es = palíndromo(palabra);if (es) {System.out.println(“La palabra es palíndromo”); } else {System.out.println(“La palabra NO es palíndromo”); }public static boolean palíndromo(String palabra){int contadorUno = 0;// ¡¡ debe investigar que hace length() !!int contadorDos = palabra.length() - 1;boolean palíndromo = true;

do {// ¡ debe investigar que hacer charAt(valor entero) !if (palabra.charAt(contadorUno) != palabra.charAt(contadorDos)) {System.out.println("No es palíndromo");palíndromo = false;}contadorUno++;contadorDos--;} while (contadorUno < contadorDos && palíndromo);

Page 25: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 25/58

return true;}}Ejercicios Propuestos:1. Haga un programa que le permita guardar en un arreglo de n posiciones los factoriales

de los n primeros números primos.14Análisis:

Salidas.Entradas.Procedimiento.

Código en java:152. Un equipo de fútbol está en problemas, así que sus dueños han decidido que seguiránsosteniéndolo si el promedio de las calificaciones de sus jugadores, después de cadapartido es superior a 6, y le han contratado para que elabore un programa que pida lascalificaciones individuales y devuelva el promedio de ellas. Recuerde que juegan once

 jugadores y que puede haber hasta tres cambios, así que mínimo debe pedir oncecalificaciones y máximo 14.3. Los dueños del mismo equipo de fútbol le han pedido un nuevo programa, que lespermita decidir si un jugador sigue en el equipo o no. Al terminar cada torneo seevalúa el desempeño de los jugadores teniendo en cuenta el promedio de suscalificaciones en los partidos que jugó, el número de tarjetas amarillas y rojas querecibió y la cantidad de partidos en que jugó como titular. Y los requisitos para quecontinúe en el equipo son:

calificaciones debe ser superior a 5.5

equipo.

ación se digitará partido a partido.3.4 Instrucción for (inicialización ; condición ; incremento).Esta instrucción es ligeramente diferente a las otras, en el sentido de que no selimita a dar una condición, sino que permite dar un valor inicial, y una forma deincremento, con lo cual se simplifica la programación. Dado que combina tresacciones en un solo paso, no es fácil pensar en una situación de la vida real quepueda ser asociada a ella.

Empieza con la tabla del uno, sigue hasta la del 10, aprendiendo cada día una .Aquí se da el punto de partida, debe empezar con la tabla del uno, y seguirestudiando hasta que se sepa todas hasta la del 10, además es claro que cadadía debe aprender la del siguiente número.En java se cuenta con la instrucción for( inicialización ; condición ; incremento ),

cuya sintaxis se presenta a continuación:for ( inicialización ; condición ; incremento ) { 

 /** En este espacio debe ir el bloque de código que se requiere se ejecutemientras la condición se cumpla. */ 

 }Del anterior bloque, se deben hacer las siguientes consideraciones:

for es indispensable en el encabezado del bloque.

puede trabajar con cualquiera de los tipos de datos numéricos, incluidos los

Page 26: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 26/58

reales. Además puede hacerse la definición de la variable y su inicialización opuede sólo hacerse la inicialización.Es decir que los siguientes bloques de código son correctos:

for (int contador = 0 ; ... ; ... ) { 

16. . .

 }

double contador; . . .for (contador = 0 ; ... ; ... ) { . . .

 }

pueden definirse e inicializarse tantas como se requiera, la única restricción esque a todas debe hacérseles lo mismo: o todas se declaran, del mismo tipo, e

inicializan o todas se han declarado previamente, y pueden ser de tiposdiferentes, y sólo se inicializan.Es decir que los siguientes bloques de código son correctos:

for (int contador = 0, número = 8 ; ... ; ... ) {  /** ni contador, ni número pueden haber sido declaradas por fuera de este bloque, pues generará error diciendo que esas variables ya existen.*/ . . .

 }

double contador; int número; 

. . .for (contador = 0, número = 8 ; ... ; ... ) { . . .

 }

condición puede estar asociada a la variable o variables que se manejaron enla parte de la inicialización. Sin embargo esto NO es necesario. En otraspalabras la condición puede estar construida a partir de valores completamenteindependientes a los trabajados en la parte de inicialización. Igualmente lacondición puede ser simple o compleja, o sea puede ser una condición, ovarias unidas con los operadores y (& &&) y o (| ||)Es decir que los siguientes bloques de código son correctos:

e la inicialización;boolean cierto = true; . . .for (; cierto ; ...) { 

 // seguirá en el ciclo mientras la variable cierto no cambie de valor.. . .

 }

condición :

Page 27: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 27/58

boolean cierto = true; 17. . .for (int contador = 0 ; cierto ; ...) { . . .

 }

for (int contador = 0 ; contador < 10 ; ...) { . . .

 }debe tenerse en cuenta que los

valores que se incrementen pueden estar relacionados con los dos bloquesanteriores, pero que NO tienen que estarlo.Es decir que los siguientes bloques de código son correctos:

boolean cierto = true; double número = 0; 

. . .for (int contador = 0 ; cierto ; número += 2 ) { . . .

 }

boolean cierto = true; . . .for (int contador = 0 ; cierto ; contador++ ) { . . .

 }la condición:

double contador; 

. . .for (contador = 0 ; contador < 10 ; contador++ ) { . . .

 }for , y su bloque de código asociado, se realiza lo que

aparezca en la parte de inicialización, después se evalúa la condición y sepasa a ejecutar las instrucciones contenidas en el bloque de código. Una vezse ha concluido la ejecución del bloque, se ejecuta lo que corresponde a laparte del incremento e inmediatamente después se evalúa, de nuevo, lacondición. Se continúa así mientras la condición se siga cumpliendo. Asípodemos concluir que la inicialización se ejecuta una sola vez, la revisión de lacondición y el incremento se continúan realizando mientras la condición siga

siendo cierta.for , al evaluar la condición esta no se cumple,

las instrucciones contenidas en él no se ejecutarán ni una vez.

se quiera incluir en él.18

concepto de bloque de código, es decir quelas variables definidas en este bloque, serán desconocidas fuera de él,incluidas las que sean definidas en la parte de inicialización.

Page 28: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 28/58

doscon punto y coma, son opcionales tal como se ha visto hasta ahora. O sea quees posible dejar que los paréntesis contengan únicamente los signos de puntoy coma, que si son obligatorios.Es decir que la siguiente sintaxis es correcta:

for (; ;) { . . .

 }Ejercicios Resueltos.Problema: Se necesita un programa que genere un número, en forma aleatoria, entre 1 y10. El usuario jugará a adivinarlo, pero sólo tiene 5 oportunidades, ni una más.Análisis:

Salidas.indique y muestre cuántos intentos hizo; de

lo contrario un mensaje que muestre que perdió.Entradas 

Procedimiento.

radas:

tador+ “ intento”. 

19Código en java:import java.util.Scanner.*;import java.util.*;public class Adivine {public static void main(java.lang.String[] args) {Random generador = new Random();int número = generador.nextInt(10000);

Page 29: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 29/58

número %= 10;número++;jugar(número);}public static void jugar(int número){

Scanner lector = new Scanner(System.in);boolean encontró = false;int contador, nuevoNúmero;for (contador = 0;(contador < 5 && !encontró); contador++) {System.out.println("Digita un número entre 1 y 10");nuevoNúmero = lector.nextInt();if (nuevoNúmero == número) {System.out.println("Lo lograste, al " + (contador + 1) + " intento");encontró = true;}}if (!encontró) {

System.out.println("¡ Perdiste !.\nEl número era: "+número);}}}Problema: El cuadrado de un número se obtiene al sumar tantos números impares comoindique el número. La suma debe empezar con el uno (1). Así:El cuadrado de 1 :1 = 1El cuadrado de 2 :1 + 3 = 4El cuadrado de 3:1 + 3 + 5 = 9

Se debe desarrollar un programa que utilice este método para calcular el cuadrado decualquier número entero que el usuario digite.Análisis:

Salidas.

Entradas número.

Procedimiento.

20-1.

Page 30: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 30/58

 

en dos.

Código en java:import java.util.Scanner.*;public class Cuadrado {public static void main(String[] args) {Scanner lector = new Scanner(System.in);System.out.println("¿A qué número desea encontrarle el cuadrado?");int número;

int unNúmero = lector.nextInt();if (unNúmero < 0) {unNúmero *= -1;}cuadrado(unNúmero);}public static void cuadrado (int número) {int acumulador, impar, contador;for (contador=1, acumulador=0, impar=1; contador<=número; contador++, impar+= 2) {acumulador += impar;}System.out.println("El cuadrado de " + unNúmero + " es: " + acumulador);

}}Ejercicios Propuestos:1. Se le ha pedido que elabore un programa que pida cadenas de caracteres hasta queocurra alguna de estas cosas:

tildes; por ejemplo, “dábale arroz a la zorra el abad”, debe convertirse en “dabale  arroz a la zorra el abad” y esta cadena es la que debe evaluarse.  2. Se le ha pedido que elabore un programa que genere una serie conformada por cuatro

números diferentes, comprendidos entre uno y cincuenta. Un usuario intentaráadivinarlos y tendrá seis oportunidades para cada número, pero si hace los seisintentos y no acierta el número, el programa debe terminar e informarle que perdió. Losnúmeros de la serie deben ser generados por su programa en forma aleatoria, y no esnecesario que el usuario los adivine en orden.213.5 Matrices.Cuando se presentó el tema de arreglos, capítulo uno sección 11, se dijo que esteera un tipo de datos que podía contener otros datos, organizados mediante una

Page 31: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 31/58

estructura dada. Al revisar esta definición se afirma que los datos que es posiblealmacenar en arreglos pueden pertenecer a cualquiera de los grupos de datosque maneja el lenguaje, independiente de que se trate de valores o de datosreferenciados. Hasta el momento se ha trabajado con arreglos que contienenvalores pertenecientes a los tipos básicos; con datos pertenecientes a String , que

es uno de los dos tipos de datos referenciados que se conocen; pero no se haintentado trabajar un arreglo pidiéndole que contenga el otro tipo de datoreferenciado: los arreglos.Java permite que un arreglo contenga otros arreglos, y si todos estos arreglostienen la misma longitud, entonces se comporta como una matriz. Así que si, porejemplo, se quisiera definir una matriz de dimensiones 5x4 (5 filas, 4 columnas),que contenga valores enteros; en realidad se definiría un arreglo de 5 posiciones,cada una de las cuales contendrá un arreglo de enteros de 4 posiciones, y elcódigo requerido para ello sería:int[ ][ ] matriz = new int[5][4]; lo cual permitiría obtener algo similar a esto:0 0 0 0

0 0 0 00 0 0 00 0 0 00 0 0 0Para hacer referencia a una casilla debe darse el nombre de la matriz, el númerode la fila, entre corchetes, y el número de la columna, también entre corchetes;esto es así bien sea que se quiera asignar un valor a la casilla u obtener el valorcontenido en ella.Por ejemplo, si en la matriz del ejemplo anterior, se quisiera asignar 1 a la casillaque ocupa la fila 0 y la columna 1, el código requerido para ello sería:matriz[0][1] = 1; y si a una variable entera se le quisiera asignar el valor contenido en la casilla que

está en la fila 3, columna 0, sería:int variable = matriz[3][0] = 1; 22Ejercicio Resuelto.Problema: Se necesita un programa que defina una matriz de enteros, que tenga cincofilas y cuatro columnas, después se quiere que quede llena con los números del 0 al 9, ysi es necesario volver a empezar, haga. Es decir algo así:0 1 2 34 5 6 78 9 0 12 3 4 56 7 8 9

Análisis:Salidas.

Entradas Procedimiento.

Page 32: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 32/58

 

iz:

uno en uno

ma indicada

23

ambiar de líneaCódigo en java:import java.util.Scanner.*;public class LlenarMatriz {public static void main(java.lang.String[] args) {llenarMatriz();}public static void llenarMatriz(){int matriz[][] = new int[5][4];int contador = 0;for (int fila = 0; fila < 5; fila++) {

for (int columna = 0; columna < 4; columna++) {matriz[fila][columna] = contador++;if (contador == 10) {contador = 0;}}}mostrarMatriz(matriz);}

Page 33: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 33/58

public static void mostrarMatriz(int[][] matriz){for (int fila = 0; fila < 5; fila++) {for (int columna = 0; columna < 4; columna++) {System.out.print(matriz[fila][columna] + " ");}

System.out.println(" ");}}}Ejercicios Propuestos:1. ¿Qué salida produce el siguiente código?import java.util.*;public class Matriz {public static void main(java.lang.String[] args) {Scanner lector = new Scanner(System.in);int matriz[][] = new int[5][5];for (int fila = 0; fila < 5; fila++){

for (int columna = 0; columna < 5; columna++){matriz[fila][columna] = fila*columna;if (matriz[fila][columna] < 10) {System.out.print (" "+matriz[fila][columna]+" ");} else {System.out.print (" "+matriz[fila][columna]+" "); }}System.out.println();}}}Salida.

242. Se requiere una clase ejecutable, en java, que permita crear una matriz dedimensiones filas x columnas, donde filas y columnas son valores enteros dados por elusuario; y que llene cada casilla con el producto de la fila por la columna que dichacasilla ocupa.3. Elaborar una clase ejecutable, en java, la cual permita crear una matriz cuadrada, esdecir el número de las filas es igual al número de las columnas, y la llene de acuerdoal siguiente patrón:0 0 0 0 01 0 0 0 02 3 0 0 04 5 6 0 0

7 8 9 10 04. Elaborar una clase ejecutable, en java, la cual permita crear una matriz cuadrada, y lallene de acuerdo al siguiente patrón:0 0 0 0 10 0 0 2 00 0 3 0 00 4 0 0 05 0 0 0 05. Elaborar una clase ejecutable, en java, la cual permita crear una matriz cuadrada, y la

Page 34: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 34/58

llene de acuerdo al siguiente patrón:1 0 2 0 30 4 0 5 06 0 7 0 80 9 0 10 0

11 0 12 0 136. Elaborar una clase ejecutable, en java, la cual permita crear una matriz cuadrada, y lallene de acuerdo al siguiente patrón:1 2 3 4 510 9 8 7 611 12 13 14 1520 19 18 17 1621 22 23 24 257. Dada una matriz de dimensiones filas x columnas, verificar si la matriz es simétrica2.8. Dada una matriz cuadrada, de dimensiones digitadas por el usuario, elaborar unaclase ejecutable, en java, que intercambie las diagonales.2

Una matriz es simétrica si se cumplen las siguientes condiciones:a) filas = columnas

b) Matriz(fila,columna) = Matriz(columna,fila) para 0 <= fila < filas y 0 <= columna <columnas

- Estructura repetitiva for

Cualquier problema que requiera una estructura repetitiva se puede resolver empleando laestructura while. Pero hay otra estructura repetitiva cuyo planteo es más sencillo en ciertassituaciones.En general, la estructura for se usa en aquellas situaciones en las cuales CONOCEMOS lacantidad de veces que queremos que se ejecute el bloque de instrucciones. Ejemplo: cargar10 números, ingresar 5 notas de alumnos, etc. Conocemos de antemano la cantidad deveces que queremos que el bloque se repita. Veremos, sin embargo, que en el lenguaje Javala estructura for puede usarse en cualquier situación repetitiva, porque en última instancia noes otra cosa que una estructura while generalizada.Representación gráfica:

Page 35: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 35/58

 En su forma más típica y básica, esta estructura requiere una variable entera que cumple lafunción de un CONTADOR de vueltas. En la sección indicada como "inicialización contador",se suele colocar el nombre de la variable que hará de contador, asignándole a dicha variableun valor inicial. En la sección de "condición" se coloca la condición que deberá ser verdaderapara que el ciclo continúe (en caso de un falso, el ciclo se detendrá). Y finalmente, en la

sección de "incremento contador" se coloca una instrucción que permite modificar el valor dela variable que hace de contador (para permitir que alguna vez la condición sea falsa)Cuando el ciclo comienza, antes de dar la primera vuelta, la variable del for toma el valorindicado en la sección de de "inicialización contador". Inmediatamente se verifica, en formaautomática, si la condición es verdadera. En caso de serlo se ejecuta el bloque deoperaciones del ciclo, y al finalizar el mismo se ejecuta la instrucción que se haya colocadoen la tercer sección.Seguidamente, se vuelve a controlar el valor de la condición, y así prosigue hasta que dichacondición entregue un falso.Si conocemos la cantidad de veces que se repite el bloque es muy sencillo emplear un for,por ejemplo si queremo que se repita 50 veces el bloque de instrucciones puede hacerse así:

La variable del for puede tener cualquier nombre. En este ejemplo se la ha definido con elnombre f.Analicemos el ejemplo:- La variable f toma inicialmente el valor 1.- Se controla automáticamente el valor de la condición: como f vale 1 y esto es menorque 50, la condición da verdadero.- Como la condición fue verdadera, se ejecutan la/s operación/es.- Al finalizar de ejecutarlas, se retorna a la instrucción f++, por lo que lavariable f se incrementa en uno.- Se vuelve a controlar (automáticamente) si f es menor o igual a 50.Como ahora su valor es 2, se ejecuta nuevamente el bloque de instrucciones e

Page 36: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 36/58

incrementa nuevamente la variable del for al terminar el mismo.- El proceso se repetirá hasta que la variable f sea incrementada al valor 51.En este momento la condición será falsa, y el ciclo se detendrá.La variable f PUEDE ser modificada dentro del bloque de operaciones del for, aunque estopodría causar problemas de lógica si el programador es inexperto.

La variable f puede ser inicializada en cualquier valor y finalizar en cualquier valor. Además,no es obligatorio que la instrucción de modificación sea un incremento del tipo contador(f++).Cualquier instrucción que modifique el valor de la variable es válida. Si por ejemplo seescribe f=f+2 en lugar de f++, el valor de f será incrementado de a 2 en cada vuelta, y no dea 1. En este caso, esto significará que el ciclo no efectuará las 50 vueltas sino sólo 25.

Problema 1:

Realizar un programa que imprima en pantalla los números del 1 al 100.

Diagrama de flujo:

Podemos observar y comparar con el problema realizado con el while. Con la estructurawhile el CONTADOR x sirve para contar las vueltas. Con el for el CONTADOR f cumpledicha función.Inicialmente f vale 1 y como no es superior a 100 se ejecuta el bloque, imprimimos elcontenido de f, al finalizar el bloque repetitivo se incrementa la variable f en 1, como 2 no essuperior a 100 se repite el bloque de instrucciones.Cuando la variable del for llega a 101 sale de la estructura repetitiva y continúa la ejecucióndel algoritmo que se indica después del círculo.La variable f (o como sea que se decida llamarla) debe estar definida como una variablemás.

Programa:

public class EstructuraRepetitivaFor1 {public static void main(String[] ar) {

Page 37: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 37/58

int f;for(f=1;f<=100;f++) {System.out.print(f);System.out.print("-");

}}} 

- Estructura repetitiva do while

La estructura do while es otra estructura repetitiva, la cual ejecuta al menos una vez subloque repetitivo, a diferencia del while o del for que podían no ejecutar el bloque.Esta estructura repetitiva se utiliza cuando conocemos de antemano que por lo menos unavez se ejecutará el bloque repetitivo.La condición de la estructura está abajo del bloque a repetir, a diferencia del while o del forque está en la parte superior.Representación gráfica:

El bloque de operaciones se repite MIENTRAS que la condición sea Verdadera.Si la condición retorna Falso el ciclo se detiene. En Java, todos los ciclos repiten porverdadero y cortan por falso.Es importante analizar y ver que las operaciones se ejecutan como mínimo una vez.

Page 38: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 38/58

Problema 1:

Escribir un programa que solicite la carga de un número entre 0 y 999, y nos muestre unmensaje de cuántos dígitos tiene el mismo. Finalizar el programa cuando se cargue el valor0.

Diagrama de flujo:

No hay que confundir los rombos de las estructuras condicionales con los de las estructurasrepetitivas do while.En este problema por lo menos se carga un valor. Si se carga un valor mayor o igual a 100se trata de un número de tres cifras, si es mayor o igual a 10 se trata de un valor de dosdígitos, en caso contrario se trata de un valor de un dígito. Este bloque se repite hasta que

Page 39: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 39/58

se ingresa en la variable valor el número 0 con lo que la condición de la estructura do whileretorna falso y sale del bloque repetitivo finalizando el programa.

Programa:

import java.util.Scanner;

public class EstructuraRepetitivaDoWhile1 {public static void main(String[] ar) {Scanner teclado=new Scanner(System.in);int valor;do {System.out.print("Ingrese un valor entre 0 y 999 (0 finaliza):");valor=teclado.nextInt();if (valor>=100) {System.out.println("Tiene 3 dígitos.");

} else {if (valor>=10) {System.out.println("Tiene 2 dígitos.");} else {System.out.println("Tiene 1 dígito.");}}} while (valor!=0);}}

Capítulo 30: 

Matrices, arrays o vectores en java 

Page 40: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 40/58

Enlaces patrocinadosLeading Open Source JMS Get Enterprise-Class JMS Messaging. Free Downloads, Docs & Training!fusesource.com 

Matrices, arrays o vectores en java. 

Java posee la capacidad de definir un conjunto de variables del mismo tipoagrupadas todas ellas bajo un mismo nombre, y distinguiéndolas mediante un índicenumérico.

Para definir un array en java es como definir una variable o atributo, pero alespecificar el tipo lo que hacemos es colocar un par de corchetes [] para indicar que lo que

estamos definiendo es un array. Por ejemplo:

  Curso onLine Frameworks Quieres mejorar tu nivel de programación. Promoción del40%descwww.globalmentoring.com.mx/ Enlaces patrocinados 

public int [] losValores;

en la que definimos un array de enteros llamado losValores. Vamos a intentar realizarun ejemplo para ver como funciona:

Práctica:

Crear el fichero Array.java

Agregar el siguiente código en el fichero:

public class Array

{

public static void main(String arg[])

{

int [] losValores = null;

losValores[4] = 100;

Page 41: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 41/58

System.out.println(losValores[4]);

}

}

Compilamos el código, ejecutemos y...error!!! Parece extraño que el error seaNullPointerException, pero tiene sentido, recordemos que una variable java, que no sea detipo básico es una referencia que puede apuntar a objetos y por tanto losValores también esuna referencia y debe de apuntar a objetos de tipo array de enteros. Es decir, el código de lafunción main es necesario modificarlo:

int [] losValores = new int[10];

Anterior - Índice - Siguiente 

III.2. CADENAS A. Introduccióna.) Introducción a las clases String y StringBuffer En Java las cadenas se tratan de forma diferente a C/C++, donde las cadenas son matricesde caracteres en las que se indica el final de la cadena con un carácter de valor „ \ 0‟. En Java las cadenas son objetos de las clases predefinida String o StringBuffer , que estánincluidas en el paquete java.lang.*.Siempre que aparecen conjuntos de caracteres entre comillas dobles, el compilador de Java

crea automáticamente un objeto String .Si sólo existieran cadenas de sólo lectura (String ), durante una serie de manipulacionessobre un objeto String habría que crear un nuevo objeto para cada uno de los resultadosintermedios.El compilador es más eficiente y usa un objeto StringBuffer para construir cadenas a partir delas expresiones, creando el String final sólo cuando es necesario. Los objetos StringBuffer sepueden modificar, de forma que no son necesarios nuevos objetos para albergar losresultados intermedios.Los caracteres de las cadenas tienen un índice que indica su posición. El primer carácter deuna cadena tiene el índice 0, el segundo el 1, el tercero el 2 y así sucesivamente. Esto puedesonar familiar a los programadores de C/C++, pero resultar chocante para aquellosprogramadores que provengan de otros lenguajes.

b.) Operaciones básicas, comunes a String y StringBuffer Existen una serie de métodos que son comunes a ambas clases.Los siguientes métodos de acceso a las cadenas:

  int length(); Devuelve el número de caracteres de la cadena.  char charAt( int i ); Devuelve el carácter correspondiente de índice i .

Los siguientes métodos para crear cadenas derivadas:

Page 42: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 42/58

  String toString(); Devuelve una copia del objeto como una String .  String substring( int i, int fin ); Devuelve una instancia de la clase String que contenga

una subcadena desde la posición ini , hasta la fin (si no se indica hasta el final de lacadena), del objeto cadena que invoque el método.

Y el método para transformar la cadena en un vector de caracteres:

  void getChars(int ini, int fin, char[] destino, int destIni); Convierte la cadena en unvector de caracteres destino .

B. Métodos de la clase Stringa.) Constructores La clase String proporciona cadenas de sólo lectura y soporta operaciones con ellas. Sepueden crear cadenas implícitamente mediante una cadena entrecomillada o usando + ó +=  con dos objetos String .También se pueden crear objetos String explícitamente con el mecanismo new .La clase String soporta multitud de constructores.

  String(); Constructor por defecto. El nuevo String toma el valor "" .  String( String s ); Crea un nuevo String , copiando el que recibe por parámetro.  String( StringBuffer s ); Crea un String con el valor que en ese momento tenga el

StringBuffer que recibe como parámetro.  String( char[] v ); El nuevo String toma el valor de los caracteres que tiene el vector de

caracteres recibido por parámetro.  String( byte[] v ); El nuevo String toma el valor de los caracteres que corresponden a

los valores del vector de bytes en el sistema de caracteres de la ordenador en que seejecute.

b.) Búsqueda en cadenas String Además presenta los siguientes métodos para buscar caracteres o subcadenas en lacadena, y devuelven el índice que han encontrado o el valor  –1 si la búsqueda no ha sidosatisfactoria:

  int indexOf( char ch, int start ): Devuelve el índice correspondiente a la primeraaparición del carácter ch en la cadena, comenzando a buscar desde el carácter start  (si no se especifica se busca desde el principio).

  int indexOf( String str ): Devuelve el índice correspondiente al carácter en queempieza la primera aparición de la subcadena str.

  int lastIndexOf( char ch, int start ): Devuelve el índice correspondiente a la últimaaparición del carácter ch en la cadena, comenzando a buscar desde el carácter start  

(si no se especifica se busca desde el final).  int lastIndexOf( String str ): Devuelve el índice correspondiente al carácter en que

empieza la última aparición de la subcadena str.

c.) Comparaciones de cadenas String Java no trabaja con el código ASCII habitual, sino con el código avanzado Unicode.El código Unicode (código universal) se caracteriza, sobre todo, por el uso de dos bytes porcarácter. Esto permite aumentar los caracteres hasta 65000, y así se pueden representar loscaracteres que componen las lenguas, vivas o muertas, más importantes del mundo.

Page 43: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 43/58

Hay que tener en cuenta que si nos salimos del rango 0-255 que coincide con el códigoASCII puede que las comparaciones no sean las esperadas.Las funciones de comparación son las siguientes:

  boolean equals( Object o ); Devuelve true si se le pasa una referencia a un objetoString con los mismos caracteres, o false si no.

  boolean equalsIgnoreCase( String s ); Compara cadenas ignorando las diferencias deortografía mayúsculas/minúsculas.

  boolean regionMatches( boolean b, int o, String s , int i, int n ); Compara parte de doscadenas, carácter a carácter.

  boolean startsWith( String s, int i ); Comprueba si la cadena tiene el prefijo s desde i.  boolean endsWith( String s ); Comprueba si la cadena termina con el sufijo s .  int compareTo( Object o ); Devuelve un entero que es menor, igual o mayor que cero

cuando la cadena sobre la que se le invoca es menor, igual o mayor que la otra. Si elparámetro es un String , la comparación es léxica.

  int compareToIgnoraCase( String s ); Compara lexicográficamente, ignorando lasdiferencias de ortografía mayúsculas/minúsculas.

d.) Cadenas String derivadas En Java se devuelven nuevas cadenas cada vez que se invoca a un método que crea unacadena diferente porque las cadenas String son de sólo lectura:

  String replace( char oldChar, char newChar ); Devuelve una nueva cadena con todoslos caracteres oldChar sustituidos por el carácter newChar .

  String toLowerCase(); Devuelve una nueva cadena con los caracteres en minúsculas,o si se especifica parámetro, siguiendo sus reglas.

  String toUperCase( Locale l ); Devuelve una nueva cadena con los caracteres enmayúsculas, o si se especifica parámetro, siguiendo sus reglas.

  static String trim(): Devuelve una nueva cadena del que se ha eliminado los espaciosen blanco por el principio y por el final.

  static String copyValueOf( char[] v, int ini, int fin ); Devuelve una cadena igual que lacontenida en el vector v , entre los límites ini y fin (si no se especifican copia todo elvector).

  static String concat( String s ); Concatena la cadena que recibe al final de ésta.

e.) Conversiones entre cadenas String y tipos simples Java Para convertir una variable de un tipo de datos simple (char , boolean, int, long, float, double) en una cadena (String ), bastará con invocar al método valueOf() del objeto String  correspondiente:

  static String valueOf( tipo ); El parámetro tipo soporta un carácter (char ) un vector decaracteres (char[] ) o un objeto (Object ).

Sin embargo para convertir el valor de una cadena en un tipo de datos simple deberemosutilizar los siguientes métodos:

Tipo   De String  

boolean   new Boolean(String).booleanValue() 

Page 44: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 44/58

int   Integer.ParseInt(String, int base) 

long   Long.ParseLong(String, int base) 

float   new Float(String).floatValue() 

double   new Double(String).doubleValue() 

Tabla 20: Conversiones de cadenas a tipos simples No hay ningún método que convierta los caracteres escapados Java ( \b, \udddd ) envariables carácter (char), o a la inversa. Lo que se puede hacer es invocar valueOf() con uncarácter (char ) para obtener una cadena de la clase String que contenga ese carácter.Así mismo no hay formas de crear o decodificar cadenas de números en formatos octal (0 ) ohexadecimal(0x ).f.) Conversiones entre cadenas String y vectores También existen diversos constructores y métodos de la clase String para tratar convectores, tanto de caracteres como de bytes.En cuanto a los vectores de caracteres existen:

  El constructor ya citado de String( char[] v ). Hace copia de los datos, por lo que lasmodificaciones posteriores del vector no afectarán a la cadena.

  char[] toCharArray(); Convierte la cadena en un vector de caracteres.

En cuanto a los métodos para convertir vectores de byte (de 8 bits) en objetos String concaracteres Unicode de 16 bits existen:

  El constructor ya citado de String( byte[] v ). Hace copias de los datos, por lo que lasmodificaciones posteriores del vector no afectarán a la cadena.

  byte[] getBytes( String s ); Convierte la cadena en un vector de byte , atendiendo a la

tabla de caracteres especificada en s , o a la de la máquina si se omite.

C. Métodos de la clase StringBuffera.) Constructores Los constructores contenidos por la clase StringBuffer son:

  StringBuffer( int lim ); Construye una cadena sin caracteres y con una capacidadinicial de lim caracteres (por defecto 16, si no se especifica otro valor).

  StringBuffer( String s ); Construye una cadena con el valor s .

b.) Modificación de la cadena Existen tres tipos de modificaciones que se pueden aplicar a la cadena.

Hay métodos de inserción:

  StringBuffer insert( int i, Object o ); Desplaza los caracteres de la cadena e inserta lacadena correspondiente al segundo parámetro (de cualquier tipo).

  StringBuffer append( Object o ); Inserta al final de la cadena, la cadenacorrespondiente al segundo parámetro (de cualquier tipo).

Hay métodos de substitución:

Page 45: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 45/58

  void setCharAt( int i, char to ); Cambia el carácter de la posición i por to . Si la posiciónsupera la longitud de la cadena, se extiende rellenándose con caracteres nulos.

  StringBuffer replace( int ini, int fin, String s ); Reemplaza una subcadena de estacadena (de ini a fin ) por la cadena recibida por parámetro. No se debe confundir conel método replace() que incluye la clase String .

  StringBuffer reverse(); Invierte la cadena (de izquierda a derecha).

Y métodos de borrado:

  StringBuffer delete( int ini, int fin ); Borra la subcadena entre el carácter ini y el fin .  StringBuffer deleteCharAt( int i ); Borra el carácter en la posición i .

c.) Capacidad de la cadena El buffer de un objeto StringBuffer tiene una capacidad que es la longitud de la cadena quepuede almacenar sin tener que asignar más espacio. El buffer crece automáticamente amedida que se añaden caracteres, pero resulta más eficiente especificar el tamaño del bufferde una sola vez:

  int capacity(); Devuelve la capacidad actual del buffer.  void ensureCapacity( int i ); . Garantiza que la capacidad del buffer es al menos i .  void setLength( int i ); Establece la longitud de esta cadena a i .

d.) Extracción de datos Para obtener un objeto String a partir de un objeto StringBuffer , debe invocarse el métodotoString(), común a ambas clases.Se debe tener en cuenta que no hay métodos StringBuffer para eliminar una parte de unbuffer. Para resolver este problema, debe crearse un vector de caracteres a partir del buffer,y construir un nuevo buffer con el contenido restante. Para esto se usa el método getChars(),

común con la clase String .D. Ejemplos de uso de cadenasa.) Ejemplo de Cadena Fija (de la clase String) En el siguiente ejemplo se muestra la utilización de los principales métodos de la claseString :public static void main( String s[] ){

String cad = new String("Cadena Fija");

System.out.println("Ejemplo de String: '"+cad+"'");

 //Métodos comunes a StringBuffer

System.out.println("Su longitud es: "+cad.length());

System.out.println("Su tercer caracter es: "+cad.charAt(3));

System.out.print("Su subcadena del 3 al 6 es:");

System.out.println( cad.substring(2,6) );

Page 46: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 46/58

char[] vectorcad = cad.toCharArray();

System.out.println("Creado un vector, de elemento 3: ");

System.out.print( vectorcad[2] );

 // Búsqueda en cadenas

String subcad=new String("ena");

System.out.print("La subcadena '"+subcad+"'");

System.out.print(" aparece en la posicion: ");

System.out.println( cad.indexOf(subcad) );

 // Comparaciones

String cadcomp=new String("CADENA Fija");

System.out.print("La cadena '"+cadcomp+"'");

if ( cad.compareTo(cadcomp) == 0 )

System.out.println(" ES igual 'Sensitive'");

else

System.out.println(" NO es igual 'Sensitive'");

System.out.print("La cadena '"+cadcomp+"'");

if ( cad.equalsIgnoreCase(cadcomp) )

System.out.println(" ES igual 'Insensitive'");

else

System.out.println(" NO = 'Insensitive'");

 // Derivación

System.out.print("Cadena derivada en minusculas: ");

System.out.println( cad.toLowerCase() );

}

Lo que muestra por pantalla:Ejemplo de String: 'Cadena Fija'

Page 47: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 47/58

Su longitud es: 11Su tercer caracter es: eSu subcadena del 3 al 6 es: denaCreado un vector, de elemento 3: dLa subcadena 'ena' aparece en la posicion: 3

La cadena 'CADENA Fija' NO es igual 'Sensitive'La cadena 'CADENA Fija' ES igual 'Insensitive'Cadena derivada en minusculas: cadena fijab.) Ejemplo de Cadena Variable (de la clase StringBuffer) En el siguiente ejemplo se muestra la utilización de los principales métodos de la claseStringBuffer :public static void main( String s[] ){

StringBuffer cad = new StringBuffer("Cadena Variable");

System.out.println("Ejemplo de StringBuffer: '"+cad+"'");

 // Modificación de la cadena

cad.delete( 0, 6 );

System.out.println("Borrados 6 primeros caracteres: "+cad);

cad.replace( cad.length()-3, cad.length(), "da" );

System.out.println("Sutituidos ultimos caracteres: "+cad);

cad.append(" Cadena");

System.out.println("Apendizada con 'Cadena': "+cad);

 // Gestión de su capacidad

System.out.println("Tiene capacidad de: "+cad.capacity());

cad.ensureCapacity( 32 );

System.out.println("Capacidad sobre 32:"+cad.capacity());

System.out.println("");

}

Lo que muestra por pantalla:Ejemplo de StringBuffer: 'Cadena Variable'Borrados 6 primeros caracteres: VariableSutituidos ultimos caracteres: VariadaApendizada con 'Cadena': Variada CadenaTiene capacidad de: 31Capacidad sobre 32: 64

Page 48: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 48/58

 

Arreglo Unidimensional

 Arreglo: Es una colección de datos del mismo tipo. Sirve para manejar un número “n” de

elementos en común, ya sea de tipos definidos por el Lenguaje,(“int”,”float”,”String”,etc…) asi  

como aquellos definidos por el programador.

Para ilustrar lo anteriormente dicho, tenemos el siguiente ejemplo:

Si queremos tener 3 elementos de tipo int, sin usar los arreglos se haría del siguiente modo:

private int numero1 = 1;

private int numero2 = 2;

private int numero3 = 3;

Esta es una manera, pero no la adecuada ,imaginen por instante si necesitáramos 20

elementos tendríamos que declarar 20 variables, veamos como se agruparían estos 3

elementos en un solo arreglo:

private int []x = new int[3];

private int[]x = {1,2,3};

En la primera línea, hemos creado un arreglo vacío de 3 elementos; mientras que en la

segunda, creamos un arreglo de 3 elementos inicializados.

Este ejemplo proviene de lenguajes como java, sin embargo, la implementación varia según

el lenguaje de programación que se este utilizando. Los siguientes ejemplos estarán en el

Lenguaje java.

Métodos de declaración de Arreglos.

Para declarar Arreglos en Java, se utiliza este formato:

Tipo_de_dato []identificador;

Page 49: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 49/58

Tipo_de_dato identificador[];

identificador = new Tipo_de_dato[numero_de_elementos];

También es posible, como ya vimos en nuestro primer ejemplo se puede hacer en una sola

linea.

Tipo_de_dato []identificador = new Tipo_de_dato[numero_de_elementos];

Llenado de un arreglo vacío

Para llenar un arreglo sin necesidad de inicializarlo, podemos de apoyarnos de un ciclo for,

veamos el ejemplo:

int []x = new int[3]; Declaramos el arreglo de 3 elementos

for(int i = 0; i<=2; i+) x[i] = (int) (Math.random () * 20); con esto hacemos que “x” en la

posición que valga “i” (0,1,2) haga una selección aleatoria entre el 0 y el 20 

Recuperación de los elementos de un arreglo

De igual manera en como llenamos un arreglo, nos apoyaremos del ciclo for para devolver

los elementos

for(int i = 0; i<=2; i++)

System.out.println(x[i]);

Hay un detalle que es muy importante aclarar: Cuando declaramos un arreglo, le damos el

tamaño que queremos éste tenga, en este caso fue de 3 elementos. Sin embargo, el índice

del arreglo (posición) siempre iniciará en 0, es por eso que en el ciclo for le di la instrucción

que recorriera desde el 0 hasta el 2, para que tomara en cuenta los 3 elementos del arreglo;

si hubiéramos asignado la orden que recorriera desde el 0 hasta el 3, tomaría 4 repeticiones,con lo que se establecería un error, ya que el arreglo únicamente tiene un tamaño de 3: x[0],

x[1] y x[2].

Arreglo Bidimensional Conceptos Basicos 

Page 50: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 50/58

 

Este tipo de arreglos al igual que los anteriores es un tipo de dato estructurado, finito

ordenado y homogéneo. El acceso a ellos también es en forma directa por medio de un par

de índices. Los arreglos bidimensionales se usan para representar datos que pueden verse

como una tabla con filas y columnas. La primera dimensión del arreglo representa las

columnas, cada elemento contiene un valor y cada dimensión representa una relación La

representación en memoria se realiza de dos formas: almacenamiento por columnas o por

renglones. Para determinar el número total de elementos en un arreglo bidimensional

usaremos las siguientes fórmulas:

RANGO DE RENGLONES (R1) = Ls1 - (Li1+1)

RANGO DE COLUMNAS (R2) = Ls2 - (Li2+1)

No. TOTAL DE COMPONENTES = R1 * R2

REPRESENTACION EN MEMORIA POR COLUMNAS

x : array [1..5,1..7] of integer

Para calcular la dirección de memoria de un elemento se usan la siguiente formula:

A[i,j] = base (A) + [((j - li2) R1 + (i + li1))*w]

REPRESENTACION EN MEMORIA POR RENGLONES

x : array [1..5,1..7] of integer

Para calcular la dirección de memoria de un elemento se usan la siguiente formula: A[i,j] =

base (A) + [((i - li1) R2 + (j + li2))*w] Donde: i = Índice del renglón a calcular

 j = Índice de la columna a calcular

li1 = Límite inferior de renglones

li2 = Límite inferior de columnas

w = Número de bytes tipo componente

estos programas son uno de los mas sencillos chequenlos

 //Este programa crea un arreglo bidimencional llamado are y solo se le asignan valores a

este

 //Que de claro que para moverse en las posiciones de un arreglo bidimencional necesitamos

dos for o while

import javax.swing.J Option Pane; 

Page 51: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 51/58

class areglos0{

public static void main(String args[]){

 //Creacion del Arreglo are

int are[][]=new int[2][2];String a;

 //Llenado del Arreglo are

for(int x=0;x<=1;x++){

for(int y=0;y<=1;y++){

a=J Option Pane.showInputDialog(“Introduce el Numero:”); 

are[x][y]=Integer.parseInt(a);

}

}

System.out.println(“Se Termino De Ejecutar El Programa”); 

}

}

 //Este programa crea un arreglo bidimencional llamado are y solo se le asignan valores a

este

 //Que de claro que para moverse en las posiciones de un arreglo bidimencional necesitamos

dos for o while

import javax.swing.J Option Pane;

class areglos01{

public static void main(String args[]){

 //Creacion del Arreglo are

int are[][]=new int[2][2];

String a;

 //Llenado del Arreglo are

for(int x=0;x<=1;x++){

for(int y=0;y<=1;y++){

a=J Option Pane.showInputDialog(“Introduce el Numero:”); 

are[x][y]=Integer.parseInt(a);

}

}

for(int x=0;x<=1;x++){

for(int y=0;y<=1;y++){

Page 52: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 52/58

System.out.println(“Valor [“+x+”][“+y+”]:”+are[x][y]); 

}

}

System.out.println(“Se Termino De Ejecutar El Programa”); }

}

 //Este programa crea un arreglo bidimencional llamado are y se le asignan valores a este

directamente en codigo,e imprime eso valores

 //Que de claro que para moverse en las posiciones de un arreglo bidimencional necesitamos

dos for o while

import javax.swing.J Option Pane;

class areglos02{

public static void main(String args[]){

 //Creacion del Arreglo are

int are[][]={{1,2},{3,4}};

 //impresion de valores previamente asignados

for(int x=0;x<=1;x++){

for(int y=0;y<=1;y++){

System.out.println(“Valor [“+x+”][“+y+”]:”+are[x][y]); 

}

}

System.out.println(“Se Termino De Ejecutar El Programa”); 

}

}

 //Este programa crea un arreglo bidimencional llamado are y se le asignan valores a este

directamente en codigo despues de la declaracion,e imprime eso valores

 //Que de claro que para moverse en las posiciones de un arreglo bidimencional necesitamos

dos for o while

import javax.swing.J Option Pane;

class areglos03{

public static void main(String args[]){

 //Creacion del Arreglo are

Page 53: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 53/58

int are[][]=new int[2][2];

 //asignacion de valores.

are[0][0]=1;are[0][1]=2;

are[1][0]=3;

are[1][1]=4;

 //impresion de valores previamente asignados

for(int x=0;x<=1;x++){

for(int y=0;y<=1;y++){

System.out.println(“Valor [“+x+”][“+y+”]:”+are[x][y]); 

}

}

System.out.println(“Se Termino De Ejecutar El Programa”); 

}

}

 //Este programa crea dos arreglo bidimencional y los suma,e imprime eso valores

 //Que de claro que para moverse en las posiciones de un arreglo bidimencional necesitamos

dos for o while

import javax.swing.J Option Pane;

class areglos04{

public static void main(String args[]){

 //Creacion del Arreglo are

int are[][]=new int[2][2];

int are2[][]=new int[2][2];

int suma=0;

 //asignacion de valores.

 //Llenado manual del primer arreglo

are[0][0]=1;

are[0][1]=2;

are[1][0]=3;

are[1][1]=4;

Page 54: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 54/58

 //Llenado manual del segundo arreglo

are2[0][0]=5;

are2[0][1]=6;

are2[1][0]=7;are2[1][1]=8;

 //impresion de valores previamente asignados

for(int x=0;x<=1;x++){

for(int y=0;y<=1;y++){

suma=are[x][y]+are2[x][y];

System.out.println(“Valor [“+x+”][“+y+”]:”+are[x][y]+” + “+”

[“+x+”][“+y+”]:”+are2[x][y]+”=“+suma); 

}

}

System.out.println(“Se Termino De Ejecutar El Programa”); 

}

}

I.1. INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS 

A. Programación Orientada a Objetos

La orientación a objetos es un paradigma de programación que facilita la creación desoftware de calidad por sus factores que potencian el mantenimiento, la extensión y lareutilización del software generado bajo este paradigma.

La programación orientada a objetos trata de amoldarse al modo de pensar del hombre y noal de la máquina. Esto es posible gracias a la forma racional con la que se manejan lasabstracciones que representan las entidades del dominio del problema, y a propiedadescomo la jerarquía o el encapsulamiento.

El elemento básico de este paradigma no es la función (elemento básico de la programaciónestructurada), sino un ente denominado objeto. Un objeto es la representación de unconcepto para un programa, y contiene toda la información necesaria para abstraer dichoconcepto: los datos que describen su estado y las operaciones que pueden modificar dichoestado, y determinan las capacidades del objeto.

Java incorpora el uso de la orientación a objetos como uno de los pilares básicos de sulenguaje.

B. Los objetos

Page 55: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 55/58

Podemos definir objeto como el "encapsulamiento de un conjunto de operaciones (métodos)que pueden ser invocados externamente, y de un estado que recuerda el efecto de losservicios". [Piattini et al., 1996].

Un objeto además de un estado interno, presenta una interfaz para poder interactuar con elexterior. Es por esto por lo que se dice que en la programación orientada a objetos "se unendatos y procesos", y no como en su predecesora, la programación estructurada, en la queestaban separados en forma de variables y funciones.

Un objeto consta de:

  Tiempo de vida: La duración de un objeto en un programa siempre está limitada en eltiempo. La mayoría de los objetos sólo existen durante una parte de la ejecución delprograma. Los objetos son creados mediante un mecanismo denominadoinstanciación , y cuando dejan de existir se dice que son destruidos.

  Estado: Todo objeto posee un estado, definido por sus atributos . Con él se definenlas propiedades del objeto, y el estado en que se encuentra en un momentodeterminado de su existencia.

  Comportamiento: Todo objeto ha de presentar una interfaz, definida por sus métodos ,para que el resto de objetos que componen los programas puedan interactuar con él.

El equivalente de un objeto en el paradigma estructurado sería una variable . Así mismo lainstanciación de objetos equivaldría a la declaración de variables , y el tiempo de vida de un objeto al ámbito de una variable .

C. Las clases

Las clases son abstracciones que representan a un conjunto de objetos con un

comportamiento e interfaz común.

Podemos definir una clase como "un conjunto de cosas (físicas o abstractas) que tienen elmismo comportamiento y características... Es la implementación de un tipo de objeto(considerando los objetos como instancias de las clases)". [Piattini et al., 1996].

Una clase no es más que una plantilla para la creación de objetos. Cuando se crea un objeto(instanciación ) se ha de especificar de qué clase es el objeto instanciado, para que elcompilador comprenda las características del objeto.

Las clases presentan el estado de los objetos a los que representan mediante variablesdenominadas atributos . Cuando se instancia un objeto el compilador crea en la memoria

dinámica un espacio para tantas variables como atributos tenga la clase a la que perteneceel objeto.

Los métodos son las funciones mediante las que las clases representan el comportamientode los objetos. En dichos métodos se modifican los valores de los atributos del objeto, yrepresentan las capacidades del objeto (en muchos textos se les denomina servicios ).

Page 56: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 56/58

Desde el punto de vista de la programación estructurada, una clase se asemejaría a unmódulo, los atributos a las variables globales de dicho módulo, y los métodos a las funcionesdel módulo.

D. Modelo de objetos

Existen una serie de principios fundamentales para comprender cómo se modeliza larealidad al crear un programa bajo el paradigma de la orientación a objetos. Estos principiosson: la abstracción, el encapsulamiento, la modularidad, la jerarquía, el paso de mensajes yel poliforfismo.

a.) Principio de Abstracción 

Mediante la abstracción la mente humana modeliza la realidad en forma de objetos. Para ellobusca parecidos entre la realidad y la posible implementación de objetos del programa quesimulen el funcionamiento de los objetos reales .

Los seres humanos no pensamos en las cosas como un conjunto de cosas menores; porejemplo, no vemos un cuerpo humano como un conjunto de células. Los humanosentendemos la realidad como objetos con comportamientos bien definidos. No necesitamosconocer los detalles de porqué ni cómo funcionan las cosas; simplemente solicitamosdeterminadas acciones en espera de una respuesta; cuando una persona deseadesplazarse, su cuerpo le responde comenzando a caminar.

Pero la abstracción humana se gestiona de una manera jerárquica, dividiendosucesivamente sistemas complejos en conjuntos de subsistemas, para así entender másfácilmente la realidad. Esta es la forma de pensar que la orientación a objeto intenta cubrir.

b.) Principio de Encapsulamiento 

El encapsulamiento permite a los objetos elegir qué información es publicada y quéinformación es ocultada al resto de los objetos. Para ello los objetos suelen presentar susmétodos como interfaces públicas y sus atributos como datos privados e inaccesibles desdeotros objetos.

Para permitir que otros objetos consulten o modifiquen los atributos de los objetos, las clasessuelen presentar métodos de acceso. De esta manera el acceso a los datos de los objetoses controlado por el programador, evitando efectos laterales no deseados.

Con el encapsulado de los datos se consigue que las personas que utilicen un objeto sólo

tengan que comprender su interfaz, olvidándose de cómo está implementada, y en definitiva,reduciendo la complejidad de utilización.

c.) Principio de Modularidad 

Mediante la modularidad, se propone al programador dividir su aplicación en varios módulosdiferentes (ya sea en forma de clases, paquetes o bibliotecas), cada uno de ellos con unsentido propio.

Page 57: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 57/58

Esta fragmentación disminuye el grado de dificultad del problema al que da respuesta elprograma, pues se afronta el problema como un conjunto de problemas de menor dificultad,además de facilitar la comprensión del programa.

d.) Principio de Jerarquía 

La mayoría de nosotros ve de manera natural nuestro mundo como objetos que serelacionan entre sí de una manera jerárquica. Por ejemplo, un perro es un mamífero, y losmamíferos son animales, y los animales seres vivos...

Del mismo modo, las distintas clases de un programa se organizan mediante la  jerarquía . Larepresentación de dicha organización da lugar a los denominados árboles de herencia :

Imagen 1: Ejemplo de árbol de herencia 

Mediante la herencia una clase hija puede tomar determinadas propiedades de una clase padre . Así se simplifican los diseños y se evita la duplicación de código al no tener que

volver a codificar métodos ya implementados.

Al acto de tomar propiedades de una clase padre se denomina heredar .

e.) Principio del Paso de Mensajes 

Mediante el denominado paso de mensajes , un objeto puede solicitar de otro objeto querealice una acción determinada o que modifique su estado. El paso de mensajes se sueleimplementar como llamadas a los métodos de otros objetos.

Desde el punto de vista de la programación estructurada, esto correspondería con la llamadaa funciones.

f.) Principio de Polimorfismo 

Polimorfismo quiere decir "un objeto y muchas formas". Esta propiedad permite que unobjeto presente diferentes comportamientos en función del contexto en que se encuentre.Por ejemplo un método puede presentar diferentes implementaciones en función de losargumentos que recibe, recibir diferentes números de parámetros para realizar una mismaoperación, y realizar diferentes acciones dependiendo del nivel de abstracción en que seallamado.

Page 58: Estructuras Repetitivas en Java Jorge

5/11/2018 Estructuras Repetitivas en Java Jorge - slidepdf.com

http://slidepdf.com/reader/full/estructuras-repetitivas-en-java-jorge 58/58

E. Relaciones entre objetos

Durante la ejecución de un programa, los diversos objetos que lo componen han deinteractuar entre sí para lograr una serie de objetivos comunes.

Existen varios tipos de relaciones que pueden unir a los diferentes objetos, pero entre ellasdestacan las relaciones de: asociación, todo/parte, y generalización/especialización.

a.) Relaciones de Asociación 

Serían relaciones generales, en las que un objeto realiza llamadas a los servicios (métodos)de otro, interactuando de esta forma con él.

Representan las relaciones con menos riqueza semántica.

b.) Relaciones de Todo/Parte 

Muchas veces una determinada entidad existe como conjunción de otras entidades, como unconglomerado de ellas. La orientación al objeto recoge este tipo de relaciones como dosconceptos; la agregación y la composición.

En este tipo de relaciones un objeto componente se integra en un objeto compuesto . Ladiferencia entre agregación y composición es que mientras que la composición se entiendeque dura durante toda la vida del objeto componedor, en la agregación no tiene por qué serasí.

Esto se puede implementar como un objeto (objeto compuesto ) que cuenta entre susatributos con otro objeto distinto (objeto componente ).

c.) Relaciones de Generalización/Especialización 

A veces sucede que dos clases tiene muchas de sus partes en común, lo que normalmentese abstrae en la creación de una tercera clase (padre de las dos) que reúne todas suscaracterísticas comunes.

El ejemplo más extendido de este tipo de relaciones es la herencia, propiedad por la que unaclase (clase hija ) recoge aquellos métodos y atributos que una segunda clase (clase padre )ha especificado como "heredables".

Este tipo de relaciones es característico de la programación orientada a objetos.

En realidad, la generalización y la especialización son diferentes perspectivas del mismoconcepto, la generalización es una perspectiva ascendente (bottom-up ), mientras que laespecialización es una perspectiva descendente (top-down ).