You are on page 1of 29

Curso de programaciomn de algoritmos en Java.

Definicion de IDE Integrate Development Enviroment (entorno integrado de desarrollo donde yo puedo integrar cdigo fuente, donde puedo aplicar todo el proceso de desarrollo dentro de una herramienta) Me ayuda sobre todo tipo de tecnologa que esta asociada al desarrollo, en java existen diferente IDEs , como netbeans y Eclipse. Jdk es el compilador de eclipse, Una perspectiva es una vista, Un proyecto es un recurso de eclipse , es un recurspo de la id,me pemite mantener agrupado diferentes recursos. JAVA trabaja con programacin orientada a objetos. Para que una clase se conviertea en un programa una funcin debe de tener u mtodo, El famoso main,la palabra main es un template con control y barra me parece el relleno. DEFINICION DE ALGORITMOS Es una secuencia ordenada infinita de pasos, cuyo objetivo es resolver un problema. Teorema de la programacin estructurada, define que existen 34 tipos de pasos, que yo puedo usar con los cuales voy a resolver un problema. 3 Estructura Estructura o la accin simple Estructura o la accin de decisin o condicional Estructura Interativa o accin o estructura de repeticin. Con etos 3 pasos puede s}resolver cualquier tipo de problema computacional. Un programa donde el usuario existen una valor por telcado luego otro valor y el sistema sumara la los dos valores.

package test; import java.util.Scanner; public class SumaNumeros { public static void main(String[] args) { //clase llamada Scanner

Scanner scanner = new Scanner(System.in); System.out.println("ingrese el valor A : "); int a = scanner.nextInt(); System.out.println("ingrese el valor B : "); int b = scanner.nextInt(); int suma = a + b ; System.err.println(a+" + "+b+" = "+suma); } }

Accin simple es cuando no itero ni decido. Variables, representa un espacio en la memoria. Una clase es una estructura de c, objeto scanner de tipo Scanner. Case sensetive, considera la maysculas y minsculas.

