MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C.

/ Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS
PROGRAMACIÓN JAVA

PRÁCTICAS DE LABORATORIO

LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 1 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

Introducción

Estas prácticas se han elaborado para orientar a los alumnos de la materia de LENGUAJE ORIENTADO A OBJJETOS en el aprendizaje de la programación en el Lenguaje JAVA y la programación orientada a objetos desarrollando algoritmos computacionales

Todas las prácticas de laboratorio estarán estructuradas de la siguiente forma:    

Objetivo. Recursos. Teoría. Desarrollo de ejercicios y entrega de resultados

NOTAS:  EL RESULTADO DE CADA PROGRAMA DE ESTA PRÁCTICA, SE ENVIARÁ AL CORREO: PROF. ING. JORGE RAMOS GARCIA, josh_ram@hotmail.com (archivos fuente .java , observaciones, investigación, ejercicios, etc)  REVISE Y ESTUDIE CADA EJERCICIO Y TRATE DE ENTENDERLOS PARA LOS EJERCICIOS QUE SE REALIZARAN EN LAS SIGUIENTES PRACTICAS.  CUALQUIER DUDA O COMENTARIO FAVOR DE EXPRESARLO

LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 2 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

PRACTICA

No.

5

 Clases, métodos en java  ejercicios

OBJETIVO: Desarrollar ejemplos en java: métodos, objetos, constructores, instancias

RECURSOS: Para implementar los ejercicios de POO se utilizarán las siguientes herramientas de software: Programa: Netbeans 7.1.2 o Eclipse

TEORIA: CLASES Las clases son lo más simple de Java. Todo en Java forma parte de una clase, es una clase o describe como funciona una clase. El conocimiento de las clases es fundamental para poder entender los programas Java. Todas las acciones de los programas Java se colocan dentro del bloque de una clase o un objeto. Todos los métodos se definen dentro del bloque de la clase, Java no soporta funciones o variables globales. Esto puede despistar a los programadores de C++, que pueden definir métodos fuera del bloque de la clase, pero esta posibilidad es más un intento de no separarse mucho y ser compatible con C, que un buen diseño orientado a objetos. Así pues, el esqueleto de cualquier aplicación Java se basa en la definición de una clase. Todos los datos básicos, como los enteros, se deben declarar en las clases antes de hacer uso de ellos. En C la unidad fundamental son los ficheros con código fuente, en Java son las clases. De hecho son pocas las sentencias que se pueden colocar fuera del bloque de una clase. La palabra clave import (equivalente al #include) puede colocarse al principio de un fichero, fuera del bloque de la clase. Sin embargo, el compilador reemplazará esa sentencia con el contenido del fichero que se indique, que consistirá, como es de suponer, en más clases. Tipos de Clases Hasta ahora sólo se ha utilizado la palabra clave public para calificar el nombre de las clases que hemos visto, pero hay tres modificadores más. Los tipos de clases que podemos definir son: abstract Una clase abstract tiene al menos un método abstracto. Una clase abstracta no se instancia, sino que se utiliza como clase base para la herencia.

LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 3 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

final Una clase final se declara como la clase que termina una cadena de herencia. No se puede heredar de una clase final. Por ejemplo, la clase Math es una clase final. public Las clases public son accesibles desde otras clases, bien sea directamente o por herencia. Son accesibles dentro del mismo paquete en el que se han declarado. Para acceder desde otros paquetes, primero tienen que ser importadas. synchronizable Este modificador especifica que todos los métodos definidos en la clase son sincronizados, es decir, que no se puede acceder al mismo tiempo a ellos desde distintos threads; el sistema se encarga de colocar los flags necesarios para evitarlo. Este mecanismo hace que desde threads diferentes se puedan modificar las mismas variables sin que haya problemas de que se sobreescriban.

LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 4 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

DESARROLLO DE EJERCICIOS. 1. Verifique el siguiente ejemplo:

public class numerosComplejos { public static void main (String [] args) { double a = 10; double b = Math.pow(Math.sqrt(a),2); System.out.println(a + " y " + b + " iguales: " + (a==b)); System.out.println(a + " y " + b + " iguales: " + sonIguales(a,b)); } // ------------- declaración de método sonIguales public static boolean sonIguales(double x, double y){ final double EPSILON = 1E-12; double maximo = Math.max(Math.abs(x), Math.abs(y)); return Math.abs(x-y)<= maximo*EPSILON; } }

2.

Estudie el siguiente programa y pruebe su resultado. Dos clases dentro de un paquete dado. //-------------------------------------package sample2; public class Sample2 { public static void main (String[]args) { Car car1; car1= new Car(); car1.num=1234; car1.gas=20.5; car1.show(); car1.show(); } }// fin de Sample2

//***************************** package sample2; class Car { int num; double gas; void show(){
LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 5 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

System.out.println( "numero de carro "+num); System.out.println("gasolina usada "+gas); } }// fin de Car Resultado: run: numero de carro 1234 gasolina usada 20.5 numero de carro 1234 gasolina usada 20.5 BUILD SUCCESSFUL (total time: 0 seconds)

