practica 6 loo oto2012

27
MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA. CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 1 / 27 LENGUAJE ORIENTADO A OBJETOS PROGRAMACIÓN JAVA PRÁCTICAS DE LABORATORIO

Upload: joshram

Post on 30-Oct-2014

34 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 1 / 27

LENGUAJE ORIENTADO A OBJETOS PROGRAMACIÓN JAVA

PRÁCTICAS DE LABORATORIO

Page 2: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 2 / 27

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, [email protected] (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

Page 3: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 3 / 27

P R A C T I C A 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.

Page 4: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 4 / 27

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.

Page 5: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 5 / 27

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

Page 6: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 6 / 27

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;

Page 7: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 7 / 27

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

Page 8: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 8 / 27

+"\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

Page 9: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 9 / 27

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

Page 10: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 10 / 27

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;

Page 11: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 11 / 27

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 }

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)

Page 12: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 12 / 27

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 }

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.

Page 13: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 13 / 27

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 }

Page 14: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 14 / 27

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 }

Page 15: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 15 / 27

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"

Page 16: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 16 / 27

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

}

}

Page 17: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 17 / 27

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:

Page 18: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 18 / 27

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

Page 19: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 19 / 27

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

}

}

Page 20: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 20 / 27

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:

Page 21: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 21 / 27

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

Page 22: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 22 / 27

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

Page 23: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 23 / 27

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

}

}

}

Page 24: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 24 / 27

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

Page 25: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 25 / 27

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

}

}

Page 26: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 26 / 27

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

Page 27: Practica 6 Loo Oto2012

MATERIA: LENGUAJE ORIENTADO A OBJETOS PROFESOR: ING. JORGE RAMOS GARCIA.

CLAVE: CEP01.10L GPO: A PREREQUISITOS: Programación Avanzada. DPTO.: I.C.E. / I.S.C. / Mecatrónica DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA Fecha: UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. Lugar: Salón 309 cuatrim: Otoño 2012 HORARIO: LUN, MIER y VIER de 12:00pm a 2:00pm

LENGUAJE ORIENTADO A OBJETOS - java Correo Electrónico: [email protected] Pagina 27 / 27

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