En este caso va a dividir el numero. Y se tiene que validar que el numero no sea 0 Si yo dvido un entero entre entero el resultado ser entero, la divisin siempre lelvara al dato al tipo mas alto que este momento es doubl
package test; import java.util.Scanner; public class DivideNumeros { public static void main(String[] args) { //clase llamada Scanner Scanner scanner = new Scanner(System.in); System.out.println("ingrese el valor A : "); int a = scanner.nextInt(); System.out.println("ingrese el valor B : "); int b = scanner.nextInt(); if ( b!=0) { double cociente = a/(double)b; System.err.println(a+" / "+b+" = "+cociente); } else { System.out.println("nose puede dividir por cero :("); } } }

Un programa que me muestre el producto, a travs de suma sucesivas, enm java no hay aritmtica de bireccion.es En este caso la variable suma es un acumulador Debagear. Ir paso a paso.,aprender usar el debugger I<a es una expresin lgica, es un enunciado que tiene valor de verdad.
package test; import java.util.Scanner; public class MultiplicaXSumaSucesivas { public static void main(String[] args) { //clase llamada Scanner @SuppressWarnings("resource") Scanner scanner = new Scanner(System.in); System.out.println("ingrese el valor A : "); int a = scanner.nextInt(); System.out.println("ingrese el valor B : "); int b = scanner.nextInt(); int i=0; int suma=0; while(i<a) { suma=suma+b; i++; } System.out.println(a+"*"+b+"="+suma); } }

Nose puede ver objetos sin ver programacin estructurada , es como saber anlisis matemtico sin saber sumar. Con una clase l,o encapsulo mis objetos, y esa clase tiene un algoritmo hecho estructuradamente.

CLASE 2 UN CVS ES UN SISTEMA DE CONTROL DE VERSIONES,

El usuariop ingresa 3 valores, el programa mostrar en que orden estarn.


package test; import java.util.Scanner; public class MayorMedioMenor { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("INGRESE A : "); int a = scanner.nextInt(); scanner = new Scanner(System.in); System.out.println("INGRESE B : "); int b = scanner.nextInt(); scanner = new Scanner(System.in); System.out.println("INGRESE C : "); int c = scanner.nextInt(); int mayor; int medio; int menor; if(a>b && a >c) { mayor = a; if(b>c) { medio=b; menor=c; } else { medio =c; menor = b; } } else{ if(b>a && b>c){ mayor = b; if(a>c) { medio =a; menor = c; } else { medio = c; menor=a; }

} else{ mayor=c; if(a<b){ medio=b; menor = a; } else{ menor=b; medio=a; } } } System.out.println("Mayor = " + mayor); System.out.println("Medio = " + medio); System.out.println("Menor = " + menor); } }

Este tipo de cdigo es ilegible y se puede mejorar de la siguiente manera

Existen clase utilitarias que contienen funciones matemticas, las cuales le meten dentro de una clase, es como programacin estructurada dentro de objetos.
package test; import java.util.Scanner; public class MayorMedioMenor { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("INGRESE A : "); int a = scanner.nextInt(); scanner = new Scanner(System.in); System.out.println("INGRESE B : "); int b = scanner.nextInt(); scanner = new Scanner(System.in); System.out.println("INGRESE C : "); int c = scanner.nextInt(); int mayor; int medio; int menor; if(a>b && a >c) {

mayor = a; medio = Math.max(b, c); menor = Math.min(b, c); } else{ if(b>a && b>c){ mayor = b; medio = Math.max(a, menor = Math.min(a, } else{ mayor=c; medio = Math.max(a, menor = Math.min(a, } c); c);

b); b);

} System.out.println("Mayor = " + mayor); System.out.println("Medio = " + medio); System.out.println("Menor = " + menor); } }

Creando mis propios mtodos con if en lnea


return a>b?a:b; esta es un iflinea, si a es menor que b me pregunta y me retorn A , sino B; con al shit y r me permite renombrarlo.

package test; import java.util.Scanner; public class MayorMedioMenor { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("INGRESE A : "); int a = scanner.nextInt(); System.out.println("INGRESE B : "); int b = scanner.nextInt(); System.out.println("INGRESE C : "); int c = scanner.nextInt(); int mayor; int medio; int menor; if(a>b && a >c) { mayor = a; medio = obtenerMayor(b, c); menor = obtenerMenor(b, c); } else{

if(b>a && b>c){ mayor = b; medio = obtenerMayor(a, menor = obtenerMenor(a, } else{ mayor=c; medio = obtenerMayor(a, menor = obtenerMenor(a, }

c); c);

b); b);

} System.out.println("Mayor = " + mayor); System.out.println("Medio = " + medio); System.out.println("Menor = " + menor); } public static int obtenerMayor(int var1, int var2) return var1>var2?var1:var2; } public static int obtenerMenor(int var1, int var2) return var1<var2?var1:var2; } } { {

FIBONACCI RECURSIVO
package test; public class FibRecursivo { public static void main(String[] args) { System.out.println("fibonacci " + fibRec(6)); } public static int fibRec (int n) { if (n==1 || n ==2) { return 1; } else { return fibRec(n-1) + fibRec(n-2); } } }

FIBBONACCI INTERATIVO. Un int tiene 4 bits


package test;

public class FibIterativo { public static void main(String[] args) { System.out.println(fibIter(8)); } public static long fibIter(long n) { long t1=1; long t2=1; long t3=t1; for(long i=0 ; i<n-2; i++) { t3 = t1 + t2; t1=t2; t2=t3; } return t3; } }

Una clase es una estructura de c., la clase debera encapsular sus datos, para encapsular se ponen privados Adems las clases deben de tener funciones,mtodos para poder asignar valores. Dentro de una clase los atributos son globales dentro de la clase. Los geter y seter son los que llaman los mtodos de acceso. Son atributos porque define la identidad de la fecha. Imprime la direccin de memoria porque en java hay herencia, quiere decir que todas las clases herendan del object, heredo mtodos que por ejemplo es ToString Explicacin de objetos. Sobre escribir (over written) Sobre escribo un mtodo que heredero de una clase. Una instancia es un momento, , se denomina variables de instancia a los atributos de la clase fecha., pero no necesaqriamewnte las variables de instancia son atributos. Una variable de cl,ase significa que existe un nico espacio en comn a todas las instancias de la fecha.

El constructor, es un mtodo especial porque solo se puede invocarse al momento de crear los objetos y se llaman igual que la clase. = new Fecha() esto es un constructor, java me regala uno, no es Cesario creado. El contructor me sirve para inicializar los atributos de la clase. El contador me sirve , es estatica y lka convierte nica y comn a todas las instancias de la clase fecha, me sirviria para contar cuantos objetos fecha tengo., para evitar que contador me tome el ultimo y me imprima el ultimo se deber de imprimir uno por uno. tipos variables ,, variable de instancia y de clase, variables locales los objetos son punteros. El constructuor esta alocando memoria, en java no hay aritmtica de direcciones por ello lo convierte en algo massimple, no se puede comparar dos direcciones de memoria f1=f2. Para comparar objetos se usa el mtodo equals. Esto lo heredse del Object
package test; public class Fecha { @Override public String toString() { // TODO Auto-generated method stub return dia + "/" + mes + "/"+ anio + "("+contador+" instancias)"; } @Override public boolean equals(Object obj) { //CAST ENTIDAD FECHA PARA QUE RECONOSCA //SE VUELVE RESPONSABLE DE COMPARAR COSAS COMPARABLES. Fecha laOtra = (Fecha)obj; return dia == laOtra.dia && mes ==laOtra.mes && anio==laOtra.anio; } private int dia; private int mes; private int anio; private static int contador=0; public Fecha(int d, int m , int a){ dia = d; mes = m; anio = a; contador++; }

public int getDia() { return dia; } public void setDia(int dia) { this.dia = dia; } public int getMes() { return mes; } public void setMes(int mes) { this.mes = mes; } public int getAnio() { return anio; } public void setAnio(int anio) { this.anio = anio; } }

package test; public class TestFecha { public static void main(String[] args) { // // // // // // Fecha f1 = new Fecha(10,3,2011); f1.setDia(10); f1.setMes(3); f1.setAnio(2011); Fecha f2 = new Fecha(12,1,2010); f2.setDia(12); f2.setMes(1); f2.setAnio(2010); if (f1==f2) { System.out.println("las fechas son iguales"); } else{ System.out.println("las fechas son Diferentes"); } System.out.println("F1 = " + f1); System.out.println("F2 = " + f2); } }

CLASE 3 Dado un valor numrico que representa el sueldo de la persona , indicar cuantos billetes se necesitan para pagar ese sueldo. El operador conciene / se adapta a los operandos. Si divido dos enteros el resultado ser el mayor valor Harcodeando (meter un valor a la vestia), variables automticas y locales del mtodo.
package demo; import java.util.Scanner; public class PagaSueldo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("ingrese el sueldo : " ); int sueldo = scanner.nextInt(); int denom = 100; int b100 = sueldo/denom; sueldo = sueldo%denom; System.out.println(b100 + " billetes de $ " + denom); denom = 20; int b20 = sueldo/denom; sueldo = sueldo%denom; System.out.println(b20 + " billetes de $ " + denom); denom = 10; int b10 = sueldo/denom; sueldo = sueldo%denom; System.out.println(b10 + " billetes de $ " + denom); denom = 5; int b5 = sueldo/denom; sueldo = sueldo%denom; System.out.println(b5 + " billetes de $ " + denom); denom = 2; int b2 = sueldo/denom; sueldo = sueldo%denom; System.out.println(b2 + " billetes de $ " + denom); denom = 1; int b1 = sueldo/denom; sueldo = sueldo%denom; System.out.println(b1 + " billetes de $ " + denom); } }

Con mtodos. Se trata en encasular los objetos,dentro de una funcin, cuando uno arguemento a una ficon o un mtodo,tiene dos posibilidades , pasar el valor o pasar un puntero(referencia) En java no se puede pasar parmetros por referencia, solo existen por valor,su los parmetros son primitivos, es decir,el objeto es una referencia. Para que mi mtodo puede modificar el valor del parmetro , necesito crear una clase
package demo; public class Parametros { private int sueldo; private int denom; //el constructor , se puede usar para pasar variables iniciales al atributo public int getSueldo() { return sueldo; } public void setSueldo(int sueldo) { this.sueldo = sueldo; } public int getDenom() { return denom; } public void setDenom(int denom) { this.denom = denom; } } package demo; import java.util.Scanner; public class PagaSueldo2 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("ingrese el sueldo : " ); int sueldo = scanner.nextInt(); Parametros params = new Parametros(); int b; params.setDenom(100); params.setSueldo(sueldo); b = calcularBilletes(params); System.out.println(b + " billetes de $ " + params.getDenom()); params.setDenom(50); b = calcularBilletes(params); System.out.println(b + " billetes de $ " + params.getDenom());

params.setDenom(20); System.out.println(b + " billetes de $ " + params.getDenom()); params.setDenom(10); b = calcularBilletes(params); System.out.println(b + " billetes de $ " + params.getDenom()); params.setDenom(5); b = calcularBilletes(params); System.out.println(b + " billetes de $ " + params.getDenom()); params.setDenom(2); b = calcularBilletes(params); System.out.println(b + " billetes de $ " + params.getDenom()); params.setDenom(1); b = calcularBilletes(params); System.out.println(b + " billetes de $ " + params.getDenom()); } public static int calcularBilletes(Parametros p){ int b = p.getSueldo()/p.getDenom(); int aux = p.getSueldo()%p.getDenom(); p.setSueldo(aux); //sueldo = sueldo%denom; return b; } }

Se tiene los siguientes datos que correspondan a los alumnos de una escuela

Legajo | nombre | notaPromedio 2 1 5 4 7 juan Pedro Arnoldo Ruffo jose 4 3,25 8 6 9

Ruffo

-1

xxx

Los datos dfinalizan al ingrsar un legajo<=0 Las filas son registros y las columnas son campos , por lo cual cada registro son varios campos Se pide informar cuantos aluimnos registrados hay. Informar porcentaje de aplazados (promedio<4) Informar alumno de mejor promedio(ser nico)

package alumnos; public class Parametros { private int cantAlumn=0; private int cantAplaz=0; private double max =-1; private String nombreMax = null; public int getCantAlumn() { return cantAlumn; } public void setCantAlumn(int cantAlumn) { this.cantAlumn = cantAlumn; } public int getCantAplaz() { return cantAplaz; } public void setCantAplaz(int cantAplaz) { this.cantAplaz = cantAplaz; } public double getMax() { return max; } public void setMax(double max) { this.max = max; } public String getNombreMax() { return nombreMax; } public void setNombreMax(String nombreMax) { this.nombreMax = nombreMax; } }

package alumnos;

import java.util.Scanner; public class Alumnos { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("ingrese leg, nom, nota : "); int leg = scanner.nextInt(); String nom = scanner.next(); double nota = scanner.nextDouble(); Parametros p = new Parametros(); while(leg>0){ procesar(leg, nom, nota, p); System.out.println("ingrese leg, nom, nota : "); leg = scanner.nextInt(); nom = scanner.next(); nota = scanner.nextDouble(); } if(p.getCantAlumn()>0){ //hasta aca punto 1 System.out.println("cantidad de alumnos :" + p.getCantAlumn()); //punto 2 double porc = p.getCantAplaz()*100/(double)p.getCantAlumn(); System.out.println("la cantida de aplzados son " + porc); System.out.println("la nota maxima" + p.getMax() + "Nombre de alumno " + p.getNombreMax() ); } else{ System.out.println("no hay alumnos"); } } public static void procesar(int leg, String nombre , double nota , Parametros p){ p.setCantAlumn(p.getCantAlumn()+1); if(nota<4){ p.setCantAplaz(p.getCantAplaz()+1); } if(nota>p.getMax()) { p.setMax(nota); p.setNombreMax(nombre); } } }

Clase 04, Dentro un contexto estatico no puedo invocar a mtodos que no sean estticos. En java los metodops reciben sus parmetros por valor,entonces los mtodos nose pueden modificar, lo nico que puedo hacer , ls parmetros que reciben que son de tipo primitivo(a=int)etc,) pero los programas que son tipo de una clase, se reciben por referencia, entonces si lo puedo modificar, Por lo tanto se tienen que crear una clase , que es una estructura de C. Es un objeto porque es una variable pero es del tipo clase PArametro, en este caso seria un puntero en la estructura, por ello se debe alocar o asignar con New No es buena practica que los campos de una clase sean privados, si son privados deben ofrecer mtodos de acceso (getters y setters)
package demo; public class MiPrograma { public static void main(String[] args) { int x = 10; f(x); System.out.println("x vale " + x); } public static void f(int a){ a = 20; System.out.println("Soy f() --> " + a); } } package demo; public class Miprograma2 { public static void main(String[] args) { Parametros p = new Parametros(); f(p); System.out.println("x vale : " + p.getX()); } public static void f(Parametros a){ a.setX(20); System.out.println("soy f() --> " + a.getX()); } } package demo; public class Parametros { private int x; public int getX() { return x; } public void setX(int x) {

this.x = x; } }

ARRAYS

EN JAVA LOS arrays se manejan igual que en c, un array es un conjunto de variables del mismo tipo, cuyas direcciones de memoria son contiguas, en java losa arrays son objetos asi que tiene una tributo que me permite caputrar la cantidad Coriendo desde lnea de comando.

Ejemplo Se ingrsan por teclado los datos de una planilla con el siguiente formato. Dia 2 1 5 4 2 -1 mes 5 2 1 10 3 9 totalFacturado 2400 1500 1250 3400 25400 0000

Los datos se ingrersan sin orden y finalizan al llegar un dia negativo Se pide. 1- Informar el total facturadpo pormes . a. In un mes no se registro facturacin entonces mostrar un mensaje dicie3ndo mes sin facturacin
2- package arrays; 34- import java.util.Scanner; 5-

6- public class EjemploArrays { 7public static void main(String[] args) { 89double arr[] = new double[12]; 10incializarArrays(arr); 1112Scanner scanner = new Scanner(System.in); 13System.out.println("Ingrese dia , mes , monto :"); 14int dia = scanner.nextInt(); 15int mes = scanner.nextInt(); 16double monto = scanner.nextDouble(); 1718while ( dia>0){ 1920arr[mes -1] = arr[mes-1] + monto; 21dia = scanner.nextInt(); 22mes = scanner.nextInt(); 23monto = scanner.nextDouble(); 24} 25mostrarResultados(arr); 26} 2728private static void mostrarResultados(double[] arr) { 29for(int i=0 ; i<arr.length ; i++) 30{ 31if(arr[1] == 0) 32{ 33System.out.println("Mes " + i + " sin facturacion"); 34} 35System.out.println("Mes " + (i+1) + "facturado : $ " + arr[i]); 36} 3738} 3940private static void incializarArrays(double[] arr) { 4142for(int i=0; i<arr.length; i++) 43{ 4445arr[i]=0; 46} 4748} 495051}

CONJUNTOS ACOTADOS . MESES , DIAS // esto son regitgros son ternas de datos EJEMPLO NUMERO RULETA Se tiene la informacioin correspoindiente a los resultados que surgieron de los tiros en las ruletas de un casino. Nro Ruleta 1 2 1 -1 Nro Croupier 3 1 5 -1 Nro 12 7 3 -1

Se pide informar la probabilidad de ocurrencia de cada numero de la ruleta.

package arrays; import java.util.Scanner; public class EjemploArrays2 { public static final int CANT_NROS_RULETA=5; public static void main(String[] args) { int arr[] = new int[CANT_NROS_RULETA]; incializarArrays(arr); Scanner scanner = new Scanner(System.in); System.out.println("Ingrese r , c , n : "); int r = scanner.nextInt(); int c = scanner.nextInt(); int n = scanner.nextInt(); int totales =1; while ( r>0){ arr[n]+=1; totales++; r = scanner.nextInt(); c = scanner.nextInt(); n = scanner.nextInt(); } mostrarResultados(arr,totales); // // // } private static void mostrarResultados(int[] arr , int tot) { for(int i = 0 ; i<arr.length ; i++) { double prob=arr[i]*100/(double)tot;

// prob); //

System.out.println("probabilidad de i "+ i + " :" + } int i=0; for(int x:arr) { double prob=x*100/(double)tot; System.out.println("probabilidad de i "+ i + " :" + i++; }

prob); } private static void incializarArrays(int[] arr) { for(int i = 0 ; i<arr.length ; i++) { arr[i]=0; } } }

CLASE 05 ARRAYS DE ACCESO INDIRECTO Se tiene una plainilla con la informacin delas multas labradas a los conductores de una ciudad con el siguiente formato Patente E23 T17 X76 T17 Z99 monto 150 3000 150 50 10 descripcin Habla por celular Excede velocidad Invade senda peatonal Mal estacionamiento fin

Se pide : ijnformar por cada patente el monto total adeudado. Nota:considere que, a lo sumo habr 100 patentes diferentes. Creacin de una clase para reprogramar una aplicacin JAVA ofrece tipo s de datos genereicos. , en java todas las clases hberedean de object en kla cual si yo manejo segn una clase de object, este puede contener cadenasmm, enteeros,.

package demo; import java.util.Scanner; public class Patentes { public static final int CANT_MAXIMA=100; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Ingrese : patente,monto,desc "); String patente = scanner.next(); double monto= scanner.nextDouble(); String desc = scanner.nextLine(); //2 arrays una para el patente y otro para la suma //notacion ungara, pon el nombre que quiera a la variable pero un prefijo // que distinge el array. String aPat[] = new String[CANT_MAXIMA]; double aTot[] = new double[CANT_MAXIMA]; int len=0; //equal porque las cadenas son objetos y los objetos son punteros while( !patente.equals("Z99")) {

//metodo que busca dentro del array //me devuelve la posicion donde me encuentra esta patente //dentro del arrays aPat //la funcion buscar me devolvera la funcion int pos= buscarPatente(aPat, len ,patente); //significa que este auto ya tiene una infreccion atenrior if(pos>=0) { //acumulando aTot[pos]=aTot[pos] + monto; } else { aPat[len] = patente; aTot[len] = monto; len++; } //capacidad y longitud patente = scanner.next(); monto= scanner.nextDouble(); desc = scanner.nextLine(); } mostrarResultados(aPat ,aTot ,len); } private static void mostrarResultados(String[] aPat, double[] aTot, int len) { for(int i = 0 ; i<len ; i++) { System.out.println(aPat[i] + " debe $ " + aTot[i] ); } } private static int buscarPatente(String aPat[],int len, String patente) { for(int i=0 ; i<len ; i++){ if(aPat[i].equals(patente)) { return i; } int i; for( i=0 ; i<len && !aPat[i].equals(patente); i++) return i>=len?-1:i; // if inline estructurada int pos=-1; for(int i=0 ; i<len ; i++) { if(aPat[i].equals(patente)) { return pos=i; } } return pos; }

// // // // // // // // // // // // // //

return -1; } }

package demo; import java.util.Scanner; public class Patentes2 { public static final int CANT_MAXIMA=100; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Ingrese : patente,monto,desc "); String patente = scanner.next(); double monto= scanner.nextDouble(); String desc = scanner.nextLine(); XArray<String> aPat = new XArray<String>(CANT_MAXIMA); XArray<Double> aTot = new XArray<Double>(CANT_MAXIMA); while( !patente.equals("Z99")) { //simplifica int pos= aPat.buscar(patente); if(pos>=0){ //obteniendo posicion double d = aTot.obtenerElemento(pos); d+= monto; //asignar al posicion del array //la posicion y lo que tengo que asignar aTot.asignarElemento(pos,d); } else{//si la posicion es menor que 0 le agrego aPat[len] = patente; aTot[len] = monto; len++; aPat.agregar(patente); aTot.agregar(monto); } //capacidad y longitud patente = scanner.next(); monto= scanner.nextDouble(); desc = scanner.nextLine(); } mostrarResultados(aPat ,aTot);

// // //

} private static void mostrarResultados(XArray<String> aPat, XArray<Double> aTot) { int len = aPat.getLen(); for(int i = 0 ; i<len ; i++) {

System.out.println(aPat.obtenerElemento(i) + " debe $ " + aTot.obtenerElemento(i)); } } }

package demo; // se parametriza la clase son generica en T public class XArray<T> { private Object arr[]; private int len; //para inicializar valores //puede recibir argumentos, en este caso //el tamao del array public XArray(int capacidad){ arr = new Object[capacidad]; len=0; } //sirve para agregar este elemento (T v) al array, xk la clase es de T public void agregar (T v){ arr[len] = v; len++; } //recibe un numero que busco, por eso int me pasaran un valior tipo T public int buscar(T v){ for(int i=0 ; i<len ; i++){ //como arrays es de tipo objectos entonces se usa el equals if(arr[i].equals(v)){ return i; } } return -1; } //obtener un elemento que devuelve T public T obtenerElemento(int i){ return (T)arr[i]; } public int getLen() { return len; } public void setLen(int len) { this.len = len; } public void asignarElemento(int pos, T d) { // asignar pos a d, y volverlo generico arr[pos] = d; } } package demo; public class TestXArray {

//probando el XArray creado public static void main(String[] args) { //esta encapsulado dentro de la clase XArray // para usar genericos, tenmgo que pasar el parametro de X arrays //tengo que pasar una clase que represente a lsom enteros. XArray<Integer> a = new XArray<Integer>(10); a.agregar(10); a.agregar(5); a.agregar(2); System.out.println("Longuitud : " + a.getLen()); //para recorrerlo y mostrar se usa un for for(int i = 0 ; i<a.getLen(); i++){ //a no es un array, a tiene un array adentro que es distinto //entonces debo accedes a A ; se debe crear un metodo que devuelva System.out.println(a.obtenerElemento(i)); } XArray<String> y = new XArray<String>(10); y.agregar("Pablo"); y.agregar("Juan"); y.agregar("Pedro"); System.out.println("Longuitud : " + y.getLen()); for(int i = 0 ; i<y.getLen(); i++){ System.out.println(y.obtenerElemento(i)); } } }

Que es una interface Es la definicin de un conjuto de mtodos, defin mtodos, una clase pouyede implkementar una o varioas interfaces,y si la clase implementa un interfaces, hereda mtodos abstractor y se tiene que sobre escribir, ejemplo, la clase String implementa comprable y sobre escribe el mtodo compareTo.

package demo; import java.util.GregorianCalendar; public class Fecha implements Comparable{

@Override public String toString() { // TODO Auto-generated method stub return dia + "/" + mes + "/"+ anio ; }

@Override public boolean equals(Object obj) { //CAST ENTIDAD FECHA PARA QUE RECONOSCA //SE VUELVE RESPONSABLE DE COMPARAR COSAS COMPARABLES. Fecha laOtra = (Fecha)obj; return dia == laOtra.dia && mes ==laOtra.mes && anio==laOtra.anio; } private int dia; private int mes; private int anio; public Fecha(int d, int m , int a){ dia = d; mes = m; anio = a; } public int getDia() { return dia; } public void setDia(int dia) { this.dia = dia; } public int getMes() { return mes; } public void setMes(int mes) { this.mes = mes; } public int getAnio() { return anio; } public void setAnio(int anio) { this.anio = anio; } @Override public int compareTo(Object o) { Fecha otra = (Fecha)o; //toma el mes 0 por eso -1 GregorianCalendar g1 = new GregorianCalendar(anio,mes 1,dia); GregorianCalendar g2 = new GregorianCalendar(otra.anio,otra.mes -1,otra.dia); //mne devuelve un entero que significa la fecha long l1 =g1.getTimeInMillis(); long l2 = g2.getTimeInMillis(); return l1<l2?-1:l1>l2?1:0; } }

package demo; public class TestXArray2 { public static void main(String[] args) { XArray<Integer> a = new XArray<Integer>(10); //java le comvierte en indeger a.insertarOrdenado(6); a.insertarOrdenado(2); a.insertarOrdenado(1); a.insertarOrdenado(5); for(int i = 0 ; i<a.getLen(); i++){ System.out.println(a.obtenerElemento(i)); } XArray<String> s = new XArray<String>(10); //java le comvierte en indeger s.insertarOrdenado("PABLO"); s.insertarOrdenado("JUAN"); s.insertarOrdenado("JOSE"); s.insertarOrdenado("WIKI"); for(int i = 0 ; i<s.getLen(); i++){ System.out.println(s.obtenerElemento(i)); } XArray<Fecha> f = new XArray<Fecha> (10); f.insertarOrdenado(new Fecha(12,5,2010)); f.insertarOrdenado(new Fecha(12,5,2009)); f.insertarOrdenado(new Fecha(12,5,2011)); f.insertarOrdenado(new Fecha(12,5,2005)); for(int i = 0 ; i<s.getLen(); i++){ System.out.println(f.obtenerElemento(i)); } } } package demo; // se parametriza la clase son generica en T public class XArray<T> { private Object arr[]; private int len; //para inicializar valores //puede recibir argumentos, en este caso //el tamao del array public XArray(int capacidad){ arr = new Object[capacidad]; len=0; } //sirve para agregar este elemento (T v) al array, xk la clase es de T public void agregar (T v){ arr[len] = v; len++; } //recibe un numero que busco, por eso int me pasaran un valior tipo T public int buscar(T v){

for(int i=0 ; i<len ; i++){ //como arrays es de tipo objectos entonces se usa el equals if(arr[i].equals(v)){ return i; } } return -1; } //obtener un elemento que devuelve T public T obtenerElemento(int i){ return (T)arr[i]; } public int getLen() { return len; } public void setLen(int len) { this.len = len; } public void asignarElemento(int pos, T d) { // asignar pos a d, y volverlo generico arr[pos] = d; } public void insertar(T v, int pos){ //primero bajar los elementos for(int i=len; i>pos; i--){ arr[i]=arr[i-1]; } //le asigno v arr[pos]=v; len++; // la longitud crecio uno } //comparable es un interface public void insertarOrdenado(Comparable v){ //se va recorer para ver donde se inserta int i=0; //mientras lo que tenga en v sea menor de lo que tenga en arr[i] /// y se quedara con el primer elemento mayor while(i<len && v.compareTo(arr[i])>=0){ // i es el numero donde quiero insertar i++; } insertar((T)v,i); } }

USAM 09

package demo; public class TestComparable { public static void main(String[] args) {

String s1= "Alberto"; String s2= "Juan"; if(s1.compareTo(s2)<0){ System.out.println(s1 + " es menor que " + s2); } else{ System.out.println(s1 + " es mayor que " + s2); } } }

Una interfaces es una definicin de mtodos, es decir una clase qe implmeneta una interfaces hereda los mtodos que estn definidos en esa interfaces, puede implementar masde una interface.

You might also like