3.

Ejercicio. Argumentos usados dentro de la clase. /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package ejemplocar;

public class EjemploCar { public static void main (String[]args) { Car car1= new Car(); car1.setNum(1234); car1.setGas(20.5); } }

/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package ejemplocar;

class Car { int num; double gas ; void setNum (int n){ num=n;
LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 6 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

System.out.println( "numero de carro "+num); } void setGas(double g) { gas=g; System.out.println("gasolina usada "+gas); } void show() { System.out.println( "numero de carro "+num); System.out.println("gasolina usada "+gas);

} }

4.

En el siguiente ejemplo se muestra el diseño de una calculadora mediante dos clases bajo el paquete calculadora.

package calculadora; import javax.swing.JOptionPane; public class principal { //iniciacion de la clase public static void main (String[] args){ //metodo principal int op=0, n1=0, n2=0; //op variables para el menu, n1 y n2 variables de los numeros String ax; //variable que recibe los numeros operaciones trin = new operaciones(); //objeto llamado trin de la clase operaciones para usar los metodos do{//comienzo del ciclo op = JOptionPane.showConfirmDialog(null,"Desea ingresar dos numeros y mostrar el resultado " + "\nde las 4 operaciones basicas?");//cuadro de dialogo de tipo entrada if(op == JOptionPane.YES_OPTION){//si se selecciona SI hara lo que hay en el bloque ax = JOptionPane.showInputDialog(null, "Digite el primer numero: "); if(trin.isNum(ax)){//primera validacion n1 = Integer.parseInt(ax);//n1 toma el valor convertido del anterior cuadro de dialogo ax = JOptionPane.showInputDialog(null, "Digite el segundo numero: "); if(trin.isNum(ax)){//segunda validacion n2 = Integer.parseInt(ax);//n2 toma le valor convertido del anterior cuadro de dialogo JOptionPane.showMessageDialog(null, "El resultado de la suma es: "+trin.suma(n1, n2)//se usa el metodo de suma de la clase operacioes

LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 7 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

+"\nEl resultado de la resta es: "+trin.resta(n1, n2)//se usa el metodo de resta de la clase operaciones +"\nEl resultado de la multiplicacion es: "+trin.multiplicacion(n1, n2)//se usa el metodo de multiplicacion de la clase operaciones +"\nEl resultado de la division es: "+trin.division(n1, n2));//se usa el metodo de division de la clase operaciones }//final segunda validacion else{ JOptionPane.showMessageDialog(null, "Ingrese un numero","Advertencia !!!", JOptionPane.WARNING_MESSAGE); } } //final primera validacion else{//se muestra un mensaje y no se realiza las operaciones ya que el primer valor no es un numero JOptionPane.showMessageDialog(null, "Ingrese un numero","Advertencia !!!", JOptionPane.WARNING_MESSAGE); } }//finaliza bloque else if(op == JOptionPane.NO_OPTION){//si se selecciona NO hara lo que hay en el bloque JOptionPane.showMessageDialog(null, "Si desea terminar la aplicacion elige Cancelar.","Advertencia !!!" ,JOptionPane.WARNING_MESSAGE);//mensaje de advertencia }//finaliza bloque }while(op!= JOptionPane.CANCEL_OPTION);//el ciclo finaliza cuando se da cancelar System.exit(0);//linea para asegurar la finalizacion del programa } //fin metodo principal }//final de la clase

package calculadora; public class operaciones { //comienzo clase operaciones public int suma(int n1, int n2){//metodo para sumar, recibe dos numeros int op; //variable que almacena la respuesta op = n1 + n2; //operacion return op; //devuelve el valor de la operacion } //fin metodo suma public int resta (int n1, int n2){ //metodo para restar, recibe dos numeros int op; //variable que almacena la respuesta op = n1 - n2; //operacion return op; //devuelve el valor de la operacion }// fin metodo resta public int multiplicacion(int n1, int n2){ //metodo para multiplicar, recibe dos numeros int op; //variable que almacena la respuesta op = n1 * n2; //operacion return op; //devuelve el valor de la operacion
LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 8 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

} //fin metodo multiplicacion public int division(int n1, int n2){ //metodo para division, recibe dos numeros int op; //variable que almacena la respuesta op = n1 / n2; //operacion return op; //devuelve el valor de la operacion }//fin metodo division public boolean isNum(String n){//metodo para validar si se ha ingresado un numero, recibe una cadena de texto int a;//variable que almacena la cadena a convertir try{ a = Integer.parseInt(n); //se convierte la cadena return true; //si se ha convertido a entero devuelve verdadero } catch(NumberFormatException e){ return false; //si no se ha convertido a entero devuelve falso } }//fin metodo validar }//fin clase operaciones

LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 9 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

5.

Desarrollo de constructores en JAVA. Verifique su resultado.

Constructores Un Constructor es una función, método, etc, de las clases, la cual es llamada automáticamente cuando se crea un objeto de esa clase. Por ser métodos, los constructores también aceptan parámetros. Cuando en una clase no especificamos ningún tipo de constructor, el compilador añade uno público por omisión sin parámetros, el cual NO hace nada. Características de los Constructores 1. Un constructor, tiene el mismo nombre de la clase a la cual pertenece. 2. No puede ser Heredado. 3. No retorna ningún valor (Ni void), por lo cual no debe especificarse ningún tipo de dato. 4. Debe declararse como public, sólo en casos realmente extraordinarios será de otro tipo. Supongamos una clase llamada Datos public class Datos { //declaracion de atributos public Datos();//constructor sin parametros public Datos(int Edad) {//Constructor con parámetros EdadM=Edad; } }

Ejercicio resuelto. Se Desea crear un objeto del tipo Coordenadas, que indique, la posición de un punto en el plano cartesiano, y permita calcular la distancia existente con otro punto, además del punto medio entre ellos. 1 /* */ 2 3 class Coordenadas { 4 private int x,y;//Atributos 5 public Coordenadas (int x1 , int y1)//constructor 6 { 7 //asignamos esos valores 8 x=x1; 9 y=y1; 10 } 11 public double Distancia (int x1, int y1) 12 { 13 //este método recibe como parametros 14 //las coordenadas del segundo punto 15 double D;
LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 10 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

16 17 18 19 20 21 22 23 24 25 26

D=Math.sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1)); return D;//Retornamops el valor de la distancia } public void Pmedio(int x1, int y1) { double p1, p2; p1=(x+x1)/2; p2=(y+y1)/2; System.out.println("El puntomedio es: "+p1+","+p2); } }

1 /* */ 2 public class UsaCoordenadas { 3 public static void main (String args []){ 4 Coordenadas P=new Coordenadas (10,20); 5 //calculamos la Distancia: 6 System.out.println("La Distancia es: "+P.Distancia(5,6)); 7 //Punto Medio 8 P.Pmedio(5,6); 9 } 10 } Explicación: Un método, si va a devolver algún valor, éste debe especificarse cuando se hace la definición del mismo, para el caso, el método Distancia, devuelve el valor de la distancia, es por ello que lo especificamos como public double. Además que, cuando realizamos la llamada de ese método, es en ese preciso lugar que aparecerá el valor que devuelve. Por otra parte, los atributos, son de acceso privado, lo cual implica que, sólo podemos acceder a ellos, en la clase Coordenadas. Sobrecarga Cuando en una clase, se definen un mismo método, con diferente número de parámetros, o bien con el mismo numero de parámetros pero diferenciándose en la definición, en la cual, al menos un parámetro sea de diferente tipo, cuando esto sucede, se dice que el método está sobrecargado. Ejercicio resuelto. Cree una aplicación en Java, que imprima un número imaginario. Nota, los números imaginarios, poseen una parte real y otra imaginaria, acompañada por la constante i. 1 class Imaginario { 2 private int real, imag; 3 public Imaginario() 4 { 5 real=0; 6 imag=0; 7 } 8 public Imaginario(int x, int y)
LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 11 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

9 10 11 12 13 14 15 16 17 }

{ real=x; imag=y; } public void Mostrar() { System.out.println("El Numero Imaginario es: "+real+" + "+imag+"i"); }

1 class UsaImaginario{ 2 public static void main (String args []) { 3 Imaginario oI=new Imaginario(5,6); 4 oI.Mostrar(); 5} 6} Explicación. En el ejemplo anterior puede notar que, los atributos, son esas variables simples, es las cuales almacenaremos información relevante a los objetos que, crearemos a partir de esa clase. Además que, los estamos declarando como públicos, lo cual indica que tenemos acceso directo desde cualquier otro archivo a los atributos. Los métodos son del tipo public y no devuelven ningún valor, por tal razón son declarados como void. Además que. El método EstablecerEdad y EstablecerNota, reciben un argumento cada uno de ellos, el cual es asignado al respectivo atributo. Constructores Un Constructor es una función, método, etc, de las clases, la cual es llamada automáticamente cuando se crea un objeto de esa clase. Por ser métodos, los constructores también aceptan parámetros. Cuando en una clase no especificamos ningún tipo de constructor, el compilador añade uno público por omisión sin parámetros, el cual NO hace nada. Características de los Constructores 1. Un constructor, tiene el mismo nombre de la clase a la cual pertenece. 2. No puede ser Heredado. 3. No retorna ningún valor (Ni void), por lo cual no debe especificarse ningún tipo de dato. 4. Debe declararse como public, sólo en casos realmente extraordinarios será de otro tipo.

LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 12 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

Supongamos una clase llamada Datos

public class Datos { //declaracion de atributos public Datos();//constructor sin parametros public Datos(int Edad) {//Constructor con parámetros EdadM=Edad; } }

Ejercicio resuelto. Se Desea crear un objeto del tipo Coordenadas, que indique, la posición de un punto en el plano cartesiano, y permita calcular la distancia existente con otro punto, además del punto medio entre ellos. 1 /* --------------------------- */ 2 3 class Coordenadas { 4 private int x,y;//Atributos 5 public Coordenadas (int x1 , int y1)//constructor 6 { 7 //asignamos esos valores 8 x=x1; 9 y=y1; 10 } 11 public double Distancia (int x1, int y1) 12 { 13 //este método recibe como parametros 14 //las coordenadas del segundo punto 15 double D; 16 D=Math.sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1)); 17 return D;//Retornamops el valor de la distancia 18 } 19 public void Pmedio(int x1, int y1) 20 { 21 double p1, p2; 22 p1=(x+x1)/2; 23 p2=(y+y1)/2; 24 System.out.println("El puntomedio es: "+p1+","+p2); 25 } 26 }

LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 13 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

1 /* ------------------------- */ 2 public class UsaCoordenadas { 3 public static void main (String args []){ 4 Coordenadas P=new Coordenadas (10,20); 5 //calculamos la Distancia: 6 System.out.println("La Distancia es: "+P.Distancia(5,6)); 7 //Punto Medio 8 P.Pmedio(5,6); 9 } 10 } Explicación: Un método, si va a devolver algún valor, éste debe especificarse cuando se hace la definición del mismo, para el caso, el método Distancia, devuelve el valor de la distancia, es por ello que lo especificamos como public double. Además que, cuando realizamos la llamada de ese método, es en ese preciso lugar que aparecerá el valor que devuelve. Por otra parte, los atributos, son de acceso privado, lo cual implica que, sólo podemos acceder a ellos, en la clase Coordenadas. Sobrecarga Cuando en una clase, se definen un mismo método, con diferente número de parámetros, o bien con el mismo numero de parámetros pero diferenciándose en la definición, en la cual, al menos un parámetro sea de diferente tipo, cuando esto sucede, se dice que el método está sobrecargado. Ejercicio resuelto. Cree una aplicación en Java, que imprima un número imaginario. Nota, los números imaginarios, poseen una parte real y otra imaginaria, acompañada por la constante i. 1 class Imaginario { 2 private int real, imag; 3 public Imaginario() 4 { 5 real=0; 6 imag=0; 7 } 8 public Imaginario(int x, int y) 9 { 10 real=x; 11 imag=y; 12 } 13 public void Mostrar() 14 { 15 System.out.println("El Numero Imaginario es: "+real+" + "+imag+"i"); 16 } 17 }

LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 14 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

1public class UsaImaginario{ 2 public static void main (String args []) { 3 Imaginario oI=new Imaginario(5,6); 4 oI.Mostrar(); 5} 6}

6. Recursividad: Conceptos básicos

Primero debemos decir que la recursividad no es una estructura de datos, sino que es una técnica de programación que nos permite que un bloque de instrucciones se ejecute n veces. Remplaza en ocasiones a estructuras repetitivas. Este concepto será de gran utilidad para el capítulo de la estructura de datos tipo árbol. La recursividad es un concepto difícil de entender en principio, pero luego de analizar diferentes problemas aparecen puntos comunes. En Java los métodos pueden llamarse a sí mismos. Si dentro de un método existe la llamada a sí mismo decimos que el método es recursivo. Cuando un método se llama a sí mismo, se asigna espacio en la pila para las nuevas variables locales y parámetros. Al volver de una llamada recursiva, se recuperan de la pila las variables locales y los parámetros antiguos y la ejecución se reanuda en el punto de la llamada al método. Problema 1: Implementación de un método recursivo. Programa: public class Recursividad { void repetir() { repetir(); } public static void main(String[] ar) { Recursividad re=new Recursividad(); re.repetir(); } } La función repetir es recursiva porque dentro de la función se llama a sí misma. Cuando ejecuta este programa se bloqueará y generará una excepción: "Exception in thread "main" java.lang.StackOverflowError"
LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 15 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

Analicemos como funciona: Primero se ejecuta la función main, luego de crear un objeto llamamos a la función repetir. Hay que tener en cuenta que cada vez que se llama a una función se reservan 4 bytes de la memoria que se liberarán cuando finalice su ejecución. La primera línea de la función llama a la función repetir, es decir que se reservan 4 bytes nuevamente. Se ejecuta nuevamente una instancia de la función repetir y así sucesivamente hasta que la pila estática se colme y se cuelgue el programa. Problema 2: Implementación de un método recursivo que reciba un parámetro de tipo entero y luego llame en forma recursiva con el valor del parámetro menos 1. Programa: public class Recursividad { void imprimir(int x) { System.out.println(x); imprimir(x-1); } public static void main(String[] ar) { Recursividad re=new Recursividad(); re.imprimir(5); } } Desde la main se llama a la función imprimir y se le envía el valor 5. El parámetro x recibe el valor 5. Se ejecuta el algoritmo de la función, imprime el contenido del parámetro (5) y seguidamente se llama a una función, en este caso a sí misma (por eso decimos que es una función recursiva), enviándole el valor 4. El parámetro x recibe el valor 4 y se imprime en pantalla el cuatro, llamando nuevamente a la función imprimir enviándole el valor 3. Si continuamos este algoritmo podremos observar que en pantalla se imprime: 5 4 3 2 1 0 ?1 ?2 ?3 . . . . . . . . . hasta que se bloquee el programa. Tener en cuenta que cada llamada a una función consume 4 bytes por la llamada y en este caso 4 bytes por el parámetro x. Como nunca finaliza la ejecución completa de las funciones se desborda la pila estática por las sucesivas llamadas. Problema 3: Implementar un método recursivo que imprima en forma descendente de 5 a 1 de uno en uno. Programa: public class Recursividad { void imprimir(int x) { if (x>0) { System.out.println(x); imprimir(x-1); } }
LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 16 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

public static void main(String[] ar) { Recursividad re=new Recursividad(); re.imprimir(5); } } Ahora si podemos ejecutar este programa y observar los resultados en pantalla. Se imprimen los números 5 4 3 2 1 y no se bloquea el programa. Analice qué sucede cada vez que el if (x>0) se evalúa como falso, ¿a qué línea del programa retorna? Problema 4: Imprimir los números de 1 a 5 en pantalla utilizando recursividad. Programa: public class Recursividad { void imprimir(int x) { if (x>0) { imprimir(x-1); System.out.println(x); } } public static void main(String[] ar) { Recursividad re=new Recursividad(); re.imprimir(5); } } Con este ejemplo se presenta una situación donde debe analizarse línea a línea la ejecución del programa y el porque de estos resultados. ¿Por qué se imprime en pantalla 1 2 3 4 5 ? Veamos como se apilan las llamadas recursivas: En la primera llamada desde la función main el parámetro x recibe el valor 5.

Cuando llamamos desde la misma función le enviamos el valor de x menos 1 y la memoria queda de la siguiente forma:

LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 17 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

Debemos entender que el parámetro x en la nueva llamada está en otra parte de la memoria y que almacena un 4, nosotros le llamaremos x prima. Comienza a ejecutarse la función, la condición del if se valúa como verdadero por lo que entra al bloque y llama recursivamente a la función imprimir pasándole el valor 3 al parámetro.

Nuevamente la condición se valúa como verdadero y llama a la función enviándole un 2, lo mismo ocurre cuando le envía un 1 y un 0.

void imprimir(int x) { if (x>0) { imprimir(x-1); System.out.println(x); } } Cuando x vale 0 la condición del if se valúa como falsa y sale de la función imprimir. ¿Qué línea ahora se ejecuta ? Vuelve a la función main ? NO. Recordemos que la última llamada de la función imprimir se había hecho desde la misma función imprimir por lo que vuelve a la línea: System.out.println(x);

LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 18 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

Ahora si analicemos que valor tiene el parámetro x. Observemos la pila de llamadas del gráfico:

x cuarta tiene el valor 1. Por lo que se imprime dicho valor en pantalla. Luego de imprimir el 1 finaliza la ejecución de la función, se libera el espacio ocupado por el parámetro x y pasa a ejecutarse la siguiente línea donde se había llamado la función: System.out.println(x); Ahora x en esta instancia de la función tiene el valor 2. Así sucesivamente hasta liberar todas las llamadas recursivas. Es importante tener en cuenta que siempre en una función recursiva debe haber un if para finalizar la recursividad (en caso contrario la función recursiva será infinita y provocará que el programa se bloquee) Problema 5: Otro problema típico que se presenta para analizar la recursividad es el obtener el factorial de un número. Recordar que el factorial de un número es el resultado que se obtiene de multiplicar dicho número por el anterior y así sucesivamente hasta llegar a uno. Ej. el factorial de 4 es 4 * 3 * 2 * 1 es decir 24. Programa: public class Recursividad { int factorial(int fact) { if (fact>0) { int valor=fact * factorial(fact-1); return valor; } else return 1; } public static void main(String[] ar) { Recursividad re=new Recursividad(); int f=re.factorial(4); System.out.println("El factorial de 4 es "+f); } }
LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 19 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

La función factorial es recursiva porque desde la misma función llamamos a la función factorial. Debemos hacer el seguimiento del problema para analizar cómo se calcula. La memoria en la primera llamada:

fact recibe el valor 4 y valor se cargará con el valor que se obtenga con el producto de fact por el valor devuelto por la función factorial (llamada recursiva)

Nuevamente se llama recursivamente hasta que el parámetro fact reciba el valor 0.

Cuando fact recibe un cero la condición del if se valúa como falsa y ejecuta el else retornando un 1, la variable local de la llamada anterior a la función queda de la siguiente manera:

LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 20 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

Es importantísimo entender la liberación del espacio de las variables locales y los parámetros en las sucesivas llamadas recursivas. Por último la función main recibe "valor", en este caso el valor 24. Problema 6: Implementar un método recursivo para ordenar los elementos de un vector. Programa: class Recursivdad { static int [] vec = {312, 614, 88, 22, 54}; void ordenar (int [] v, int cant) { if (cant > 1) { for (int f = 0 ; f < cant - 1 ; f++) if (v [f] > v [f + 1]) { int aux = v [f]; v [f] = v [f + 1]; v [f + 1] = aux; } ordenar (v, cant - 1); } } void imprimir () { for (int f = 0 ; f < vec.length ; f++) System.out.print (vec [f] + " "); System.out.println("\n"); }

public static void main (String [] ar) { Recursivdad r = new Recursivdad(); r.imprimir ();
LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 21 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

r.ordenar (vec, vec.length); r.imprimir (); } } Hasta ahora hemos visto problemas que se pueden resolver tanto con recursividad como con estructuras repetitivas.

Es muy importante tener en cuenta que siempre que podamos emplear un algoritmo no recursivo será mejor (ocupa menos memoria de ram y se ejecuta más rápidamente)

Pero hay casos donde el empleo de recursividad hace mucho más sencillo el algoritmo (tener en cuenta que no es el caso de los tres problemas vistos previamente)

7.

Utilización básica de arrays, ArrayList y Vector.

En primer lugar, vamos a inicializar un array de String, que como saben tiene longitud fija, lo que es un pequeño inconveniente a la hora de trabajar con algunos conjuntos de elementos. Para solucionar este problema, tenemos otras clases llamadas colecciones. Dos de ellas son ArrayList y Vector. Un ArrayList es una implementación de la clase List, que es una colección que admite elementos duplicados y nulos, así como acceso por índice y otros métodos para trabajar con sus elementos. Vector también hereda de List es muy similar a ArrayList, con la diferencia de que la clase Vector es segura para trabajar con hilos (sincronizada). Esta ventaja penaliza ligeramente el rendimiento del Vector.

/* ------------------------------------------ colecciones --------------------*/ package colecciones; import java.util.ArrayList; import java.util.Iterator; import java.util.Vector; public class Colecciones { public static void main(String[] args) { System.out.println("------ forma 1 -------"); String[] arrayString = new String[]{"1", "2", "3", "4"}; for (int i = 0; i < arrayString.length; i++) { System.out.println(arrayString[i]); } System.out.println("------ forma 2 -------"); ArrayList<String> arrayList = new ArrayList<String>(arrayString.length); for (int i = 0; i < arrayString.length; i++) {
LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 22 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

arrayList.add(arrayString[i]); } Iterator it = arrayList.iterator(); while(it.hasNext()) { System.out.println(it.next()); } System.out.println("------ forma 3 -------"); Vector<String> vector = new Vector<String>(arrayString.length); for (int i = 0; i < arrayString.length; i++) { vector.add(arrayString[i]); } it = vector.iterator(); while(it.hasNext()) { System.out.println(it.next()); } } }

LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 23 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

8.

Ejercicio propuesto. Calcular el volumen de un cilindro y el de una esfera previa introducción de la altura y radio del cilindro, así como del radio de la esfera. Se definirá un método para el cálculo del volumen del cilindro y otro para el de la esfera. Se emplearán métodos estáticos de la clase Math y la variable de campo estática que almacena el valor de pi. Volumen esfera=(4/3)*PI*R^3 Volumen cilindro=PI*R^2*H

9.

Matrices o arrays de controles en Java. Ejemplo con Jlabel y JtextField.

/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package programa; //(1) PAQUETE import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.JPanel; import javax.swing.JFrame; import javax.swing.SwingConstants; import javax.swing.BorderFactory; import javax.swing.border.Border; import java.awt.Color; import java.awt.Rectangle; //(2) FORMULARIO public class Programa extends JFrame { //(3) CONTROLES DEL FORMULARIO JPanel jpanel = (JPanel) this.getContentPane(); JLabel[] label = new JLabel[6]; //Declaración del array de etiquetas JTextField[] text = new JTextField[6]; //Declaración del array de cajas de texto Border border = BorderFactory.createLineBorder(Color.black, 1); //(4) CONSTRUCTOR DEL FORMULARIO public Programa() { //(5) PROPIEDADES DEL CONTENEDOR jpanel.setLayout(null); jpanel.setBackground(Color.lightGray); for(int i = 0; i < label.length; i++) { label[i] = new JLabel(); //Llenamos el array de etiquetas text[i] = new JTextField(); //Llemanos el array de cajas de texto //(6) PROPIEDADES DE LOS CONTROLES label[i].setBounds(new Rectangle(15, (i+1)*40, 60, 25)); label[i].setText("Dato "+(i+1)); label[i].setBorder(border); label[i].setHorizontalAlignment(SwingConstants.CENTER); text[i].setBounds(new Rectangle(100, (i+1)*40, 60, 25));
LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 24 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

//(7) ADICION DE LOS CONTROLES AL CONTENEDOR jpanel.add(label[i], null); jpanel.add(text[i], null); } //(8) PROPIEDADES DEL FORMULARIO setSize(200,330); setTitle("Form1"); setVisible(true); } //(9) METODOS DEL FORMULARIO public static void main(String arg[]) { new Programa(); } }

LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 25 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

10. Llenar un Array, apartir de los datos que ingrese el usuario, los datos son nombres propios y el usuario debe dar el numero de nombres que va a introducir y finalmente, mostrar el nombre cuyo tamaño en letras sea menor y el nombre con mayor longitud. /*------------------- MANEJO DE ARREGLOS */ package arreglonombres; /** * * @author joshram */ import java.io.*; public class ArregloNombres { public String [] array; public void pedirCantidadDeNombres(){ BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in)); boolean salir=true; do{ System.out.print("\n Cuantos Nombres Deseas Ingresar?: "); try{ array = new String[Integer.parseInt(entrada.readLine())]; } catch(IOException e){} catch(NumberFormatException e){ System.out.print("\n El Caracter Que Ingresaste No Es Numero, Intenta De Nuevo.\n"); salir=false; } }while(salir!=true); for(int i=0;i<array.length;i++){ System.out.print("\n Ingrese Nombre "+ (i+1)+": "); try{array[i]=entrada.readLine();} catch(IOException e){} } } public void buscarLongitudes(){ String aux = new String("");
LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 26 / 27

MATERIA: LENGUAJE ORIENTADO A OBJETOS CLAVE: CEP01.10L PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica Fecha: Lugar: Salón 309 cuatrim: Otoño 2012

PROFESOR: ING. JORGE RAMOS GARCIA. GPO: A DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

int contador = 0; do{ for(int i=0;i<array.length-1;i++){ if(array[i].length()>array[i+1].length()){ aux = array [i+1]; array[i+1] = array[i]; array[i] = aux; } } contador++; }while(contador<array.length-1); System.out.println("\n El Nombre Mas Largo Es: "+ array[array.length-1]); System.out.println("\n El Nombre Mas Corto Es: "+ array[0]); } public static void main(String [] args){ ArregloNombres Objeto=new ArregloNombres(); Objeto.pedirCantidadDeNombres(); Objeto.buscarLongitudes(); } }

El programa te muestra el nombre más largo y el más corto, por ejemplo ingresando lo siguiente: 1 - Leonardo 2 - Julio 3 - Alejandra Resultado: Nombre más largo: Alejandra. Nombre más corto: Julio Pero qué pasa cuando resulta que en los nombres más largos hay 2 nombres con el mismo número de caracteres?. De igual forma con los nombres cortos.

REALICE LA MODIFICACIÓN AL PROGRAMA ANTERIOR DE ESTE PUNTO PARA QUE MUESTRE NOMBRES REPETIDOS CUANDO SEAN LOS MÁS CORTOS O LOS MÁS LARGOS

LENGUAJE ORIENTADO A OBJETOS

- java

Correo Electrónico: josh_ram@hotmail.com

Pagina 27 / 27