Documentos de Académico
Documentos de Profesional
Documentos de Cultura
InstalacindeJava
InstalacindeJava
Descarga
ParapoderhacerestecursodebemosinstalarelcompiladordeJavaylamquina
virtualdeJava.Estasherramientaslaspodemosdescargarde:
JavaSEDevelopmentKit(descargarelWindowsx64ositieneunsistemaoperativo
de32bitsinstaleelWindowsx86).
UnavezquetenemoselJDK(JavaDevelopmentKit)procedemosainstalarlo:
La versin a instalar conviene que sea la ltima (en este momento disponemos la
versin8)
Presionamos el botn "next". Haremos la instalacin por defecto por lo que
presionamoselbotnnextnuevamente:
http://www.javaya.com.ar/detalleconcepto.php?codigo=74&inicio=0
1/4
2/25/2016
InstalacindeJava
EsperamosunosminutosmientrasseprocedealainstalacindeJava:
Luegoapareceundilogodondedebemosespecificareldirectoriodondealmacenar
el JRE y tambin procedemos a efectuar la instalacin por defecto presionando el
botn"next":
http://www.javaya.com.ar/detalleconcepto.php?codigo=74&inicio=0
2/4
2/25/2016
InstalacindeJava
Unavezfinalizadoelprocesodeinstalacindebeaparecerundilogosimilaraeste
y presionamos el botn Close (por el momento no vamos a instalar "Tutorials, Api
documentationetc.):
http://www.javaya.com.ar/detalleconcepto.php?codigo=74&inicio=0
3/4
2/25/2016
InstalacindeleditorEclipse
InstalacindeleditorEclipse
EnelconceptoanteriorprocedimosainstalarellenguajeJava(condichasherramientaspodemosejecutary
compilar programas codificados en java), pero ahora necesitamos instalar el Eclipse que es un editor para
codificarlosprogramas(sibienpodemosutilizarotroseditores,nosotrosutilizaremosesteparaseguirelcurso)
Descarga
ParaladescargadeleditorEclipselohacemosdelsitio:
EclipseIDEforJavaDevelopers.(Estaeslaquemsseadecuaanuestroestudio,elegimoselde64bito32
bitsegnlaversindeJDKinstaladaanteriormente)
Una vez que descargamos el Eclipse su instalacin es muy sencilla, creamos una carpeta llamada eclipse y
procedemosadescomprimirelarchivodescargadoindicandosolamentelaunidaddondeseinstala(ejemplo
c:).
Ahora nos dirigimos a la carpeta donde se instalaron los archivos y procedemos a ejecutar el programa
eclipse.exe
PrimeroapareceunmensajedeiniciodelEclipse:
LuegolaprimeravezqueejecutemoseleditorEclipseapareceundilogoparaseleccionarlacarpetadonde
sealmacenarnlosprogramasquedesarrollaremos(podemoscrearunacarpetadondealmacenaremostodos
los proyectos que desarrollaremos en el curso, si indicamos una carpeta que no existe el mismo Eclipse la
crea):
http://www.javaya.com.ar/detalleconcepto.php?codigo=75&inicio=0
1/3
2/25/2016
InstalacindeleditorEclipse
Luego de configurar la carpeta donde se crearn los proyecto aparece el editor con una pantalla de
presentacin(Welcome):
Esta ventana de bienvenida la podemos cerrar seleccionando el cono: "Workbench", con lo que aparece el
entorno de trabajo del Eclipse (si queremos nuevamente ver la ventana de bienvenida podemos activarla
desdeelmendeopciones:Help>Welcome")
ElentornodetrabajodelEclipsees:
http://www.javaya.com.ar/detalleconcepto.php?codigo=75&inicio=0
2/3
2/25/2016
InstalacindeleditorEclipse
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=75&inicio=0
3/3
2/25/2016
PasosparacrearunprogramaconEclipse
PasosparacrearunprogramaconEclipse
ElEclipseesunentornodetrabajoprofesional,porloqueenunprincipiopuedeparecercomplejo
eldesarrollodenuestrosprimerosprogramas.
TodoprogramaenEclipserequierelacreacindeun"Proyecto",paraestodebemosseleccionar
desdeelmendeopciones:
Ahoraapareceeldilogodondedebemosdefinirelnombredenuestroproyecto:
http://www.javaya.com.ar/detalleconcepto.php?codigo=76&inicio=0
1/8
2/25/2016
PasosparacrearunprogramaconEclipse
Enelcampodetexto"ProjectName"ingresamoscomonombre:Proyecto1ydejamostodaslas
otrasopcionesdeldilogoconlosvalorespordefecto.Presionamoselbotn"Finish".
Ahoraenlaventanade"PackageExplorer"apareceelproyectoqueacabamosdecrear:
http://www.javaya.com.ar/detalleconcepto.php?codigo=76&inicio=0
2/8
2/25/2016
PasosparacrearunprogramaconEclipse
ComosegundopasoveremosquetodoprogramaenJavarequierecomomnimounaclase.Para
crearunaclasedebemosseleccionardesdeelmendeopciones:
http://www.javaya.com.ar/detalleconcepto.php?codigo=76&inicio=0
3/8
2/25/2016
PasosparacrearunprogramaconEclipse
OdesdelabarradeconosdelEclipse:
Eneldilogoqueaparecedebemosdefinirelnombredelaclase(ennuestroprimerejemplola
llamaremos Clase1 (con mayscula la letra C), luego veremos que es importante definir un
nombrequerepresentealobjetivodelamisma),losotrosdatosdeldilogolosdejamosconlos
valorespordefecto:
Luegodepresionarelbotn"Finish"tenemoselarchivodondepodemoscodificarnuestroprimer
programa:
http://www.javaya.com.ar/detalleconcepto.php?codigo=76&inicio=0
4/8
2/25/2016
PasosparacrearunprogramaconEclipse
Ms adelante veremos los archivos que se crean en un proyecto, ahora nos dedicaremos a
codificarnuestroprimerprograma.Enlaventanadeedicinyatenemoselesqueletodeunaclase
deJavaqueelentornoEclipsenoscreautomticamente.
publicclassClase1{
}
TodoprogramaenJavadebedefinirlafuncinmain.Estafuncinladebemoscodificardentrode
laclase:"Clase1".
Procedemosatipearlosiguiente:
publicclassClase1{
publicstaticvoidmain(String[]parametro){
System.out.println("HolaMundoJava")
}
}
EsdecirtenemoscodificadoenelentornodelEclipsenuestroprimerprograma:
http://www.javaya.com.ar/detalleconcepto.php?codigo=76&inicio=0
5/8
2/25/2016
PasosparacrearunprogramaconEclipse
Como ltimo paso debemos compilar y ejecutar el programa, esto lo podemos hacer desde el
mendeopciones:
OdesdelabarradeconosdelEclipse:
http://www.javaya.com.ar/detalleconcepto.php?codigo=76&inicio=0
6/8
2/25/2016
PasosparacrearunprogramaconEclipse
Si no hay errores de codificacin debemos ver el resultado de la ejecucin en una ventana del
Eclipsellamada"Console"queapareceenlaparteinferior(puedeaparecerundilogopidiendo
quegrabemoselarchivo,elcualconfirmamos):
Lo ms importante es que quede claro los pasos que debemos dar para crear un proyecto en
http://www.javaya.com.ar/detalleconcepto.php?codigo=76&inicio=0
7/8
2/25/2016
Objetivosdelcursoynocionesbsicasindispensables
Objetivosdelcursoynocionesbsicasindispensables
Elcursoestideadoparaserdesarrolladoporunapersonaquenoconocenadadeprogramacinyseutilice
Javacomoprimerlenguaje.
Elobjetivofundamentaldeestetutorialespermitirqueelestudiantepuedaresolverproblemasdedistintandole
(matemticos,administrativos,grficos,contablesetc.)empleandocomoherramientalacomputadora.
Hayquetenerencuentaqueparallegaraserprogramadorsedeberecorrerunlargocaminodondecadatema
esfundamentalparaconceptosfuturos.Esimportantenodejartemassinentenderyrelacionar.
La programacin a diferencia de otras materias como podra ser la historia requiere un estudio metdico y
ordenado(enhistoriasepuedeestudiarlaedadmediasintenergrandesconocimientosdelaedadantigua)
Laprogramacinesunaactividadnuevaparaelestudiante,nohayenlosestudiosprimariosysecundariosuna
materiaparecida.
Es bueno tenerse paciencia cuando los problemas no se resuelven por completo, pero es de fundamental
importanciadedicartiempoalanlisisindividualdelosproblemas.
Quesunprograma?
Programa:Conjuntodeinstruccionesqueentiendeunordenadorpararealizarunaactividad.
Todo programa tiene un objetivo bien definido: un procesador de texto es un programa que permite cargar,
modificar e imprimir textos, un programa de ajedrez permite jugar al ajedrez contra el ordenador u otro
contrincantehumano.
La actividad fundamental del programador es resolver problemas empleando el ordenador como herramienta
fundamental.
Paralaresolucindeunproblemahayqueplantearunalgoritmo.
Algoritmo:Sonlospasosaseguirpararesolverunproblema.
Diagramadeflujo
UndiagramadeflujoeslarepresentacingrficadeunALGORITMO.
Lossmbolosgrficosautilizarparaelplanteodediagramasdeflujoson:
http://www.javaya.com.ar/detalleconcepto.php?codigo=77&inicio=0
1/11
2/25/2016
Objetivosdelcursoynocionesbsicasindispensables
Estossonloselementosesencialesqueintervieneneneldesarrollodeundiagramadeflujo.
Planteodeunproblemautilizandodiagramasdeflujo.
Paraplantearundiagramadeflujodebemostenermuyenclaroelproblemaaresolver.
Ejemplo:Calcularelsueldomensualdeunoperarioconociendolacantidaddehorastrabajadasyelpagopor
hora.
Podemosidentificar:
Datosconocidos:
Horastrabajadasenelmes.
Pagoporhora.
Proceso:
Clculodelsueldomultiplicandolacantidaddehorasporelpagoporhora.
Informacinresultante:
Sueldomensual.
Sihacemosunanlisistodoproblemaestconstituidopor:
Datosconocidos:Datosconlosquesecuentaalplantearelproblema.
Proceso:Operacionesarealizarconlosdatosconocidos.
Informacinresultante:Eslainformacinqueresuelveelproblema.
Esta forma de expresar un problema identificando sus datos conocidos, procesos e informacin resultante
puedellegaraserengorrosaparaproblemascomplejosdondehaymuchosdatosconocidosyprocesos.Espor
eso que resulta mucho ms efectivo representar los pasos para la resolucin del problema mediante un
diagramadeflujo.
http://www.javaya.com.ar/detalleconcepto.php?codigo=77&inicio=0
2/11
2/25/2016
Objetivosdelcursoynocionesbsicasindispensables
Resultamuchomsfcilentenderungrficoqueuntexto.
Eldiagramadeflujonosidentificaclaramentelosdatosdeentrada,operacionesydatosdesalida.
Enelejemplotenemosdosdatosdeentrada:horasTrabajadasycostoHora,alasentradaslasrepresentamos
conunparalelogramoyhacemosunparalelogramoporcadadatodeentrada.
Laoperacinserepresentaconunrectngulo,debemoshacerunrectnguloporcadaoperacin.Alasalidala
representamosconlahojarota.
Eldiagramadeflujonosdaunaideadelordendeejecucindelasactividadeseneltiempo.Primerocargamos
losdatosdeentrada,luegohacemoslasoperacionesnecesariasyporltimomostramoslosresultados.
CodificacindelproblemaconellenguajeJava.
Nodebemosperderdevistaqueelfinltimoesrealizarunprogramadecomputacinquepermitaautomatizar
unaactividadparaquemuchosprocesosseandesarrolladosporlacomputadora.
Eldiagramadeflujoesunpasointermedioparapoderserinterpretadoporlacomputadora.
El paso siguiente es la codificacin del diagrama de flujo en un lenguaje de computacin, en nuestro caso
emplearemosellenguajeJava.
Lenguajedecomputacin:Conjuntodeinstruccionesquesoninterpretadasporunacomputadorapararealizar
operaciones,mostrardatosporpantalla,sacarlistadosporimpresora,entrardatosporteclado,etc.
Conceptosbsicosparacodificarunprograma.
Variable:Esundepsitodondehayunvalor.Constadeunnombreyperteneceauntipo.
Para el ejemplo planteado la variable horasTrabajadas almacena la cantidad de horas trabajadas por el
operario. La variable valorHora almacena el precio de una hora de trabajo. La variable sueldo almacena el
sueldoaabonaraloperario.
Enelejemplotenemostresvariables.
Tiposdevariable:
Unavariablepuedealmacenar:
ValoresEnteros(100,260,etc.)
http://www.javaya.com.ar/detalleconcepto.php?codigo=77&inicio=0
3/11
2/25/2016
Objetivosdelcursoynocionesbsicasindispensables
ValoresReales(1.24,2.90,5.00,etc.)
Cadenasdecaracteres("Juan","Compras","Listado",etc.)
Eleccindelnombredeunavariable:
Debemos elegir nombres de variables representativas. En el ejemplo el nombre horasTrabajadas es lo
suficientementeclaroparadarnosunaideaacabadasobresucontenido.Podemosdarleotrosbuenosnombres.
Otros no son tan representativos, por ejemplo hTr. Posiblemente cuando estemos resolviendo un problema
dichonombrenosrecuerdequealmacenamoslashorastrabajadasporeloperarioperocuandopaseeltiempoy
leamoseldiagramaprobablementenorecordemosnientendamosqusignificahTr.
Consideracionesatenerencuentaencadaproyecto.
Hay que tener en cuenta que el entorno de programacin "Eclipse" no a sido desarrollado pensando en un
principiantedelaprogramacin.LomismoocurreconelpropiolenguajeJava,esdecirsuorigennotienecomo
principioelaprendizajedelaprogramacin.Debidoaestosdospuntosveremosqueamedidaqueavanzamos
coneltutorialmuchosconceptosqueiremosdejandopendientesseirnaclarando.
Codificaremos el problema propuesto para repasar los pasos para la creacin de un proyecto en Eclipse,
creacindelaclaseprincipal,definicindelafuncinmainyelposteriordesarrollodelalgoritmodelproblema.
Pasos.
1 Creacin del proyecto (tema visto anteriormente). Podemos asignarle como nombre: SueldoOperario
(normalmenteunobuscaunnombrerepresentativoalprogramaquedesarrolla)
http://www.javaya.com.ar/detalleconcepto.php?codigo=77&inicio=0
4/11
2/25/2016
Objetivosdelcursoynocionesbsicasindispensables
2 Creacin de la clase. Definiremos como nombre el mismo que le asignamos al proyecto (esto no es
obligatoriocomoveremosmsadelanteunproyectopuedecontenervariasclases)
Esdecirdisponemoscomonombredelaclase:SueldoOperario.
http://www.javaya.com.ar/detalleconcepto.php?codigo=77&inicio=0
5/11
2/25/2016
Objetivosdelcursoynocionesbsicasindispensables
Inicializamoselcampoquesolicitael"Name"con"SueldoOperario".
3Codificamoselalgoritmoenlaclase:SueldoOperario.
importjava.util.Scanner
publicclassSueldoOperario{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
inthorasTrabajadas
floatcostoHora
floatsueldo
System.out.print("Ingreselacantidaddehorastrabajadasporelemplea
horasTrabajadas=teclado.nextInt()
System.out.print("Ingreseelvalordelahora:")
costoHora=teclado.nextFloat()
sueldo=horasTrabajadas*costoHora
System.out.print("Elempleadodebecobrar:")
System.out.print(sueldo)
}
}
4Ejecutamoselprograma:
http://www.javaya.com.ar/detalleconcepto.php?codigo=77&inicio=0
6/11
2/25/2016
Objetivosdelcursoynocionesbsicasindispensables
5Sinohayerroressintcticosprocedemosaactivarlaventanadela"Console"conelmouseycargamospor
tecladolosdosdatosquesesolicitan(lacantidaddehorastrabajadasyelpreciodelahora):
http://www.javaya.com.ar/detalleconcepto.php?codigo=77&inicio=0
7/11
2/25/2016
Objetivosdelcursoynocionesbsicasindispensables
Estos cinco pasos fundamentales debemos llevar a cabo cada vez que desarrollemos un nuevo programa en
Java.
Explicacin.
Ahoraveremosunaexplicacindevariaspartesdenuestroprogramayotraspartesquedarnpendientespara
msadelanteyaqueenestemomentodifcilmenteseentiendan.
Conceptosquequedarnpendientesparaexplicar:
1.
Conceptodeunaclase.VeremosmsadelantequeenJavatododebeestarcontenidoenclases,porlo
que hasta el problema ms elemental debe estar contenido en una clase. Para declarar una clase
utilizamoslasintaxis:
publicclassSueldoOperario{
}
Elnombredelaclasenopuedetenerespaciosenblanco,comienzaconunaletramaysculayencasode
estarconstituidapordosomspalabraselprimercaractervaenmaysculas,nopuedeempezarconun
nmero, pero si puede llevar nmeros a partir del segundo caracter. Toda clase debe tener una llave de
aperturayunallavedecierre.
http://www.javaya.com.ar/detalleconcepto.php?codigo=77&inicio=0
8/11
2/25/2016
Objetivosdelcursoynocionesbsicasindispensables
2.
Todoprogramaconstituidoporunanicaclasedebetenerdefinidalafuncinmain:
publicstaticvoidmain(String[]ar){
}
Lafuncinmaineslaprimeraqueseejecutaydebellevarlasintaxisindicadaanteriormente(msadelante
veremosquesignificaelparmetroar,laspalabrasclavespublic,staticyvoid.Lafuncinmaintieneuna
llavedeaperturayunallavedecierre(similaralaclase).Lafuncinmaindebeestarcontenidaenlaclase.
3.
Cuandoserequierenutilizarotrasclasesdebemosimportarlasprevioaladeclaracindelaclase(en
nuestro problema utilizamos la clase Scanner que se encuentra en el paquete java.util por lo que la
importamosconlasiguientesintaxis:
importjava.util.Scanner;
EnlamaincreamosunobjetodelaclaseScannerquenospermitiringresarportecladolosvalores:
Scannerteclado=newScanner(System.in);
Conceptosquedebenquedarclaros:
1.
Porelmomentoharemostodoelalgoritmodentrodelafuncinmain.Esdecirelrestosiempreserlo
mismo(declararunproyecto,declararunaclase,definirunafuncinmain)
2.
Si observamos el diagrama de flujos vemos que debemos definir tres variables: (horasTrabajadas,
costoHora,sueldo),aquesdondedebemosdefinirquetiposdedatossealmacenarnenlasmismas.
Lacantidaddehorasnormalmenteserunvalorentero(ej.100150230etc.),peroelcostodela
horaesmuycomnqueseaunvalorreal(ej.5,357,50etc.)ycomoelsueldoresultademultiplicarlas
horastrabajadasporelcostoporhoraelmismodeberserreal.
Ladefinicindelasvariableslahacemosenlamain:
inthorasTrabajadas;
floatcostoHora;
floatsueldo;
Utilizamos la palabra clave int para definir variables enteras (en Java las palabras claves deben ir
obligatoriamente en minsculas, sino se produce un error sintctico) Luego de la palabra clave debemos
indicar el nombre de la variable, por ejemplo: horasTrabajadas (se propone que el nombre de la variable
comience con minsculas y en caso de estar constituida por dos palabras o ms a partir de la segunda
palabraelprimercaracterseespecifiqueconmaysculas(unnombredevariablenopuedetenerespacios
enblanco,empezarconunnmero,nitampocoutilizarcaracteresespeciales)
Debemosbuscarsiemprenombresdevariablesquenosindiquenquealmacenan(noesconvenientellamar
anombresdevariablesconletrasindividuales)
3.
Paramostrarmensajesenla"Console"utilizamoslasiguientesintaxis:
System.out.print("Ingreselacantidaddehorastrabajadasporelempleado:");
http://www.javaya.com.ar/detalleconcepto.php?codigo=77&inicio=0
9/11
2/25/2016
Objetivosdelcursoynocionesbsicasindispensables
Conestasintaxistodoloqueseencuentracontenidoentrecomillasaparecerexactamenteenlaventana
dela"Console".
Sidisponemosunavariable:
System.out.print(sueldo);
Aparecerelcontenidodelavariable.Esdecirelvaloralmacenadoenlavariablesueldoynoelmensaje
"sueldo".
4.
Para hacer la entrada de datos por teclado en Java se complica. Utilizaremos una clase llamada
Scanner que nos facilita el ingreso de datos. Por eso tuvimos que importar la clase Scanner que se
encuentraenelpaquetejava.utilenlaprimerlneadenuestroprograma.
EnlafuncinmaindebemoscrearunobjetodelaclaseScannerconlasiguientesintaxis:
Scannerteclado=newScanner(System.in);
Luegoparacargarvaloresenterosportecladodebemosimplementarlasiguientesintaxis:
horasTrabajadas=teclado.nextInt();
Perosieldatoacargarsetratadeunvalorfloatluegodebemosutilizarlasiguientesintaxis:
costoHora=teclado.nextFloat();
5.
Lasoperacionesqueindicamoseneldiagramadeflujomediantelafigurarectngulolacodificamostal
cual:
sueldo=horasTrabajadas*costoHora;
Podemosverunarelacinentrelasinstruccionesquedebemosutilizarparacadasmbolodeldiagramadeflujo:
http://www.javaya.com.ar/detalleconcepto.php?codigo=77&inicio=0
10/11
2/25/2016
Objetivosdelcursoynocionesbsicasindispensables
Eneldiagramadeflujonoindicamosladefinicindevariables:
inthorasTrabajadas;
floatcostoHora;
floatsueldo;
NoindicamoslacreacindelobjetodelaclaseScanner:
Scannerteclado=newScanner(System.in);
Norepresentamosconsmboloslosmensajesamostrarprevioalacargadedatosporteclado:
System.out.print("Ingreselacantidaddehorastrabajadasporelempleado:");
Como hemos visto hasta ahora hay muchas partes de nuestro cdigo que no entendemos pero son
indispensablesparalaimplementacindenuestrosprogramas,amedidaqueavancemosconelcursomuchos
deestosconceptosseirnaclarando.
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=77&inicio=0
11/11
2/25/2016
Erroressintcticosylgicos
Erroressintcticosylgicos
Confeccionaremosunproblemayagregaremosadredeunaseriedeerrorestipogrficos.Estetipo
deerroressiempresondetectadosporelCOMPILADOR,antesdeejecutarelprograma.
A los errores tipogrficos, como por ejemplo la falta de puntos y comas, nombres de variables
incorrectas, falta de parntesis, palabras claves mal escritas, etc. los llamamos errores
SINTACTICOS.
Unprogramanosepuedeejecutarsincorregirabsolutamentetodosloserroressintcticos.
Existe otro tipo de errores llamados ERRORES LOGICOS. Este tipo de errores en programas
grandes (miles de lneas) son ms difciles de localizar. Por ejemplo un programa que permite
hacerlafacturacinperolasalidadedatosporimpresoraesincorrecta.
Problema:
Hallarlasuperficiedeuncuadradoconociendoelvalordeunlado.
Diagramadeflujo:
Proyecto:
CreemosunproyectollamadoSuperficieCuadradoyunaclasellamadaSuperficieCuadrado.
http://www.javaya.com.ar/detalleconcepto.php?codigo=78&inicio=0
1/3
2/25/2016
Erroressintcticosylgicos
CodificamoselalgoritmoenJavaeintroducimosdoserroressintctico:
1DisponemoselnombredelobjetoSystemconminsculas.
2Tratamosdeimprimirelnombredelavariablesuperficieconelprimercaracterenmaysculas.
ComopodemosobservaraparecesubrayadolalneadondedisponemosSystemconminsculas
como en la lnea que imprimimos la variable superficie con maysculas. Si modificamos y
corregimoslosdoserroressintcticospodremosejecutarnuestroprograma.
Programacorrectamentecodificado:
importjava.util.Scanner
publicclassSuperficieCuadrado{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intlado
intsuperficie
System.out.print("Ingreseelvalordelladodelcuadrado:")
lado=teclado.nextInt()
superficie=lado*lado
System.out.print("Lasuperficiedelcuadradoes:")
System.out.print(superficie)
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=78&inicio=0
2/3
2/25/2016
Erroressintcticosylgicos
Programaconunerrorlgico:
importjava.util.Scanner
publicclassSuperficieCuadrado{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intlado
intsuperficie
System.out.print("Ingreseelvalordelladodelcuadrado:")
lado=teclado.nextInt()
superficie=lado*lado*lado
System.out.print("Lasuperficiedelcuadradoes:")
System.out.print(superficie)
}
}
Como podemos observar si ejecutamos el programa no presenta ningn error de compilacin. Pero
luegodeingresarelvalordelladodelcuadrado(porejemploelvalor10)obtenemoscomoresultado
un valor incorrecto (imprime el 1000), esto debido que definimos incorrectamente la frmula para
calcularlasuperficiedelcuadrado:
superficie=lado*lado*lado;
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=78&inicio=0
3/3
2/25/2016
Estructuradeprogramacinsecuencial
Estructuradeprogramacinsecuencial
Cuando en un problema slo participan operaciones, entradas y salidas se la
denominaunaestructurasecuencial.
Los problemas diagramados y codificados previamente emplean solo estructuras
secuenciales.
La programacin requiere una prctica ininterrumpida de diagramacin y
codificacindeproblemas.
Problema:
Realizar la carga de dos nmeros enteros por teclado e imprimir su suma y su
producto.
Diagramadeflujo:
Tenemosdosentradasnum1ynum2(recordarculessonlosnombresdevariables
http://www.javaya.com.ar/detalleconcepto.php?codigo=79&inicio=0
1/5
2/25/2016
Estructuradeprogramacinsecuencial
importjava.util.Scanner
publicclassSumaProductoNumeros{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intnum1,num2,suma,producto
System.out.print("Ingreseprimervalor:")
num1=teclado.nextInt()
System.out.print("Ingresesegundovalor")
num2=teclado.nextInt()
suma=num1+num2
producto=num1*num2
System.out.print("Lasumadelosdosvaloreses:")
System.out.println(suma)
System.out.print("Elproductodelosdosvaloreses:"
System.out.println(producto)
}
}
Recordemosquetenemosqueseguirtodoslospasosvistosparalacreacindeun
proyecto, su clase, definicin de la funcin main y la codificacin del diagrama de
flujo.
Algunascosasnuevasquepodemosnotar:
Podemosdefinirvariasvariablesenlamismalnea:
intnum1,num2,suma,producto;
System.out.println(suma);
http://www.javaya.com.ar/detalleconcepto.php?codigo=79&inicio=0
2/5
2/25/2016
Estructuradeprogramacinsecuencial
Problemaspropuestos
1. Realizarlacargadelladodeuncuadrado,mostrarporpantallaelpermetrodel
mismo (El permetro de un cuadrado se calcula multiplicando el valor del lado
porcuatro)
2. Escribirunprogramaenelcualseingresencuatronmeros,calculareinformar
lasumadelosdosprimerosyelproductodelterceroyelcuarto.
3. Realizar un programa que lea cuatro valores numricos e informar su suma y
promedio.
4. Sedebedesarrollarunprogramaquepidaelingresodelpreciodeunartculoy
lacantidadquellevaelcliente.Mostrarloquedebeabonarelcomprador.
importjava.util.Scanner
publicclassPerimetroCuadrado{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intlado,perimetro
System.out.print("Ingreseelladodelcuadrado:")
lado=teclado.nextInt()
perimetro=lado*4
System.out.print("Elpermetrodelcuadradoes:")
System.out.print(perimetro)
}
}
importjava.util.Scanner
publicclassSumaProducto4Numeros{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intnum1,num2,num3,num4,suma,producto
System.out.print("Ingreseprimervalor:")
num1=teclado.nextInt()
System.out.print("Ingresesegundovalor:")
num2=teclado.nextInt()
System.out.print("Ingresetercervalor:")
num3=teclado.nextInt()
System.out.print("Ingresecuartovalor:")
num4=teclado.nextInt()
suma=num1+num2
producto=num3*num4
http://www.javaya.com.ar/detalleconcepto.php?codigo=79&inicio=0
3/5
2/25/2016
Estructuradeprogramacinsecuencial
}
}
System.out.print("Lasumadelosdosprimerovaloreses:")
System.out.println(suma)
System.out.print("Elproductodeltercerycuartovalores:")
System.out.print(producto)
importjava.util.Scanner
publicclassSumaPromedio{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intnum1,num2,num3,num4,suma,promedio
System.out.print("Ingreseprimervalor:")
num1=teclado.nextInt()
System.out.print("Ingresesegundovalor:")
num2=teclado.nextInt()
System.out.print("Ingresetercervalor:")
num3=teclado.nextInt()
System.out.print("Ingresecuartovalor:")
num4=teclado.nextInt()
suma=num1+num2+num3+num4
promedio=suma/4
System.out.print("Lasumadeloscuatrovaloreses:")
System.out.println(suma)
System.out.print("Elpromedioes:")
System.out.print(promedio)
}
}
importjava.util.Scanner
publicclassCostoCompra{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intcantidad
floatprecio
floatimporte
System.out.print("Ingreselacantidaddeartculosallevar:")
cantidad=teclado.nextInt()
System.out.print("Ingreseelvalorunitariodelproducto:")
precio=teclado.nextFloat()
importe=precio*cantidad
System.out.print("Elimportetotalapagares:")
System.out.print(importe)
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=79&inicio=0
4/5
2/25/2016
Estructurascondicionalessimplesycompuestas
Estructurascondicionalessimplesy
compuestas
No todos los problemas pueden resolverse empleando estructuras secuenciales.
Cuandohayquetomarunadecisinaparecenlasestructurascondicionales.
Ennuestravidadiariasenospresentansituacionesdondedebemosdecidir.
ElijolacarreraAolacarreraB?
Mepongoestepantaln?
Parairaltrabajo,elijoelcaminoAoelcaminoB?
Alcursarunacarrera,elijoelturnomaana,tardeonoche?
Por supuesto que en un problema se combinan estructuras secuenciales y
condicionales.
Estructuracondicionalsimple.
Cuando se presenta la eleccin tenemos la opcin de realizar una actividad o no
realizarninguna.
Representacingrfica:
1/9
2/25/2016
Estructurascondicionalessimplesycompuestas
inclusiveyaveremosquepuedehaberotrasestructurascondicionales.
Problema:
Ingresarelsueldodeunapersona,sisuperalos3000pesosmostrarunmensajeen
pantallaindicandoquedebeabonarimpuestos.
Diagramadeflujo:
importjava.util.Scanner
publicclassEstructuraCondicionalSimple1{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
floatsueldo
http://www.javaya.com.ar/detalleconcepto.php?codigo=80&inicio=0
2/9
2/25/2016
Estructurascondicionalessimplesycompuestas
}
}
System.out.print("Ingreseelsueldo:")
sueldo=teclado.nextFloat()
if(sueldo>3000){
System.out.println("Estapersonadebeabonarimpu
}
Lapalabraclave"if"indicaqueestamosenpresenciadeunaestructuracondicional
seguidamentedisponemoslacondicinentreparntesis.Porltimoencerradaentre
llaveslasinstruccionesdelaramadelverdadero.
Es necesario que las instrucciones a ejecutar en caso que la condicin sea verdadera
estnencerradasentrellaves{},conellasmarcamoselcomienzoyelfindelbloquedel
verdadero.
Ejecutando el programa e ingresamos un sueldo superior a 3000 pesos. Podemos
observar como aparece en pantalla el mensaje "Esta persona debe abonar
impuestos",yaquelacondicindelifesverdadera.
Volvamos a ejecutar el programa y carguemos un sueldo menor o igual a 3000
pesos.Nodebeaparecermensajeenpantalla.
Estructuracondicionalcompuesta.
Cuandosepresentalaeleccintenemoslaopcinderealizarunaactividaduotra.
Esdecirtenemosactividadesporelverdaderoyporelfalsodelacondicin.Loms
importantequehayquetenerencuentaqueserealizanlasactividadesdelarama
delverdaderoolasdelfalso,NUNCAserealizanlasactividadesdelasdosramas.
Representacingrfica:
http://www.javaya.com.ar/detalleconcepto.php?codigo=80&inicio=0
3/9
2/25/2016
Estructurascondicionalessimplesycompuestas
Problema:
Realizar un programa que solicite ingresar dos nmeros distintos y muestre por
pantallaelmayordeellos.
Diagramadeflujo:
http://www.javaya.com.ar/detalleconcepto.php?codigo=80&inicio=0
4/9
2/25/2016
Estructurascondicionalessimplesycompuestas
Sehacelaentradadenum1ynum2porteclado.Parasabercualvariabletieneun
valormayorpreguntamossielcontenidodenum1esmayor(>)queelcontenidode
num2,silarespuestaesverdaderavamosporlaramadeladerechaeimprimimos
num1,encasoquelacondicinseafalsavamosporlaramadelaizquierda(Falsa)
eimprimimosnum2.
Comopodemosobservarnuncaseimprimennum1ynum2simultneamente.
EstamosenpresenciadeunaESTRUCTURACONDICIONALCOMPUESTAyaque
tenemosactividadesporlaramadelverdaderoydelfalso.
Programa:
importjava.util.Scanner
publicclassEstructuraCondicionalCompuesta1{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intnum1,num2
System.out.print("Ingreseprimervalor:")
num1=teclado.nextInt()
System.out.print("Ingresesegundovalor:")
http://www.javaya.com.ar/detalleconcepto.php?codigo=80&inicio=0
5/9
2/25/2016
Estructurascondicionalessimplesycompuestas
}
}
num2=teclado.nextInt()
if(num1>num2){
System.out.print(num1)
}else{
System.out.print(num2)
}
Cotejemoseldiagramadeflujoylacodificacinyobservemosqueelprimerbloque
de llaves despus del if representa la rama del verdadero y el segundo bloque de
llavesrepresentalaramadelfalso.
Compilemos el programa, si hubo errores sintcticos corrijamos y carguemos dos
valores,comoporejemplo:
Ingreseelprimervalor:10
Ingreseelsegundovalor:4
10
Operadores
En una condicin deben disponerse nicamente variables, valores constantes y
operadoresrelacionales.
>OperadoresRelacionales:
>(mayor)
<(menor)
>=(mayoroigual)
http://www.javaya.com.ar/detalleconcepto.php?codigo=80&inicio=0
6/9
2/25/2016
Estructurascondicionalessimplesycompuestas
<=(menoroigual)
==(igual)
!=(distinto)
OperadoresMatemticos
+(ms)
(menos)
*(producto)
/(divisin)
%(restodeunadivisin)Ej.:x=13%5;{seguarda3}
Hay que tener en cuenta que al disponer una condicin debemos seleccionar que
operadorrelacionalseadaptaalapregunta.
Ejemplos:
Seingresaunnmeromultiplicarlopor10siesdistintoa0.(!=)
Seingresandosnmerosmostrarunaadvertenciasisoniguales.(==)
Los problemas que se pueden presentar son infinitos y la correcta eleccin del
operadorslosealcanzaconlaprcticaintensivaenlaresolucindeproblemas.
Problemaspropuestos
1. Realizarunprogramaqueleaportecladodosnmeros,sielprimeroesmayor
alsegundoinformarsusumaydiferencia,encasocontrarioinformarelproducto
yladivisindelprimerorespectoalsegundo.
2. Se ingresan tres notas de un alumno, si el promedio es mayor o igual a siete
mostrarunmensaje"Promocionado".
3. Seingresaportecladounnmeropositivodeunoodosdgitos(1..99)mostrar
unmensajeindicandosielnmerotieneunoodosdgitos.
(Tener en cuenta que condicin debe cumplirse para tener dos dgitos, un
nmeroentero)
importjava.util.Scanner
publicclassEstructuraCondicionalCompuesta2{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intnum1,num2
System.out.print("Ingreseprimervalor:")
num1=teclado.nextInt()
http://www.javaya.com.ar/detalleconcepto.php?codigo=80&inicio=0
7/9
2/25/2016
Estructurascondicionalessimplesycompuestas
}
}
System.out.print("Ingresesegundovalor:")
num2=teclado.nextInt()
if(num1>num2){
intsuma,diferencia
suma=num1+num2
diferencia=num1num2
System.out.print("Lasumadelosdosvaloreses:")
System.out.println(suma)
System.out.print("Ladiferenciadelosdosvaloreses:")
System.out.println(diferencia)
}else{
intproducto,division
producto=num1*num2
division=num1/num2
System.out.print("Elproductodelosdosvaloreses:")
System.out.println(producto)
System.out.print("Ladivisindelosdosvaloreses:")
System.out.println(division)
importjava.util.Scanner
publicclassEstructuraCondicionalSimple2{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intnota1,nota2,nota3
System.out.print("Ingreseprimernota:")
nota1=teclado.nextInt()
System.out.print("Ingresesegundanota:")
nota2=teclado.nextInt()
System.out.print("Ingresetercernota:")
nota3=teclado.nextInt()
intpromedio
promedio=(nota1+nota2+nota3)/3
if(promedio>=7){
System.out.print("Promocionado")
}
}
}
importjava.util.Scanner
publicclassEstructuraCondicionalCompuesta3{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intnum
System.out.print("Ingreseunvalorenterode1o2dgitos:")
http://www.javaya.com.ar/detalleconcepto.php?codigo=80&inicio=0
8/9
2/25/2016
Estructurascondicionalessimplesycompuestas
}
}
num=teclado.nextInt()
if(num<10){
System.out.print("Tieneundgito")
}else{
System.out.print("Tienedosdgitos")
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=80&inicio=0
9/9
2/25/2016
Estructurascondicionalesanidadas
Estructurascondicionalesanidadas
Decimos que una estructura condicional es anidada cuando por la rama del
verdaderooelfalsodeunaestructuracondicionalhayotraestructuracondicional.
Problema:
Confeccionarunprogramaquepidaportecladotresnotasdeunalumno,calculeel
promedioeimprimaalgunodeestosmensajes:
Sielpromedioes>=7mostrar"Promocionado".
Sielpromedioes>=4y<7mostrar"Regular".
Sielpromedioes<4mostrar"Reprobado".
Diagramadeflujo:
http://www.javaya.com.ar/detalleconcepto.php?codigo=81&inicio=0
1/7
2/25/2016
Estructurascondicionalesanidadas
2/7
2/25/2016
Estructurascondicionalesanidadas
Estamosenpresenciadedosestructurascondicionalescompuestas.
Programa:
importjava.util.Scanner
publicclassEstructuraCondicionalAnidada1{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intnota1,nota2,nota3
System.out.print("Ingreseprimernota:")
nota1=teclado.nextInt()
System.out.print("Ingresesegundanota:")
nota2=teclado.nextInt()
System.out.print("Ingresetercernota:")
nota3=teclado.nextInt()
intpromedio=(nota1+nota2+nota3)/3
if(promedio>=7){
System.out.print("Promocionado")
}else{
if(promedio>=4){
System.out.print("Regular")
}else{
System.out.print("Reprobado")
}
}
}
}
Codifiquemos y ejecutemos este programa. Al correr el programa deber solicitar
por teclado la carga de tres notas y mostrarnos un mensaje segn el promedio de
lasmismas.
Podemosdefinirunconjuntodevariablesdelmismotipoenunamismalnea:
intnota1,nota2,nota3;
Estonoesobligatorioperoaveces,porestarrelacionadas,conviene.
Alacodificacindelifanidadopodemosobservarlaporelelsedelprimerif.
Paranotenerproblemas(olvidarnos)conlasllavesdeaperturaycerradopodemos
verlasiguienteregla:
http://www.javaya.com.ar/detalleconcepto.php?codigo=81&inicio=0
3/7
2/25/2016
Estructurascondicionalesanidadas
Cadavrticerepresentaunallavedeaperturayunadecierre:
Problemaspropuestos
1. Secarganportecladotresnmerosdistintos.Mostrarporpantallaelmayorde
ellos.
2. Se ingresa por teclado un valor entero, mostrar una leyenda que indique si el
nmeroespositivo,nuloonegativo.
3. Confeccionar un programa que permita cargar un nmero entero positivo de
hastatrescifrasymuestreunmensajeindicandositiene1,2,o3cifras.Mostrar
unmensajedeerrorsielnmerodecifrasesmayor.
4. Un postulante a un empleo, realiza un test de capacitacin, se obtuvo la
siguiente informacin: cantidad total de preguntas que se le realizaron y la
cantidad de preguntas que contest correctamente. Se pide confeccionar un
programa que ingrese los dos datos por teclado e informe el nivel del mismo
segnelporcentajederespuestascorrectasquehaobtenido,ysabiendoque:
Nivelmximo: Porcentaje>=90%.
Nivelmedio:
Porcentaje>=75%y<90%.
Nivelregular: Porcentaje>=50%y<75%.
Fueradenivel:Porcentaje<50%.
importjava.util.Scanner
publicclassEstructuraCondicionalAnidada2{
http://www.javaya.com.ar/detalleconcepto.php?codigo=81&inicio=0
4/7
2/25/2016
Estructurascondicionalesanidadas
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intnum1,num2,num3
System.out.print("Ingreseprimervalor:")
num1=teclado.nextInt()
System.out.print("Ingresesegundavalor:")
num2=teclado.nextInt()
System.out.print("Ingresetercervalor:")
num3=teclado.nextInt()
if(num1>num2){
if(num1>num3){
System.out.print(num1)
}else{
System.out.println(num3)
}
}else{
if(num2>num3){
System.out.print(num2)
}else{
System.out.print(num3)
}
}
}
}
importjava.util.Scanner
publicclassEstructuraCondicionalAnidada3{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intnum
System.out.print("Ingreseunvalor:")
num=teclado.nextInt()
if(num==0){
System.out.print("Seingreselcero")
}else{
if(num>0){
System.out.print("Seingresunvalorpositivo")
}else{
System.out.print("Seingresunvalornegativo")
}
}
}
importjava.util.Scanner
publicclassEstructuraCondicionalAnidada4{
http://www.javaya.com.ar/detalleconcepto.php?codigo=81&inicio=0
5/7
2/25/2016
Estructurascondicionalesanidadas
publicclassEstructuraCondicionalAnidada4{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intnum
System.out.print("Ingreseunvalordehastatresdgitospositivo:
num=teclado.nextInt()
if(num<10){
System.out.print("Tieneundgito")
}
else{
if(num<100){
System.out.print("Tienedosdgitos")
}else{
if(num<1000){
System.out.print("Tienetresdgitos")
}else{
System.out.print("Errorenlaentradadedatos.")
}
}
}
}
}
importjava.util.Scanner
publicclassEstructuraCondicionalAnidada5{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
inttotalPreguntas,totalCorrectas
System.out.print("Ingreselacantidadtotaldepreguntasdelexame
totalPreguntas=teclado.nextInt()
System.out.print("Ingreselacantidadtotaldepreguntascontestad
totalCorrectas=teclado.nextInt()
intporcentaje=totalCorrectas*100/totalPreguntas
if(porcentaje>=90){
System.out.print("Nivelmximo")
}else{
if(porcentaje>=75){
System.out.print("Nivelmedio")
}else{
if(porcentaje>=50){
System.out.print("Nivelregular")
}else{
System.out.print("Fueradenivel")
}
}
}
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=81&inicio=0
6/7
2/25/2016
Condicionescompuestasconoperadoreslgicos
Condicionescompuestasconoperadores
lgicos
Hastaahorahemosvistolosoperadores:
relacionales(>,<,>=,<=,==,!=)
matemticos(+,,*,/,%)
peronosestnfaltandootrosoperadoresimprescindibles:
lgicos(&&,||).
Operador&&
Problema:
Confeccionarunprogramaqueleaportecladotresnmerosdistintosynosmuestre
http://www.javaya.com.ar/detalleconcepto.php?codigo=82&inicio=0
1/10
2/25/2016
Condicionescompuestasconoperadoreslgicos
elmayor.
Diagramadeflujo:
Esteejercicioestresueltosinemplearoperadoreslgicosenunconceptoanterior
deltutorial.LaprimeraestructuracondicionalesunaESTRUCTURACONDICIONAL
COMPUESTAconunaCONDICIONCOMPUESTA.
Podemosleerladelasiguienteforma:
Sielcontenidodelavariablenum1esmayoralcontenidodelavariablenum2Ysiel
contenidodelavariablenum1esmayoralcontenidodelavariablenum3entonces
laCONDICIONCOMPUESTAresultaVerdadera.
SiunadelascondicionessimplesdafalsolaCONDICIONCOMPUESTAdaFalsoy
http://www.javaya.com.ar/detalleconcepto.php?codigo=82&inicio=0
2/10
2/25/2016
Condicionescompuestasconoperadoreslgicos
continuaporlaramadelfalso.
Enestasegundaestructuracondicionalnoserequierenoperadoreslgicosalhaber
unacondicinsimple.
Programa:
importjava.util.Scanner
publicclassCondicionesCompuestas1{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intnum1,num2,num3
System.out.print("Ingreseprimervalor:")
num1=teclado.nextInt()
System.out.print("Ingresesegundovalor:")
num2=teclado.nextInt()
System.out.print("Ingresetercervalor:")
num3=teclado.nextInt()
if(num1>num2&&num1>num3){
System.out.print(num1)
}else{
if(num2>num3){
System.out.print(num2)
}else{
System.out.print(num3)
}
}
}
}
Operador||
http://www.javaya.com.ar/detalleconcepto.php?codigo=82&inicio=0
3/10
2/25/2016
Condicionescompuestasconoperadoreslgicos
Traducidoseloleecomo?O?.Silacondicin1esVerdaderaOlacondicin2es
Verdadera,luegoejecutarlaramadelVerdadero.
Cuando vinculamos dos o ms condiciones con el operador ?Or", con que una de
las dos condiciones sea Verdadera alcanza para que el resultado de la condicin
compuestaseaVerdadero.
Problema:
Secargaunafecha(da,mesyao)porteclado.Mostrarunmensajesicorresponde
al primer trimestre del ao (enero, febrero o marzo) Cargar por teclado el valor
numricodelda,mesyao.
Ejemplo:dia:10mes:1ao:2010.
Diagramadeflujo:
http://www.javaya.com.ar/detalleconcepto.php?codigo=82&inicio=0
4/10
2/25/2016
Condicionescompuestasconoperadoreslgicos
Lacargadeunafechasehaceporpartes,ingresamoslasvariablesdia,mesyao.
Mostramos el mensaje "Corresponde al primer trimestre" en caso que el mes
ingresadoportecladoseaiguala1,23.
Enlacondicinnoparticipanlasvariablesdiayao.
Programa:
importjava.util.Scanner
publicclassCondicionesCompuestas2{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intdia,mes,ao
System.out.print("Ingresenrodeda:")
dia=teclado.nextInt()
http://www.javaya.com.ar/detalleconcepto.php?codigo=82&inicio=0
5/10
2/25/2016
Condicionescompuestasconoperadoreslgicos
System.out.print("Ingresenrodemes:")
mes=teclado.nextInt()
System.out.print("Ingresenrodeao:")
ao=teclado.nextInt()
if(mes==1||mes==2||mes==3){
System.out.print("Correspondealprimertrimestre
}
}
}
Problemaspropuestos
1. Realizar un programa que pida cargar una fecha cualquiera, luego verificar si
dichafechacorrespondeaNavidad.
2. Se ingresan tres valores por teclado, si todos son iguales se imprime la suma
delprimeroconelsegundoyaesteresultadoselomultiplicaporeltercero.
3. Se ingresan por teclado tres nmeros, si todos los valores ingresados son
menoresa10,imprimirenpantallalaleyenda"Todoslosnmerossonmenores
adiez".
4. Se ingresan por teclado tres nmeros, si al menos uno de los valores
ingresados es menor a 10, imprimir en pantalla la leyenda "Alguno de los
nmerosesmenoradiez".
5. Escribirunprogramaquepidaingresarlacoordenadadeunpuntoenelplano,
esdecirdosvaloresenterosxey(distintosacero).
Posteriormenteimprimirenpantallaenquecuadranteseubicadichopunto.(1
Cuadrantesix>0Yy>0,2Cuadrante:x<0Yy>0,etc.)
6. De un operario se conoce su sueldo y los aos de antigedad. Se pide
confeccionarunprogramaquelealosdatosdeentradaeinforme:
a)Sielsueldoesinferiora500ysuantigedadesigualosuperiora10aos,
otorgarleunaumentodel20%,mostrarelsueldoapagar.
b)Si el sueldo es inferior a 500 pero su antigedad es menor a 10 aos,
otorgarleunaumentode5%.
c)Sielsueldoesmayoroiguala500mostrarelsueldoenpantallasincambios.
7. Escribir un programa en el cual: dada una lista de tres valores numricos
distintossecalculeeinformesurangodevariacin(debemostrarelmayoryel
menordeellos)
importjava.util.Scanner
http://www.javaya.com.ar/detalleconcepto.php?codigo=82&inicio=0
6/10
2/25/2016
Condicionescompuestasconoperadoreslgicos
publicclassCondicionesCompuestas3{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intdia,mes,ao
System.out.print("Ingresenrodeda:")
dia=teclado.nextInt()
System.out.print("Ingresenrodemes:")
mes=teclado.nextInt()
System.out.print("Ingresenrodeao:")
ao=teclado.nextInt()
if(mes==12&&dia==25){
System.out.print("Lafechaingresadacorrespondeanavidad.")
}
}
}
importjava.util.Scanner
publicclassCondicionesCompuestas4{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intnum1,num2,num3
System.out.print("Ingreseprimervalor:")
num1=teclado.nextInt()
System.out.print("Ingresesegundovalor:")
num2=teclado.nextInt()
System.out.print("Ingresetercervalor:")
num3=teclado.nextInt()
if(num1==num2&&num1==num3){
intsuma=num1+num2
System.out.print("Lasumadelprimeroysegundo:")
System.out.println(suma)
intproducto=suma*num3
System.out.print("Lasumadelprimeroysegundomultiplicadop
System.out.print(producto)
}
}
}
importjava.util.Scanner
publicclassCondicionesCompuestas5{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intnum1,num2,num3
System.out.print("Ingreseprimervalor:")
num1=teclado.nextInt()
System.out.print("Ingresesegundovalor:")
http://www.javaya.com.ar/detalleconcepto.php?codigo=82&inicio=0
7/10
2/25/2016
Condicionescompuestasconoperadoreslgicos
System.out.print("Ingresesegundovalor:")
num2=teclado.nextInt()
System.out.print("Ingresetercervalor:")
num3=teclado.nextInt()
if(num1<10&&num2<10&&num3<10){
System.out.print("Todoslosnmerossonmenoresadiez")
}
}
}
importjava.util.Scanner
publicclassCondicionesCompuestas6{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intnum1,num2,num3
System.out.print("Ingreseprimervalor:")
num1=teclado.nextInt()
System.out.print("Ingresesegundovalor:")
num2=teclado.nextInt()
System.out.print("Ingresetercervalor:")
num3=teclado.nextInt()
if(num1<10||num2<10||num3<10){
System.out.print("Algunodelosnmerosesmenoradiez")
}
}
}
importjava.util.Scanner
publicclassCondicionesCompuestas7{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intx,y
System.out.print("Ingresecoordenadax:")
x=teclado.nextInt()
System.out.print("Ingresecoordenaday:")
y=teclado.nextInt()
if(x>0&&y>0){
System.out.print("Seencuentraenelprimercuadrante")
}else{
if(x<0&&y>0){
System.out.print("Seencuentraenelsegundocuadrante")
}else{
if(x<0&&y<0){
System.out.print("Seencuentraeneltercercuadrante"
http://www.javaya.com.ar/detalleconcepto.php?codigo=82&inicio=0
8/10
2/25/2016
Condicionescompuestasconoperadoreslgicos
System.out.print("Seencuentraeneltercercuadrante"
}
else{
System.out.print("Seencuentraenelcuartocuadrante"
}
}
}
}
}
importjava.util.Scanner
publicclassCondicionesCompuestas8{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
floatsueldo
intantiguedad
System.out.print("Ingresesueldodelempleado:")
sueldo=teclado.nextFloat()
System.out.print("Ingresesuantiguedadenaos:")
antiguedad=teclado.nextInt()
if(sueldo<500&&antiguedad>10){
floataumento=sueldo*0.20f
floatsueldoTotal=sueldo+aumento
System.out.print("Sueldoapagar:")
System.out.print(sueldoTotal)
}else{
if(sueldo<500){
floataumento=sueldo*0.05f
floatsueldoTotal=sueldo+aumento
System.out.print("Sueldoapagar:")
System.out.print(sueldoTotal)
}else{
System.out.print("Sueldoapagar:")
System.out.print(sueldo)
}
}
}
}
importjava.util.Scanner
publicclassCondicionesCompuestas9{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intnum1,num2,num3
System.out.print("Ingreseprimervalor:")
num1=teclado.nextInt()
http://www.javaya.com.ar/detalleconcepto.php?codigo=82&inicio=0
9/10
2/25/2016
Condicionescompuestasconoperadoreslgicos
num1=teclado.nextInt()
System.out.print("Ingresesegundovalor:")
num2=teclado.nextInt()
System.out.print("Ingresetercervalor:")
num3=teclado.nextInt()
System.out.print("Rangodevalores:")
if(num1<num2&&num1<num3){
System.out.print(num1)
}else{
if(num2<num3){
System.out.print(num2)
}else{
System.out.print(num3)
}
}
System.out.print("")
if(num1>num2&&num1>num3){
System.out.print(num1)
}else{
if(num2>num3){
System.out.print(num2)
}else{
System.out.print(num3)
}
}
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=82&inicio=0
10/10
2/25/2016
Estructurarepetitivawhile
Estructurarepetitivawhile
Hasta ahora hemos empleado estructuras SECUENCIALES y CONDICIONALES.
Existe otro tipo de estructuras tan importantes como las anteriores que son las
estructurasREPETITIVAS.
Una estructura repetitiva permite ejecutar una instruccin o un conjunto de
instruccionesvariasveces.
Unaejecucinrepetitivadesentenciassecaracterizapor:
Laolassentenciasqueserepiten.
Eltestopruebadecondicinantesdecadarepeticin,quemotivarqueserepitan
onolassentencias.
Estructurarepetitivawhile.
Representacingrficadelaestructurawhile:
1/17
2/25/2016
Estructurarepetitivawhile
ElbloqueserepiteMIENTRASlacondicinseaVerdadera.
Importante:Silacondicinsiempreretornaverdaderoestamosenpresenciadeun
ciclorepetitivoinfinito.Dichasituacinesunerrordeprogramacin,nuncafinalizar
elprograma.
Problema1:
Realizarunprogramaqueimprimaenpantallalosnmerosdel1al100.
Sin conocer las estructuras repetitivas podemos resolver el problema empleando
una estructura secuencial. Inicializamos una variable con el valor 1, luego
imprimimoslavariable,incrementamosnuevamentelavariableyassucesivamente.
Diagramadeflujo:
2/17
2/25/2016
Estructurarepetitivawhile
Ahoraveamoslasolucinempleandounaestructurarepetitivawhile:
Esmuyimportanteanalizarestediagrama:
La primera operacin inicializa la variable x en 1, seguidamente comienza la
estructura repetitiva while y disponemos la siguiente condicin ( x <= 100), se lee
MIENTRASlavariablexseamenoroiguala100.
Al ejecutarse la condicin retorna VERDADERO porque el contenido de x (1) es
menor o igual a 100. Al ser la condicin verdadera se ejecuta el bloque de
instrucciones que contiene la estructura while. El bloque de instrucciones contiene
unasalidayunaoperacin.
Seimprimeelcontenidodex,yseguidamenteseincrementalavariablexenuno.
Laoperacinx=x+1seleecomo"enlavariablexseguardaelcontenidodexms
1".Esdecir,sixcontiene1luegodeejecutarseestaoperacinsealmacenarenx
un2.
Alfinalizarelbloquedeinstruccionesquecontienelaestructurarepetitivaseverifica
nuevamentelacondicindelaestructurarepetitivayserepiteelprocesoexplicado
anteriormente.
http://www.javaya.com.ar/detalleconcepto.php?codigo=83&inicio=0
3/17
2/25/2016
Estructurarepetitivawhile
.
100
101Cuandoxvale101lacondicindelaestructurarepetitivaretorna
enestecasofinalizaeldiagrama.
publicclassEstructuraRepetitivaWhile1{
publicstaticvoidmain(String[]ar){
intx
x=1
while(x<=100){
http://www.javaya.com.ar/detalleconcepto.php?codigo=83&inicio=0
4/17
2/25/2016
Estructurarepetitivawhile
System.out.print(x)
System.out.print("")
x=x+1
}
}
}
Importante:Como podemos observar no hemos creado un objeto de la clase
Scanner. Esto debido a que en este programa no hay que ingresar datos por
teclado. Para las salidas utilizamos la funcin print, que se encuentra creada por
defectoencualquierprogramaquecodifiquemosenJava.
Recordemos que un problema no estar 100% solucionado si no hacemos el
programaenJavaquemuestrelosresultadosbuscados.
Probemos algunas modificaciones de este programa y veamos que cambios se
deberanhacerpara:
1Imprimirlosnmerosdel1al500.
2Imprimirlosnmerosdel50al100.
3Imprimirlosnmerosdel50al0.
4Imprimirlosnmerosdel2al100perode2en2(2,4,6,8....100).
Respuestas:
1Debemoscambiarlacondicindelwhileconx<=500.
2Debemosinicializarxconelvalor50.
3Inicializarxconelvalor50yfijarlacondicinx<=0.
4Inicializaraxconelvalor2ydentrodelbloquerepetitivoincrementara
(x=x+2).
Problema2:
Escribirunprogramaquesolicitelacargadeunvalorpositivoynosmuestredesde1
hastaelvaloringresadodeunoenuno.
Ejemplo:Siingresamos30sedebemostrarenpantallalosnmerosdel1al30.
Es de FUNDAMENTAL importancia analizar los diagramas de flujo y la posterior
codificacinenJavadelossiguientesproblemas,envariosproblemassepresentan
otrassituacionesnovistasenelejercicioanterior.
http://www.javaya.com.ar/detalleconcepto.php?codigo=83&inicio=0
5/17
2/25/2016
Estructurarepetitivawhile
Diagramadeflujo:
"
3
"
"
4
"
"
5
"
"
6(Saledelwhileporque6noesmenoroiguala5)
http://www.javaya.com.ar/detalleconcepto.php?codigo=83&inicio=0
6/17
2/25/2016
Estructurarepetitivawhile
Programa:
importjava.util.Scanner
publicclassEstructuraRepetitivaWhile2{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intn,x
System.out.print("Ingreseelvalorfinal:")
n=teclado.nextInt()
x=1
while(x<=n){
System.out.print(x)
System.out.print("")
x=x+1
}
}
}
Losnombresdelasvariablesnyxpuedenserpalabrasoletras(comoenestecaso)
LavariablexrecibeelnombredeCONTADOR.Uncontadoresuntipoespecialde
variable que se incrementa o decrementa con valores constantes durante la
ejecucindelprograma.
El contador x nos indica en cada momento la cantidad de valores impresos en
pantalla.
Problema3:
Desarrollar un programa que permita la carga de 10 valores por teclado y nos
muestreposteriormentelasumadelosvaloresingresadosysupromedio.
Diagramadeflujo:
http://www.javaya.com.ar/detalleconcepto.php?codigo=83&inicio=0
7/17
2/25/2016
Estructurarepetitivawhile
Enesteproblema,asemejanzadelosanteriores,llevamosunCONTADORllamado
xquenossirveparacontarlasvueltasquedeberepetirelwhile.
Tambin aparece el concepto de ACUMULADOR (un acumulador es un tipo
especialdevariablequeseincrementaodecrementaconvaloresvariablesdurante
laejecucindelprograma)
http://www.javaya.com.ar/detalleconcepto.php?codigo=83&inicio=0
8/17
2/25/2016
Estructurarepetitivawhile
Hemosdadoelnombredesumaanuestroacumulador.Cadacicloqueserepitala
estructurarepetitiva,lavariablesumaseincrementaconelcontenidoingresadoen
lavariablevalor.
Lapruebadeldiagramaserealizadndolevaloresalasvariables:
valor
suma
x
promedio
0
0
(Antesdeentraralaestructurarepetitivaestossonlosvalores).
5
1
16
21
2
7
28
3
10
38
4
2
40
5
20
60
6
5
65
7
5
70
8
10
80
9
2
82
10
8
90
11
Esteesunseguimientodeldiagramaplanteado.Losnmerosquetomalavariable
valordependerdequcifrascargueeloperadordurantelaejecucindelprograma.
Elpromediosecalculaalsalirdelaestructurarepetitiva(esdecirprimerosumamos
los10valoresingresadosyluegolosdividimospor10)
Hayquetenerencuentaquecuandoenlavariablevalorsecargaelprimervalor(en
este ejemplo 5) al cargarse el segundo valor (16) el valor anterior 5 se pierde, por
ellolanecesidaddeiralmacenandoenlavariablesumalosvaloresingresados.
Programa:
importjava.util.Scanner
publicclassEstructuraRepetitivaWhile3{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intx,suma,valor,promedio
x=1
suma=0
while(x<=10){
System.out.print("Ingreseunvalor:")
http://www.javaya.com.ar/detalleconcepto.php?codigo=83&inicio=0
9/17
2/25/2016
Estructurarepetitivawhile
valor=teclado.nextInt()
suma=suma+valor
x=x+1
}
promedio=suma/10
System.out.print("Lasumadelos10valoreses:")
System.out.println(suma)
System.out.print("Elpromedioes:")
System.out.print(promedio)
}
}
Problema4:
Unaplantaquefabricaperfilesdehierroposeeunlotedenpiezas.
Confeccionar un programa que pida ingresar por teclado la cantidad de piezas a
procesar y luego ingrese la longitud de cada perfil sabiendo que la pieza cuya
longitud est comprendida en el rango de 1,20 y 1,30 son aptas. Imprimir por
pantallalacantidaddepiezasaptasquehayenellote.
Diagramadeflujo:
http://www.javaya.com.ar/detalleconcepto.php?codigo=83&inicio=0
10/17
2/25/2016
Estructurarepetitivawhile
Podemosobservarquedentrodeunaestructurarepetitivapuedehaberestructuras
condicionales(inclusivepuedehaberotrasestructurasrepetitivasqueveremosms
adelante)
Enesteproblemahayquecargarinicialmentelacantidaddepiezasaingresar(n),
seguidamentesecargannvaloresdelargosdepiezas.
Cada vez que ingresamos un largo de pieza (largo) verificamos si es una medida
correcta (debe estar entre 1.20 y 1.30 el largo para que sea correcta), en caso de
sercorrectalaCONTAMOS(incrementamoslavariablecantidaden1)
http://www.javaya.com.ar/detalleconcepto.php?codigo=83&inicio=0
11/17
2/25/2016
Estructurarepetitivawhile
Alcontadorcantidadloinicializamosenceroporqueinicialmentenosehacargado
ningnlargodemedida.
Cuandosalimosdelaestructurarepetitivaporquesehancargadonlargosdepiezas
mostramosporpantallaelcontadorcantidad(querepresentalacantidaddepiezas
aptas)
EnesteproblematenemosdosCONTADORES:
x
cantidad
(Cuentalacantidaddepiezascargadashastaelmomento)
(Cuentalosperfilesdehierroaptos)
Programa:
importjava.util.Scanner
publicclassEstructuraRepetitivaWhile4{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intx,cantidad,n
floatlargo
x=1
cantidad=0
System.out.print("Cuantaspiezarprocesar:")
n=teclado.nextInt()
while(x<=n){
System.out.print("Ingreselamedidadelapieza:"
largo=teclado.nextFloat()
if(largo>=1.20&&largo<=1.30){
cantidad=cantidad+1
}
x=x+1
}
System.out.print("Lacantidaddepiezasaptasson:")
System.out.print(cantidad)
}
}
Problemaspropuestos
Ha llegado la parte fundamental, que es el momento donde uno desarrolla
individualmenteunalgoritmoparalaresolucindeproblemas.
http://www.javaya.com.ar/detalleconcepto.php?codigo=83&inicio=0
12/17
2/25/2016
Estructurarepetitivawhile
if(valor%2==0)//Sielifdaverdaderoluegoespar.
importjava.util.Scanner
publicclassEstructuraRepetitivaWhile5{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intx,nota,conta1,conta2
http://www.javaya.com.ar/detalleconcepto.php?codigo=83&inicio=0
13/17
2/25/2016
Estructurarepetitivawhile
x=1
conta1=0
conta2=0
while(x<=10){
System.out.print("Ingresenota:")
nota=teclado.nextInt()
if(nota>=7){
conta1=conta1+1
}else{
conta2=conta2+1
}
x=x+1
}
System.out.print("Cantidaddealumnosconnotasmayoresoiguales
System.out.println(conta1)
System.out.print("Cantidaddealumonsconnotasmenoresa7:")
System.out.print(conta2)
}
}
importjava.util.Scanner
publicclassEstructuraRepetitivaWhile6{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intn,x
floataltura,suma,promedio
System.out.print("Cuantaspersonashay:")
n=teclado.nextInt()
x=1
suma=0
while(x<=n){
System.out.print("Ingreselaaltura:")
altura=teclado.nextFloat()
suma=suma+altura
x=x+1
}
promedio=suma/n
System.out.print("Alturapromedio:")
System.out.print(promedio)
}
}
importjava.util.Scanner
publicclassEstructuraRepetitivaWhile7{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
http://www.javaya.com.ar/detalleconcepto.php?codigo=83&inicio=0
14/17
2/25/2016
Estructurarepetitivawhile
Scannerteclado=newScanner(System.in)
intn,x,conta1,conta2
floatsueldo,gastos
System.out.print("Cuantosempleadostienelaempresa:")
n=teclado.nextInt()
x=1
conta1=0
conta2=0
gastos=0
while(x<=n){
System.out.print("Ingreseelsueldodelempleado:")
sueldo=teclado.nextFloat()
if(sueldo<=300){
conta1=conta1+1
}else{
conta2=conta2+1
}
gastos=gastos+sueldo
x=x+1
}
System.out.print("Cantidaddeempleadosconsueldosentre100y30
System.out.println(conta1)
System.out.print("Cantidaddeempleadosconsueldosmayora300:")
System.out.println(conta2)
System.out.print("Gastostotaldelaempresaensueldos:")
System.out.println(gastos)
}
}
publicclassEstructuraRepetitivaWhile8{
publicstaticvoidmain(String[]ar){
intx,termino
x=1
termino=11
while(x<=25){
System.out.print(termino)
System.out.print("")
x=x+1
termino=termino+11
}
}
}
publicclassEstructuraRepetitivaWhile9{
publicstaticvoidmain(String[]ar){
intmult8
mult8=8
while(mult8<=500){
http://www.javaya.com.ar/detalleconcepto.php?codigo=83&inicio=0
15/17
2/25/2016
Estructurarepetitivawhile
while(mult8<=500){
System.out.print(mult8)
System.out.print("")
mult8=mult8+8
}
}
}
importjava.util.Scanner
publicclassEstructuraRepetitivaWhile10{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intvalor,x,suma1,suma2
x=1
suma1=0
suma2=0
System.out.println("Primerlista")
while(x<=15){
System.out.print("Ingresevalor:")
valor=teclado.nextInt()
suma1=suma1+valor
x=x+1
}
System.out.println("Segundalista")
x=1
while(x<=15){
System.out.print("Ingresevalor:")
valor=teclado.nextInt()
suma2=suma2+valor
x=x+1
}
if(suma1>suma2){
System.out.print("Lista1mayor.")
}else{
if(suma2>suma1){
System.out.print("Lista2mayor.")
}else{
System.out.print("Listasiguales.")
}
}
}
}
importjava.util.Scanner
publicclassEstructuraRepetitivaWhile11{
publicstaticvoidmain(String[]ar){
http://www.javaya.com.ar/detalleconcepto.php?codigo=83&inicio=0
16/17
2/25/2016
Estructurarepetitivawhile
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intn,x,valor,pares,impares
x=1
pares=0
impares=0
System.out.print("Cuantosnmerosingresar:")
n=teclado.nextInt()
while(x<=n){
System.out.print("Ingreseelvalor:")
valor=teclado.nextInt()
if(valor%2==0){
pares=pares+1
}else{
impares=impares+1
}
x=x+1
}
System.out.print("Cantadaddepares:")
System.out.println(pares)
System.out.print("Cantidaddeimpares:")
System.out.print(impares)
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=83&inicio=0
17/17
2/25/2016
Estructurarepetitivafor
Estructurarepetitivafor
Cualquier problema que requiera una estructura repetitiva se puede resolver
empleando la estructura while. Pero hay otra estructura repetitiva cuyo planteo es
mssencilloenciertassituaciones.
En general, la estructura for se usa en aquellas situaciones en las cuales
CONOCEMOS la cantidad de veces que queremos que se ejecute el bloque de
instrucciones. Ejemplo: cargar 10 nmeros, ingresar 5 notas de alumnos, etc.
Conocemos de antemano la cantidad de veces que queremos que el bloque se
repita. Veremos, sin embargo, que en el lenguaje Java la estructura for puede
usarseencualquiersituacinrepetitiva,porqueenltimainstancianoesotracosa
queunaestructurawhilegeneralizada.
Representacingrfica:
En su forma ms tpica y bsica, esta estructura requiere una variable entera que
cumple la funcin de un CONTADOR de vueltas. En la seccin indicada como
"inicializacin contador", se suele colocar el nombre de la variable que har de
contador,asignndoleadichavariableunvalorinicial.Enlaseccinde"condicin"
secolocalacondicinquedeberserverdaderaparaqueelciclocontine(encaso
de un falso, el ciclo se detendr). Y finalmente, en la seccin de "incremento
contador"secolocaunainstruccinquepermitemodificarelvalordelavariableque
hacedecontador(parapermitirquealgunavezlacondicinseafalsa)
Cuandoelciclocomienza,antesdedarlaprimeravuelta,lavariabledelfortomael
valor indicado en la seccin de de "inicializacin contador". Inmediatamente se
verifica, en forma automtica, si la condicin es verdadera. En caso de serlo se
ejecuta el bloque de operaciones del ciclo, y al finalizar el mismo se ejecuta la
instruccinquesehayacolocadoenlatercerseccin.
http://www.javaya.com.ar/detalleconcepto.php?codigo=84&inicio=0
1/17
2/25/2016
Estructurarepetitivafor
Lavariabledelforpuedetenercualquiernombre.Enesteejemploselahadefinido
conelnombref.
Analicemoselejemplo:
Lavariableftomainicialmenteelvalor1.
Secontrolaautomticamenteelvalordelacondicin:comofvale1yestoes
que50,lacondicindaverdadero.
Comolacondicinfueverdadera,seejecutanla/soperacin/es.
Alfinalizardeejecutarlas,seretornaalainstruccinf++,porloquela
variablefseincrementaenuno.
Sevuelveacontrolar(automticamente)sifesmenoroiguala50.
Comoahorasuvalores2,seejecutanuevamenteelbloquedeinstruccionese
incrementanuevamentelavariabledelforalterminarelmismo.
Elprocesoserepetirhastaquelavariablefseaincrementadaalvalor51.
Enestemomentolacondicinserfalsa,yelciclosedetendr.
La variable f PUEDE ser modificada dentro del bloque de operaciones del for,
aunqueestopodracausarproblemasdelgicasielprogramadoresinexperto.
Lavariablefpuedeserinicializadaencualquiervaloryfinalizarencualquiervalor.
Adems,noesobligatorioquelainstruccindemodificacinseaunincrementodel
tipocontador(f++).
Cualquierinstruccinquemodifiqueelvalordelavariableesvlida.Siporejemplo
se escribe f=f+2 en lugar de f++, el valor de f ser incrementado de a 2 en cada
vuelta, y no de a 1. En este caso, esto significar que el ciclo no efectuar las 50
vueltassinoslo25.
http://www.javaya.com.ar/detalleconcepto.php?codigo=84&inicio=0
2/17
2/25/2016
Estructurarepetitivafor
Problema1:
Realizarunprogramaqueimprimaenpantallalosnmerosdel1al100.
Diagramadeflujo:
publicclassEstructuraRepetitivaFor1{
publicstaticvoidmain(String[]ar){
intf
for(f=1f<=100f++){
System.out.print(f)
System.out.print("")
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=84&inicio=0
3/17
2/25/2016
Estructurarepetitivafor
}
Problema2:
: Desarrollar un programa que permita la carga de 10 valores por teclado y nos
muestre posteriormente la suma de los valores ingresados y su promedio. Este
problemayalodesarrollamos,loresolveremosempleandolaestructurafor.
Diagramadeflujo:
Enestecaso,alavariabledelfor(f)sloselarequiereparaqueserepitaelbloque
deinstrucciones10veces.
http://www.javaya.com.ar/detalleconcepto.php?codigo=84&inicio=0
4/17
2/25/2016
Estructurarepetitivafor
Programa:
importjava.util.Scanner
publicclassEstructuraRepetitivaFor2{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intsuma,f,valor,promedio
suma=0
for(f=1f<=10f++){
System.out.print("Ingresevalor:")
valor=teclado.nextInt()
suma=suma+valor
}
System.out.print("Lasumaes:")
System.out.println(suma)
promedio=suma/10
System.out.print("Elpromedioes:")
System.out.print(promedio)
}
}
Elproblemarequierequesecarguen10valoresysesumenlosmismos.
Tener en cuenta encerrar entre llaves bloque de instrucciones a repetir dentro del
for.
Elpromediosecalculafueradelforluegodehabercargadolos10valores.
Problema3:
Escribir un programa que lea 10 notas de alumnos y nos informe cuntos tienen
notasmayoresoigualesa7ycuntosmenores.
Pararesolveresteproblemaserequierentrescontadores:
aprobados(Cuentalacantidaddealumnosaprobados)
reprobados(Cuentalacantidaddereprobados)
f(eselcontadordelfor)
Dentrodelaestructurarepetitivadebemoshacerlacargadelavariablenotayverificar
conunaestructuracondicionalsielcontenidodelavariablenotaesmayoroiguala7
para incrementar el contador aprobados, en caso de que la condicin retorne falso
debemosincrementarlavariablereprobados.
http://www.javaya.com.ar/detalleconcepto.php?codigo=84&inicio=0
5/17
2/25/2016
Estructurarepetitivafor
Diagramadeflujo:
LoscontadoresaprobadosyreprobadosdebenimprimirseFUERAdelaestructura
repetitiva.
Esfundamentalinicializarloscontadoresaprobadosyreprobadosenceroantesde
entraralaestructurafor.
Importante: Un error comn es inicializar los contadores dentro de la estructura
repetitiva. En caso de hacer esto los contadores se fijan en cero en cada ciclo del
for,porloquealfinalizarelforcomomximoelcontadorpuedetenerelvalor1.
Programa:
http://www.javaya.com.ar/detalleconcepto.php?codigo=84&inicio=0
6/17
2/25/2016
Estructurarepetitivafor
importjava.util.Scanner
publicclassEstructuraRepetitivaFor3{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intaprobados,reprobados,f,nota
aprobados=0
reprobados=0
for(f=1f<=10f++){
System.out.print("Ingreselanota:")
nota=teclado.nextInt()
if(nota>=7){
aprobados=aprobados+1
}else{
reprobados=reprobados+1
}
}
System.out.print("Cantidaddeaprobados:")
System.out.println(aprobados)
System.out.print("Cantidaddereprobados:")
System.out.print(reprobados)
}
}
Problema4:
Escribirunprogramaquelea10nmerosenterosyluegomuestrecuntosvalores
ingresadosfueronmltiplosde3ycuntosde5.Debemostenerencuentaquehay
nmerosquesonmltiplosde3yde5alavez.
Diagramadeflujo:
http://www.javaya.com.ar/detalleconcepto.php?codigo=84&inicio=0
7/17
2/25/2016
Estructurarepetitivafor
8/17
2/25/2016
Estructurarepetitivafor
ingresamosportecladoescero,setratadeunmltiplodedichovalor.
Ahora bien por qu no hemos dispuesto una estructura if anidada? Porque hay
valores que son mltiplos de 3 y de 5 a la vez. Por lo tanto con if anidados no
podramosanalizarlosdoscasos.
Esimportantedarsecuentacuandoconvieneemplearifanidadosycuandonodebe
emplearse.
Programa:
importjava.util.Scanner
publicclassEstructuraRepetitivaFor4{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intmul3,mul5,valor,f
mul3=0
mul5=0
for(f=1f<=10f++){
System.out.print("Ingreseunvalor:")
valor=teclado.nextInt()
if(valor%3==0){
mul3=mul3+1
}
if(valor%5==0){
mul5=mul5+1
}
}
System.out.print("Cantidaddevaloresingresadosmlt
System.out.println(mul3)
System.out.print("Cantidaddevaloresingresadosmlt
System.out.print(mul5)
}
}
Problema5:
Escribir un programa que lea n nmeros enteros y calcule la cantidad de valores
mayoresoigualesa1000.
Estetipodeproblemastambinsepuederesolverempleandolaestructurarepetitiva
for. Lo primero que se hace es cargar una variable que indique la cantidad de
http://www.javaya.com.ar/detalleconcepto.php?codigo=84&inicio=0
9/17
2/25/2016
Estructurarepetitivafor
valoresaingresar.Dichavariablesecargaantesdeentraralaestructurarepetitiva
for.
Laestructuraforpermitequeelvalorinicialofinaldependadeunavariablecargada
previamenteporteclado.
Diagramadeflujo:
Tenemosuncontadorllamadocantidadyfqueeselcontadordelfor.
Lavariableenteransecargaprevioaliniciodelfor,porloquepodemosfijarelvalor
finaldelforconlavariablen.
Por ejemplo si el operador carga 5 en n la estructura repetitiva for se ejecutar 5
http://www.javaya.com.ar/detalleconcepto.php?codigo=84&inicio=0
10/17
2/25/2016
Estructurarepetitivafor
veces.
Lavariablevalorseingresadentrodelaestructurarepetitiva,yseverificasielvalor
de la misma es mayor o igual a 1000, en dicho caso se incrementa en uno el
contadorcantidad.
importjava.util.Scanner
publicclassEstructuraRepetitivaFor5{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intcantidad,n,f,valor
cantidad=0
System.out.print("Cuantosvaloresingresar:")
n=teclado.nextInt()
for(f=1f<=nf++){
System.out.print("Ingreseelvalor:")
valor=teclado.nextInt()
if(valor>=1000){
cantidad=cantidad+1
}
}
System.out.print("Lacantidaddevaloresingresadosm
System.out.print(cantidad)
}
}
Problemaspropuestos
Ha llegado nuevamente la parte fundamental, que es el momento donde uno
desarrollaindividualmenteunalgoritmoparalaresolucindeunproblema.
1. Confeccionar un programa que lea n pares de datos, cada par de datos
corresponde a la medida de la base y la altura de un tringulo. El programa
deberinformar:
a)Decadatringulolamedidadesubase,sualturaysusuperficie.
b)Lacantidaddetringuloscuyasuperficieesmayora12.
2. Desarrollarunprogramaquesolicitelacargade10nmeroseimprimalasuma
http://www.javaya.com.ar/detalleconcepto.php?codigo=84&inicio=0
11/17
2/25/2016
Estructurarepetitivafor
delosltimos5valoresingresados.
3. Desarrollarunprogramaquemuestrelatablademultiplicardel5(del5al50)
4. Confeccionar un programa que permita ingresar un valor del 1 al 10 y nos
muestrelatablademultiplicardelmismo(losprimeros12trminos)
Ejemplo: Si ingreso 3 deber aparecer en pantalla los valores 3, 6, 9, hasta el
36.
5. Realizarunprogramaquelealosladosdentringulos,einformar:
a)Decadaunodeellos,qutipodetringuloes:equiltero(tresladosiguales),
issceles(dosladosiguales),oescaleno(ningnladoigual)
b)Cantidaddetringulosdecadatipo.
c)Tipodetringuloqueposeemenorcantidad.
6. Escribir un programa que pida ingresar coordenadas (x,y) que representan
puntosenelplano.
Informarcuntospuntossehaningresadoenelprimer,segundo,tercerycuarto
cuadrante. Al comenzar el programa se pide que se ingrese la cantidad de
puntosaprocesar.
7. Serealizalacargade10valoresenterosporteclado.Sedeseaconocer:
a)Lacantidaddevaloresingresadosnegativos.
b)Lacantidaddevaloresingresadospositivos.
c)Lacantidaddemltiplosde15.
d)Elvaloracumuladodelosnmerosingresadosquesonpares.
8. Secuentaconlasiguienteinformacin:
Lasedadesde50estudiantesdelturnomaana.
Lasedadesde60estudiantesdelturnotarde.
Lasedadesde110estudiantesdelturnonoche.
Lasedadesdecadaestudiantedebeningresarseporteclado.
a)Obtenerelpromediodelasedadesdecadaturno(trespromedios)
b)Imprimirdichospromedios(promediodecadaturno)
c)Mostrarporpantallaunmensajequeindiquecualdelostresturnostieneun
promediodeedadesmayor.
importjava.util.Scanner
publicclassEstructuraRepetitivaFor6{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intbase,altura,superficie,cantidad,f,n
cantidad=0
System.out.print("Cuantostringulosprocesar:")
n=teclado.nextInt()
for(f=1f<=nf++){
System.out.print("Ingreseelvalordelabase:")
base=teclado.nextInt()
http://www.javaya.com.ar/detalleconcepto.php?codigo=84&inicio=0
12/17
2/25/2016
Estructurarepetitivafor
System.out.print("Ingreseelvalordelaaltura:")
altura=teclado.nextInt()
superficie=base*altura/2
System.out.print("Lasuperficiees:")
System.out.println(superficie)
if(superficie>12){
cantidad=cantidad+1
}
}
System.out.print("Lacantidaddetringulosconsuperficiesuperio
System.out.print(cantidad)
}
}
importjava.util.Scanner
publicclassEstructuraRepetitivaFor7{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intf,valor,suma
suma=0
for(f=1f<=10f++){
System.out.print("Ingreseunvalor:")
valor=teclado.nextInt()
if(f>5){
suma=suma+valor
}
}
System.out.print("Lasumadelosltimos5valoreses:")
System.out.print(suma)
}
}
publicclassEstructuraRepetitivaFor8{
publicstaticvoidmain(String[]ar){
intf
for(f=5f<=50f=f+5){
System.out.print(f)
System.out.print("")
}
}
}
importjava.util.Scanner
http://www.javaya.com.ar/detalleconcepto.php?codigo=84&inicio=0
13/17
2/25/2016
Estructurarepetitivafor
publicclassEstructuraRepetitivaFor8{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intf,valor
System.out.print("Ingreseunvalorentre1y10:")
valor=teclado.nextInt()
for(f=valorf<=valor*12f=f+valor){
System.out.print(f)
System.out.print("")
}
}
}
importjava.util.Scanner
publicclassEstructuraRepetitivaFor9{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intf,lado1,lado2,lado3,cant1,cant2,cant3,n
cant1=0
cant2=0
cant3=0
System.out.print("Ingreselacantidaddetringulos:")
n=teclado.nextInt()
for(f=1f<=nf++){
System.out.print("Ingreselado1:")
lado1=teclado.nextInt()
System.out.print("Ingreselado2:")
lado2=teclado.nextInt()
System.out.print("Ingreselado3:")
lado3=teclado.nextInt()
if(lado1==lado2&&lado1==lado3){
System.out.println("Esuntringuloequilatero.")
cant1++
}else{
if(lado1==lado2||lado1==lado3||lado2==lado3){
System.out.println("Esuntringuloissceles.")
cant2++
}else{
cant3++
System.out.println("Esuntringuloescaleno.")
}
}
}
System.out.print("Cantidaddetringulosequilateros:")
System.out.println(cant1)
System.out.print("Cantidaddetringulosissceles:")
System.out.println(cant2)
System.out.print("Cantidaddetringulosescalenos:")
System.out.println(cant3)
http://www.javaya.com.ar/detalleconcepto.php?codigo=84&inicio=0
14/17
2/25/2016
Estructurarepetitivafor
if(cant1<cant2&&cant1<cant3){
System.out.print("Haymenorcantidaddetringulosequilateros
}else{
if(cant2<cant3){
System.out.print("Hanmenorcantidaddetringulosisscel
}else{
System.out.print("Hanmenorcantidaddetringulosescalen
}
}
}
}
importjava.util.Scanner
publicclassEstructuraRepetitivaFor10{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intn,f,x,y,cant1,cant2,cant3,cant4
cant1=0
cant2=0
cant3=0
cant4=0
System.out.print("Cantidaddepuntos:")
n=teclado.nextInt()
for(f=1f<=nf++){
System.out.print("Ingresecoordenadax:")
x=teclado.nextInt()
System.out.print("Ingresecoordenaday:")
y=teclado.nextInt()
if(x>0&&y>0){
cant1++
}else{
if(x<0&&y>0){
cant2++
}else{
if(x<0&&y<0){
cant3++
}else{
if(x>0&&y<0){
cant4++
}
}
}
}
}
System.out.print("Cantidaddepuntosenelprimercuadrante:")
System.out.println(cant1)
System.out.print("Cantidaddepuntosenelsegundocuadrante:")
System.out.println(cant2)
System.out.print("Cantidaddepuntoseneltercercuadrante:")
http://www.javaya.com.ar/detalleconcepto.php?codigo=84&inicio=0
15/17
2/25/2016
Estructurarepetitivafor
System.out.println(cant3)
System.out.print("Cantidaddepuntosenelcuartocuadrante:")
System.out.println(cant4)
}
}
importjava.util.Scanner
publicclassEstructuraRepetitivaFor11{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intf,valor,negativos,positivos,mult15,sumapares
negativos=0
positivos=0
mult15=0
sumapares=0
for(f=1f<=10f++){
System.out.print("Ingresevalor:")
valor=teclado.nextInt()
if(valor<0){
negativos++
}else{
if(valor>0){
positivos++
}
}
if(valor%15==0){
mult15++
}
if(valor%2==0){
sumapares=sumapares+valor
}
}
System.out.print("Cantidaddevaloresnegativos:")
System.out.println(negativos)
System.out.print("Cantidaddevalorespositivos:")
System.out.println(positivos)
System.out.print("Cantidaddevaloresmltiplosde15:")
System.out.println(mult15)
System.out.print("Sumadelosvalorespares:")
System.out.println(sumapares)
}
}
importjava.util.Scanner
publicclassEstructuraRepetitivaFor12{
http://www.javaya.com.ar/detalleconcepto.php?codigo=84&inicio=0
16/17
2/25/2016
Estructurarepetitivafor
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intf,edad,suma1,suma2,suma3,pro1,pro2,pro3
suma1=0
suma2=0
suma3=0
for(f=1f<=50f++){
System.out.print("Ingreseedad:")
edad=teclado.nextInt()
suma1=suma1+edad
}
pro1=suma1/50
System.out.print("Promediodeedadesdelturnomaana:")
System.out.println(pro1)
for(f=1f<=60f++){
System.out.print("Ingreseedad:")
edad=teclado.nextInt()
suma2=suma2+edad
}
pro2=suma2/60
System.out.print("Promediodeedadesdelturnotarde:")
System.out.println(pro2)
for(f=1f<=110f++){
System.out.print("Ingreseedad:")
edad=teclado.nextInt()
suma3=suma3+edad
}
pro3=suma3/110
System.out.print("Promediodeedadesdelturnonoche:")
System.out.println(pro3)
if(pro1<pro2&&pro1<pro3){
System.out.print("Elturnomaanatieneunpromediomenordee
}else{
if(pro2<pro3){
System.out.print("Elturnotardetieneunpromediomenord
}else{
System.out.print("Elturnonochetieneunpromediomenord
}
}
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=84&inicio=0
17/17
2/25/2016
Estructurarepetitivadowhile
Estructurarepetitivadowhile
Laestructuradowhileesotraestructurarepetitiva,lacualejecutaalmenosunavez
subloquerepetitivo,adiferenciadelwhileodelforquepodannoejecutarelbloque.
Esta estructura repetitiva se utiliza cuando conocemos de antemano que por lo
menosunavezseejecutarelbloquerepetitivo.
Lacondicindelaestructuraestabajodelbloquearepetir,adiferenciadelwhileo
delforqueestenlapartesuperior.
Representacingrfica:
ElbloquedeoperacionesserepiteMIENTRASquelacondicinseaVerdadera.
SilacondicinretornaFalsoelciclosedetiene.EnJava,todoslosciclosrepitenpor
verdaderoycortanporfalso.
Esimportanteanalizaryverquelasoperacionesseejecutancomomnimounavez.
Problema1:
Escribir un programa que solicite la carga de un nmero entre 0 y 999, y nos
muestreunmensajedecuntosdgitostieneelmismo.Finalizarelprogramacuando
secargueelvalor0.
Diagramadeflujo:
http://www.javaya.com.ar/detalleconcepto.php?codigo=85&inicio=0
1/10
2/25/2016
Estructurarepetitivadowhile
No hay que confundir los rombos de las estructuras condicionales con los de las
estructurasrepetitivasdowhile.
Enesteproblemaporlomenossecargaunvalor.Sisecargaunvalormayoroigual
a100setratadeunnmerodetrescifras,siesmayoroiguala10setratadeun
valordedosdgitos,encasocontrariosetratadeunvalordeundgito.Estebloque
se repite hasta que se ingresa en la variable valor el nmero 0 con lo que la
condicin de la estructura do while retorna falso y sale del bloque repetitivo
finalizandoelprograma.
Programa:
importjava.util.Scanner
http://www.javaya.com.ar/detalleconcepto.php?codigo=85&inicio=0
2/10
2/25/2016
Estructurarepetitivadowhile
publicclassEstructuraRepetitivaDoWhile1{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intvalor
do{
System.out.print("Ingreseunvalorentre0y999
valor=teclado.nextInt()
if(valor>=100){
System.out.println("Tiene3dgitos.")
}else{
if(valor>=10){
System.out.println("Tiene2dgitos.")
}else{
System.out.println("Tiene1dgito.")
}
}
}while(valor!=0)
}
}
Problema2:
Escribir un programa que solicite la carga de nmeros por teclado, obtener su
promedio.Finalizarlacargadevalorescuandosecargueelvalor0.
Cuandolafinalizacindependedealgnvaloringresadoporeloperadorconvieneel
empleodelaestructuradowhile,porlomenossecargarunvalor(enelcasoms
extremosecarga0,queindicalafinalizacindelacargadevalores)
Diagramadeflujo:
http://www.javaya.com.ar/detalleconcepto.php?codigo=85&inicio=0
3/10
2/25/2016
Estructurarepetitivadowhile
Esimportanteanalizarestediagramadeflujo.
Definimos un contador cant que cuenta la cantidad de valores ingresados por el
operador(noloincrementasiingresamos0)
http://www.javaya.com.ar/detalleconcepto.php?codigo=85&inicio=0
4/10
2/25/2016
Estructurarepetitivadowhile
Elvalor0noespartedelaseriedevaloresquesedebensumar.
Definimos el acumulador suma que almacena todos los valores ingresados por
teclado.
Disponemos por ltimo una estructura condicional para el caso que el operador
carguenicamenteun0yporlotantonopodemoscalcularelpromedioyaqueno
existeladivisinpor0.
importjava.util.Scanner
publicclassEstructuraRepetitivaDoWhile2{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intsuma,cant,valor,promedio
suma=0
cant=0
do{
System.out.print("Ingreseunvalor(0parafinali
valor=teclado.nextInt()
if(valor!=0){
suma=suma+valor
cant++
}
}while(valor!=0)
if(cant!=0){
promedio=suma/cant
System.out.print("Elpromediodelosvaloresingr
System.out.print(promedio)
}else{
System.out.print("Noseingresaronvalores.")
}
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=85&inicio=0
5/10
2/25/2016
Estructurarepetitivadowhile
El contador cant DEBE inicializarse antes del ciclo, lo mismo que el acumulador
suma.Elpromediosecalculasiempreycuandoelcontadorcantseadistintoa0.
Problema3:
Realizar un programa que permita ingresar el peso (en kilogramos) de piezas. El
procesoterminacuandoingresamoselvalor0.Sedebeinformar:
a) Cuntas piezas tienen un peso entre 9.8 Kg. y 10.2 Kg.?, cuntas con ms de
10.2Kg.?ycuntasconmenosde9.8Kg.?
b)Lacantidadtotaldepiezasprocesadas.
Diagramadeflujo:
http://www.javaya.com.ar/detalleconcepto.php?codigo=85&inicio=0
6/10
2/25/2016
Estructurarepetitivadowhile
7/10
2/25/2016
Estructurarepetitivadowhile
Programa:
importjava.util.Scanner
publicclassEstructuraRepetitivaDoWhile3{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intcant1,cant2,cant3,suma
floatpeso
cant1=0
cant2=0
cant3=0
do{
System.out.print("Ingreseelpesodelapieza(0
peso=teclado.nextFloat()
if(peso>10.2){
cant1++
}else{
if(peso>=9.8){
cant2++
}else{
if(peso>0){
cant3++
}
}
}
}while(peso!=0)
suma=cant1+cant2+cant3
System.out.print("Piezasaptas:")
System.out.println(cant2)
System.out.print("Piezasconunpesosuperiora10.2:
System.out.println(cant1)
System.out.print("Piezasconunpesoinferiora9.8:"
System.out.println(cant3)
}
}
Problemaspropuestos
1. Realizarunprogramaqueacumule(sume)valoresingresadosportecladohasta
ingresar el 9999 (no sumar dicho valor, indica que ha finalizado la carga).
Imprimir el valor acumulado e informar si dicho valor es cero, mayor a cero o
http://www.javaya.com.ar/detalleconcepto.php?codigo=85&inicio=0
8/10
2/25/2016
Estructurarepetitivadowhile
menoracero.
2. En un banco se procesan datos de las cuentas corrientes de sus clientes. De
cada cuenta corriente se conoce: nmero de cuenta y saldo actual. El ingreso
dedatosdebefinalizaralingresarunvalornegativoenelnmerodecuenta.
Sepideconfeccionarunprogramaquelealosdatosdelascuentascorrientese
informe:
a)De cada cuenta: nmero de cuenta y estado de la cuenta segn su saldo,
sabiendoque:
Estadodelacuenta
'Acreedor'sielsaldoes>0.
'Deudor'sielsaldoes<0.
'Nulo'sielsaldoes=0.
b)Lasumatotaldelossaldosacreedores.
importjava.util.Scanner
publicclassEstructuraRepetitivaDoWhile4{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intsuma,valor
suma=0
do{
System.out.print("Ingreseunvalor:")
valor=teclado.nextInt()
if(valor!=9999){
suma=suma+valor
}
}while(valor!=9999)
System.out.print("Elvaloracumuladoes")
System.out.println(suma)
if(suma==0){
System.out.println("Elvaloracumuladoescero.")
}else{
if(suma>0){
System.out.println("Elvaloracumuladoespositivo.")
}else{
System.out.println("Elvaloracumuladoesnegativo")
}
}
}
}
importjava.util.Scanner
publicclassEstructuraRepetitivaDoWhile5{
http://www.javaya.com.ar/detalleconcepto.php?codigo=85&inicio=0
9/10
2/25/2016
Estructurarepetitivadowhile
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
intcuenta
floatsaldo,suma
suma=0
do{
System.out.print("Ingresenmerodecuenta:")
cuenta=teclado.nextInt()
if(cuenta>=0){
System.out.print("Ingresesaldo:")
saldo=teclado.nextFloat()
if(saldo>0){
System.out.println("SaldoAcreedor.")
suma=suma+saldo
}else{
if(saldo<0){
System.out.println("SaldoDeudor.")
}else{
System.out.println("SaldoNulo.")
}
}
}
}while(cuenta>=0)
System.out.print("TotaldesaldosAcreedores:")
System.out.print(suma)
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=85&inicio=0
10/10
2/25/2016
CadenasdecaracteresenJava
CadenasdecaracteresenJava
En Java hemos visto que cuando queremos almacenar un valor entero definimos
una variable de tipo int, si queremos almacenar un valor con decimales definimos
unavariabledetipofloat.Ahorasiqueremosalmacenarunacadenadecaracteres
(por ejemplo un nombre de una persona) debemos definir un objeto de la clase
String.
Ms adelante veremos en profundidad y detenimiento los conceptos de CLASE y
OBJETO, por ahora solo nos interesa la mecnica para trabajar con cadenas de
caracteres.
Problema1:
Solicitar el ingreso del nombre y edad de dos personas. Mostrar el nombre de la
personaconmayoredad.
Programa:
importjava.util.Scanner
publicclassCadenaDeCaracteres1{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
Stringnombre1,nombre2
intedad1,edad2
System.out.print("Ingreseelnombre:")
nombre1=teclado.next()
System.out.print("Ingreseedad:")
edad1=teclado.nextInt()
System.out.print("Ingreseelnombre:")
nombre2=teclado.next()
System.out.print("Ingreseedad:")
edad2=teclado.nextInt()
System.out.print("Lapersonademayoredades:")
if(edad1>edad2){
System.out.print(nombre1)
}else{
System.out.print(nombre2)
http://www.javaya.com.ar/detalleconcepto.php?codigo=86&inicio=0
1/5
2/25/2016
CadenasdecaracteresenJava
}
}
}
ParaalmacenarunnombredebemosdefinirunavariabledetipoStringysuingreso
portecladosehacellamandoalmtodonext()delobjetoteclado:
nombre1=teclado.next();
Laprimerasalvedadquetenemosquehacercuandoutilizamoselmtodonext()es
que solo nos permite ingresar una cadena de caracteres con la excepcin del
espacio en blanco (es decir debemos ingresar un nombre de persona y no su
nombreyapellidoseparadoporunespacioenblanco)
VeamosqueexisteotromtodollamadonextLine()quenospermitecargarespacios
en blanco pero para su uso se complica cuando cargamos otras valores de tipo
distintoaString(porejemploint,floatetc.)
Problema2:
Solicitarelingresodelapellido,nombreyedaddedospersonas.Mostrarelnombre
de la persona con mayor edad. Realizar la carga del apellido y nombre en una
variabledetipoString.
Programa:
importjava.util.Scanner
publicclassCadenaDeCaracteres2{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
Stringapenom1,apenom2
intedad1,edad2
System.out.print("Ingreseelapellidoyelnombre:")
apenom1=teclado.nextLine()
System.out.print("Ingreseedad:")
edad1=teclado.nextInt()
System.out.print("Ingreseelapellidoyelnombre:")
teclado.nextLine()
apenom2=teclado.nextLine()
http://www.javaya.com.ar/detalleconcepto.php?codigo=86&inicio=0
2/5
2/25/2016
CadenasdecaracteresenJava
System.out.print("Ingreseedad:")
edad2=teclado.nextInt()
System.out.print("Lapersonademayoredades:")
if(edad1>edad2){
System.out.print(apenom1)
}else{
System.out.print(apenom2)
}
}
}
Cuandoseingresaunacadenaconcaracteresenblancodebemostenerencuenta
enllamaralmtodonextLine()
Una dificultad se presenta si llamamos al mtodo nextLine() y previamente hemos
llamadoalmtodonextInt(),estodebidoaqueluegodeejecutarelmtodonextInt()
quedaalmacenadoenelobjetodelaclaseScannerelcaracter"Enter"ysillamamos
inmediatamentealmtodonextLine()estealmacenadichovalordeteclaycontina
con el flujo del programa. Para solucionar este problema debemos generar un
cdigosimilara:
System.out.print("Ingreseedad:");
edad1=teclado.nextInt();
System.out.print("Ingreseelapellidoyelnombre:");
teclado.nextLine();
apenom2=teclado.nextLine();
ComovemosllamamosalmtodonextLine()dosveces,laprimeraretornalatecla
"Enter" y la segunda se queda esperando que ingresemos el apellido y nombre
(tener en cuenta que esto es necesario solo si previamente se llam al mtodo
nextInt()onextFloat().
Problema3:
Solicitarelingresodedosapellidos.Mostrarunmensajesisonigualesodistintos.
Programa:
importjava.util.Scanner
publicclassCadenaDeCaracteres3{
http://www.javaya.com.ar/detalleconcepto.php?codigo=86&inicio=0
3/5
2/25/2016
CadenasdecaracteresenJava
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
Stringapellido1,apellido2
System.out.print("Ingreseprimerapellido:")
apellido1=teclado.next()
System.out.print("Ingresesegundoapellido:")
apellido2=teclado.next()
if(apellido1.equals(apellido2)){
System.out.print("Losapellidossoniguales")
}else{
System.out.print("Losapellidossondistintos")
}
}
}
Para comparar si el contenido de dos String son iguales no podemos utilizar el
operador==.DebemosutilizarunmtododelaclaseStringllamadoequalsypasar
comoparmetroelStringconelquequeremoscompararlo:
if(apellido1.equals(apellido2)){
El mtodo equals retorna verdadero si los contenidos de los dos String son
exactamenteiguales,estohacequeseejecuteelbloquedelverdadero.
Recordemosquehemosutilizadoelmtodonext()paralacargadelosString,luego
estohacequenopodamosingresarunapellidoconespaciosenblanco(podemos
probarquesiingresamosporejemplo"RodriguezRodriguez"enelprimerapellido,
luego se carga la cadena "Rodriguez" en la variable apellido1 y "Rodriguez" en la
variable apellido2 (con esto hacemos notar que cada vez que ingresamos un
espacioenblancocuandoutilizamoselmtodonext()loscaracteresquesiguenal
espacioenblancosonrecuperadosenlasiguientellamadaalmtodonext())
El mtodo equals retorna verdadero si los contenidos de los dos String son
exactamente iguales, es decir si cargamos "Martinez" en apellido1 y "martinez" en
apellido2 luego el mtodo equals retorna falso ya que no es lo mismo la "M"
maysculayla"m"minscula.
En el caso que necesitemos considerar igual caracteres maysculas y minsculas
podemosutilizarelmtodoequalsIgnoreCase:
if(apellido1.equalsIgnoreCase(apellido2)){
http://www.javaya.com.ar/detalleconcepto.php?codigo=86&inicio=0
4/5
2/25/2016
CadenasdecaracteresenJava
System.out.print("Losapellidossonigualessintenerencuentamay
}else{
System.out.print("Losapellidossondistintossintenerencuentama
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=86&inicio=0
5/5
2/25/2016
Declaracindeunaclaseydefinicindeobjetos.
Declaracindeunaclaseydefinicinde
objetos.
La programacin orientada a objetos se basa en la programacin de clases a
diferenciadelaprogramacinestructurada,queestcentradaenlasfunciones.
Una clase es un molde del que luego se pueden crear mltiples objetos, con
similarescaractersticas.
Una clase es una plantilla (molde), que define atributos (variables) y mtodos
(funciones)
La clase define los atributos y mtodos comunes a los objetos de ese tipo, pero
luego,cadaobjetotendrsuspropiosvaloresycompartirnlasmismasfunciones.
Debemoscrearunaclaseantesdepodercrearobjetos(instancias)deesaclase.Al
crear un objeto de una clase, se dice que se crea una instancia de la clase o un
objetopropiamentedicho.
Laestructuradeunaclasees:
class[nombredelaclase]{
[atributosovariablesdelaclase]
[mtodosofuncionesdelaclase]
[main]
}
Problema1:
Confeccionar una clase que permita carga el nombre y la edad de una persona.
Mostrarlosdatoscargados.Imprimirunmensajesiesmayordeedad(edad>=18)
Programa:
importjava.util.Scanner
publicclassPersona{
privateScannerteclado
privateStringnombre
privateintedad
http://www.javaya.com.ar/detalleconcepto.php?codigo=87&inicio=0
1/12
2/25/2016
Declaracindeunaclaseydefinicindeobjetos.
publicvoidinicializar(){
teclado=newScanner(System.in)
System.out.print("Ingresenombre:")
nombre=teclado.next()
System.out.print("Ingreseedad:")
edad=teclado.nextInt()
}
publicvoidimprimir(){
System.out.println("Nombre:"+nombre)
System.out.println("Edad:"+edad)
}
publicvoidesMayorEdad(){
if(edad>=18){
System.out.print(nombre+"esmayordeedad.")
}else{
System.out.print(nombre+"noesmayordeedad.")
}
}
publicstaticvoidmain(String[]ar){
Personapersona1
persona1=newPersona()
persona1.inicializar()
persona1.imprimir()
persona1.esMayorEdad()
}
}
El nombre de la clase debe hacer referencia al concepto (en este caso la hemos
llamadoPersona):
publicclassPersona{
Losatributoslosdefinimosdentrodelaclaseperofueradelamain:
privateScannerteclado;
privateStringnombre;
privateintedad;
http://www.javaya.com.ar/detalleconcepto.php?codigo=87&inicio=0
2/12
2/25/2016
Declaracindeunaclaseydefinicindeobjetos.
Enelmtodoinicializar(queserelprimeroquedeberemosllamardesdelamain)
creamoselobjetodelaclaseScannerycargamosportecladolosatributosnombre
y edad. Como podemos ver el mtodo inicializar puede hacer acceso a los tres
atributosdelaclasePersona.
Elsegundomtodotieneporobjetivoimprimirelcontenidodelosatributosnombrey
edad (los datos de los atributos se cargaron al ejecutarse previamente el mtodo
inicializar:
publicvoidimprimir(){
System.out.println("Nombre:"+nombre);
System.out.println("Edad:"+edad);
}
Eltercermtodotieneporobjetivomostrarunmensajesilapersonaesmayorono
deedad:
publicvoidesMayorEdad(){
if(edad>=18){
System.out.print(nombre+"esmayordeedad.");
}else{
System.out.print(nombre+"noesmayordeedad.");
}
}
3/12
2/25/2016
Declaracindeunaclaseydefinicindeobjetos.
publicstaticvoidmain(String[]ar){
Personapersona1;
persona1=newPersona();
persona1.inicializar();
persona1.imprimir();
persona1.esMayorEdad();
}
Personapersona1//Declaracindelobjeto
persona1=newPersona()//Creacindelobjeto
persona1.inicializar()//Llamadadeunmtodo
Problema2:
Desarrollar un programa que cargue los lados de un tringulo e implemente los
siguientes mtodos: inicializar los atributos, imprimir el valor del lado mayor y otro
mtodoquemuestresiesequilteroono.
Programa:
importjava.util.Scanner
publicclassTriangulo{
privateScannerteclado
privateintlado1,lado2,lado3
publicvoidinicializar(){
teclado=newScanner(System.in)
System.out.print("Medidalado1:")
lado1=teclado.nextInt()
System.out.print("Medidalado2:")
lado2=teclado.nextInt()
System.out.print("Medidalado3:")
lado3=teclado.nextInt()
}
publicvoidladoMayor(){
System.out.print("Ladomayor:")
if(lado1>lado2&&lado1>lado3){
System.out.println(lado1)
}else{
if(lado2>lado3){
System.out.println(lado2)
http://www.javaya.com.ar/detalleconcepto.php?codigo=87&inicio=0
4/12
2/25/2016
Declaracindeunaclaseydefinicindeobjetos.
}else{
System.out.println(lado3)
}
}
}
publicvoidesEquilatero(){
if(lado1==lado2&&lado1==lado3){
System.out.print("Esuntringuloequiltero")
}else{
System.out.print("Noesuntringuloequiltero")
}
}
publicstaticvoidmain(String[]ar){
Triangulotriangulo1=newTriangulo()
triangulo1.inicializar()
triangulo1.ladoMayor()
triangulo1.esEquilatero()
}
}
Todoslosproblemasquerequieranlaentradadedatosportecladodebemosdefinir
unatributodelaclaseScanner:
privateScannerteclado;
Esteproblemarequieredefinirtresatributosdetipoenterodondealmacenamoslos
valoresdelosladosdeltringulo:
privateintlado1,lado2,lado3;
Elprimermtodoquedeberllamarsedesdelamaineselinicializardondecreamos
elobjetodelaclaseScannerycargamoslostresatributosporteclado:
publicvoidinicializar(){
teclado=newScanner(System.in);
System.out.print("Medidalado1:");
lado1=teclado.nextInt();
System.out.print("Medidalado2:");
lado2=teclado.nextInt();
http://www.javaya.com.ar/detalleconcepto.php?codigo=87&inicio=0
5/12
2/25/2016
Declaracindeunaclaseydefinicindeobjetos.
System.out.print("Medidalado3:");
lado3=teclado.nextInt();
}
ElmtodoladoMayormuestraelvalormayordelostresenterosingresados:
publicvoidladoMayor(){
System.out.print("Ladomayor:");
if(lado1>lado2&&lado1>lado3){
System.out.println(lado1);
}else{
if(lado2>lado3){
System.out.println(lado2);
}else{
System.out.println(lado3);
}
}
}
Comopodemosobservarcuandounproblemasevuelvemscomplejoesmsfcil
yordenadosepararlosdistintosalgoritmosenvariosmtodosynocodificartodoen
lamain.
Elltimomtododeestaclaseverificasilostresenterosingresadossoniguales:
publicvoidesEquilatero(){
if(lado1==lado2&&lado1==lado3){
System.out.print("Esuntringuloequiltero");
}else{
System.out.print("Noesuntringuloequiltero");
}
}
Problema3:
http://www.javaya.com.ar/detalleconcepto.php?codigo=87&inicio=0
6/12
2/25/2016
Declaracindeunaclaseydefinicindeobjetos.
Desarrollar una clase que represente un punto en el plano y tenga los siguientes
mtodos:cargarlosvaloresdexey,imprimirenquecuadranteseencuentradicho
punto (concepto matemtico, primer cuadrante si x e y son positivas, si x<0 e y>0
segundocuadrante,etc.)
Programa:
importjava.util.Scanner
publicclassPunto{
privateScannerteclado
intx,y
publicvoidinicializar(){
teclado=newScanner(System.in)
System.out.print("Ingresecoordenadax:")
x=teclado.nextInt()
System.out.print("Ingresecoordenaday:")
y=teclado.nextInt()
}
voidimprimirCuadrante(){
if(x>0&&y>0){
System.out.print("Seencuentraenelprimercuadr
}else{
if(x<0&&y>0){
System.out.print("Seencuentraenelsegundo
}else{
if(x<0&&y<0){
System.out.print("Seencuentraenelterc
}else{
if(x>0&&y<0){
System.out.print("Seencuentraenel
}else{
System.out.print("Elpuntonoesten
}
}
}
}
}
publicstaticvoidmain(String[]ar){
Puntopunto1
http://www.javaya.com.ar/detalleconcepto.php?codigo=87&inicio=0
7/12
2/25/2016
Declaracindeunaclaseydefinicindeobjetos.
punto1=newPunto()
punto1.inicializar()
punto1.imprimirCuadrante()
}
}
Definimos tres atributos (el objeto de la clase Scanner y los dos enteros donde
almacenamoslacoordenadaxeydelpunto:
privateScannerteclado;
intx,y;
voidimprimirCuadrante(){
if(x>0&&y>0){
System.out.print("Seencuentraenelprimercuadrante.");
}else{
if(x<0&&y>0){
System.out.print("Seencuentraenelsegundocuadrante.");
}else{
if(x<0&&y<0){
System.out.print("Seencuentraeneltercercuadrante.");
}else{
if(x>0&&y<0){
System.out.print("Seencuentraenelcuartocuadrante.")
}else{
System.out.print("Elpuntonoestenuncuadrante.");
}
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=87&inicio=0
8/12
2/25/2016
Declaracindeunaclaseydefinicindeobjetos.
}
}
Problema4:
DesarrollarunaclasequerepresenteunCuadradoytengalossiguientesmtodos:
cargarelvalordesulado,imprimirsupermetroysusuperficie.
Programa:
importjava.util.Scanner
publicclassCuadrado{
privateScannerteclado
intlado
publicvoidinicializar(){
teclado=newScanner(System.in)
System.out.print("Ingresevalordellado:")
lado=teclado.nextInt()
}
publicvoidimprimirPerimetro(){
intperimetro
perimetro=lado*4
System.out.println("Elpermetroes:"+perimetro)
}
publicvoidimprimirSuperficie(){
intsuperficie
http://www.javaya.com.ar/detalleconcepto.php?codigo=87&inicio=0
9/12
2/25/2016
Declaracindeunaclaseydefinicindeobjetos.
superficie=lado*lado
System.out.println("Lasuperficiees:"+superficie)
}
publicstaticvoidmain(String[]ar){
Cuadradocuadrado1
cuadrado1=newCuadrado()
cuadrado1.inicializar()
cuadrado1.imprimirPerimetro()
cuadrado1.imprimirSuperficie()
}
}
En este problema es interesante ver como no definimos dos atributos donde se
almacenan la superficie y el permetro del cuadrado, esto debido a que solo estos
datosselosrequiereenelmtododondeseimprimen:
publicvoidimprimirPerimetro(){
intperimetro;
perimetro=lado*4;
System.out.println("Elpermetroes:"+perimetro);
}
Problemaspropuestos
1. Confeccionarunaclasequerepresenteunempleado.Definircomoatributossu
nombreysusueldo.Confeccionarlosmtodosparalacarga,otroparaimprimir
susdatosyporltimounoqueimprimaunmensajesidebepagarimpuestos(si
elsueldosuperaa3000)
2. Implementar la clase operaciones. Se deben cargar dos valores enteros,
calcular su suma, resta, multiplicacin y divisin, cada una en un mtodo,
imprimirdichosresultados.
importjava.util.Scanner
publicclassEmpleado{
http://www.javaya.com.ar/detalleconcepto.php?codigo=87&inicio=0
10/12
2/25/2016
Declaracindeunaclaseydefinicindeobjetos.
privateScannerteclado
Stringnombre
floatsueldo
publicvoidinicializar(){
teclado=newScanner(System.in)
System.out.print("Ingreseelnombredelempleado:")
nombre=teclado.next()
System.out.print("Ingresesusueldo:")
sueldo=teclado.nextFloat()
}
publicvoidpagaImpuestos(){
if(sueldo>3000){
System.out.print("Debeabonarimpuestos")
}else{
System.out.print("Nopagaimpuestos")
}
}
publicstaticvoidmain(String[]ar){
Empleadoempleado1
empleado1=newEmpleado()
empleado1.inicializar()
empleado1.pagaImpuestos()
}
}
importjava.util.Scanner
publicclassOperaciones{
privateScannerteclado
intvalor1,valor2
publicvoidinicializar(){
teclado=newScanner(System.in)
System.out.print("Ingreseprimervalor:")
valor1=teclado.nextInt()
System.out.print("Ingresesegundovalor:")
valor2=teclado.nextInt()
}
publicvoidsumar(){
intsuma
suma=valor1+valor2
System.out.println("Lasumaes:"+suma)
}
publicvoidrestar(){
intresta
resta=valor1valor2
http://www.javaya.com.ar/detalleconcepto.php?codigo=87&inicio=0
11/12
2/25/2016
Declaracindeunaclaseydefinicindeobjetos.
System.out.println("Larestaes:"+resta)
}
publicvoidmultiplicar(){
intmultiplicacion
multiplicacion=valor1*valor2
System.out.println("Lamultiplicacines:"+multiplicacion)
}
publicvoiddividir(){
intdivision
division=valor1/valor2
System.out.println("Ladivisines:"+division)
}
publicstaticvoidmain(String[]ar){
Operacionesopera
opera=newOperaciones()
opera.inicializar()
opera.sumar()
opera.restar()
opera.multiplicar()
opera.dividir()
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=87&inicio=0
12/12
2/25/2016
Estructuradedatostipovector.
Estructuradedatostipovector.
Hemos empleado variables de distinto tipo para el almacenamiento de datos
(variables int, float, String) En esta seccin veremos otros tipos de variables que
permitenalmacenarunconjuntodedatosenunanicavariable.
Un vector es una estructura de datos que permite almacenar un CONJUNTO de
datosdelMISMOtipo.
Con un nico nombre se define un vector y por medio de un subndice hacemos
referenciaacadaelementodelmismo(componente)
Problema1:
Sedeseaguardarlossueldosde5operarios.
Segn lo conocido deberamos definir 5 variables si queremos tener en un cierto
momentolos5sueldosalmacenadosenmemoria.
Empleandounvectorsoloserequieredefinirunniconombreyaccedemosacada
elementopormediodelsubndice.
Programa:
importjava.util.Scanner
publicclassPruebaVector1{
privateScannerteclado
privateint[]sueldos
publicvoidcargar()
{
teclado=newScanner(System.in)
sueldos=newint[5]
for(intf=0f<5f++){
http://www.javaya.com.ar/detalleconcepto.php?codigo=89&inicio=0
1/13
2/25/2016
Estructuradedatostipovector.
System.out.print("Ingresevalordelacomponente:
sueldos[f]=teclado.nextInt()
}
publicvoidimprimir(){
for(intf=0f<5f++){
System.out.println(sueldos[f])
}
}
publicstaticvoidmain(String[]ar){
PruebaVector1pv=newPruebaVector1()
pv.cargar()
pv.imprimir()
}
}
Paraladeclaracindeunvectorleantecedemosalnombreloscorchetesabiertosy
cerrados:
privateint[]sueldos;
Lodefinimoscomoatributodelaclaseyaqueloutilizaremosenlosdosmtodos.
En el mtodo de cargar lo primero que hacemos es crear el vector (en java los
vectores son objetos por lo que es necesario proceder a su creacin mediante el
operadornew):
sueldos=newint[5];
Cuandocreamoselvectorindicamosentrecorcheteslacantidaddeelementosque
sepuedenalmacenarposteriormenteenelmismo.
Para cargar cada componente debemos indicar entre corchetes que elemento del
vectorestamosaccediendo:
for(intf=0;f<5;f++){
System.out.print("Ingresevalordelacomponente:");
sueldos[f]=teclado.nextInt();
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=89&inicio=0
2/13
2/25/2016
Estructuradedatostipovector.
Lo mas comn es utilizar una estructura repetitiva for para recorrer cada
componentedelvector.
Utilizarelfornosreducelacantidaddecdigo,sinoutilizounfordeberaenforma
secuencialimplementarelsiguientecdigo:
System.out.print("Ingresevalordelacomponente:");
sueldos[0]=teclado.nextInt();
System.out.print("Ingresevalordelacomponente:");
sueldos[1]=teclado.nextInt();
System.out.print("Ingresevalordelacomponente:");
sueldos[2]=teclado.nextInt();
System.out.print("Ingresevalordelacomponente:");
sueldos[3]=teclado.nextInt();
System.out.print("Ingresevalordelacomponente:");
sueldos[4]=teclado.nextInt();
Laimpresindelascomponentesdelvectorlohacemosenelotromtodo:
publicvoidimprimir(){
for(intf=0;f<5;f++){
System.out.println(sueldos[f]);
}
}
Siemprequequeremosaccederaunacomponentedelvectordebemosindicarentre
corchetes la componente, dicho valor comienza a numerarse en cero y continua
hastaunnmeromenosdeltamaodelvector,ennuestrocasocreamoselvector
con5elementos:
sueldos=newint[5];
Porltimoenesteprogramacreamosunobjetoenlamainyllamamosalomtodos
http://www.javaya.com.ar/detalleconcepto.php?codigo=89&inicio=0
3/13
2/25/2016
Estructuradedatostipovector.
decargareimprimirelvector:
publicstaticvoidmain(String[]ar){
PruebaVector1pv=newPruebaVector1();
pv.cargar();
pv.imprimir();
}
Problema2:
Definir un vector de 5 componentes de tipo float que representen las alturas de 5
personas.
Obtenerelpromediodelasmismas.Contarcuntaspersonassonmsaltasqueel
promedioycuntasmsbajas.
Programa:
importjava.util.Scanner
publicclassPruebaVector2{
privateScannerteclado
privatefloat[]alturas
privatefloatpromedio
publicvoidcargar(){
teclado=newScanner(System.in)
alturas=newfloat[5]
for(intf=0f<5f++){
System.out.print("Ingreselaalturadelapersona
alturas[f]=teclado.nextFloat()
}
}
publicvoidcalcularPromedio(){
floatsuma
suma=0
for(intf=0f<5f++){
suma=suma+alturas[f]
}
promedio=suma/5
System.out.println("Promediodealturas:"+promedio)
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=89&inicio=0
4/13
2/25/2016
Estructuradedatostipovector.
publicvoidmayoresMenores(){
intmay,men
may=0
men=0
for(intf=0f<5f++){
if(alturas[f]>promedio){
may++
}else{
if(alturas[f]<promedio){
men++
}
}
}
System.out.println("Cantidaddepersonasmayoresalprome
System.out.println("Cantidaddepersonasmenoresalprome
}
publicstaticvoidmain(String[]ar){
PruebaVector2pv2=newPruebaVector2()
pv2.cargar()
pv2.calcularPromedio()
pv2.mayoresMenores()
}
}
Definimoscomoatributounvectordondealmacenaremoslasalturas:
privatefloat[]alturas;
Enlacargacreamoselvectorindicandoquereserveespaciopara5componentes:
alturas=newfloat[5];
Procedemosseguidamenteacargartodossuselementos:
for(intf=0;f<5;f++){
System.out.print("Ingreselaalturadelapersona:");
alturas[f]=teclado.nextFloat();
}
Enotromtodoprocedemosasumartodassuscomponentesyobtenerelpromedio.
http://www.javaya.com.ar/detalleconcepto.php?codigo=89&inicio=0
5/13
2/25/2016
Estructuradedatostipovector.
Por ltimo en un tercer mtodo comparamos cada componente del vector con el
atributo promedio, si el valor almacenado supera al promedio incrementamos un
contadorencasoqueseamenoralpromedioincrementamosotrocontador:
publicvoidmayoresMenores(){
intmay,men;
may=0;
men=0;
for(intf=0;f<5;f++){
if(alturas[f]>promedio){
may++;
}else{
if(alturas[f]<promedio){
men++;
}
}
}
System.out.println("Cantidaddepersonasmayoresalpromedio:"+may);
System.out.println("Cantidaddepersonasmenoresalpromedio:"+men);
}
Importante:
En este problema podemos observar una ventaja de tener almacenadas todas las
alturas de las personas. Si no conociramos los vectores tenemos que cargar otra
vezlasalturasportecladoparacompararlasconelpromedio.
Mientras el programa est en ejecucin tenemos el vector alturas a nuestra
disposicin. Es importante tener en cuenta que cuando finaliza la ejecucin del
programasepierdeelcontenidodetodaslasvariables(simplesyvectores)
http://www.javaya.com.ar/detalleconcepto.php?codigo=89&inicio=0
6/13
2/25/2016
Estructuradedatostipovector.
Problema3:
Unaempresatienedosturnos(maanaytarde)enlosquetrabajan8empleados(4
porlamaanay4porlatarde)
Confeccionar un programa que permita almacenar los sueldos de los empleados
agrupadosporturno.
Imprimirlosgastosensueldosdecadaturno.
Programa:
importjava.util.Scanner
publicclassPruebaVector3{
privateScannerteclado
privatefloat[]turnoMan
privatefloat[]turnoTar
publicvoidcargar(){
teclado=newScanner(System.in)
turnoMan=newfloat[4]
turnoTar=newfloat[4]
System.out.println("Sueldosdeempleadosdelturnode
for(intf=0f<4f++){
System.out.print("Ingresesueldo:")
turnoMan[f]=teclado.nextFloat()
}
System.out.println("Sueldosdeempleadosdelturnode
for(intf=0f<4f++){
System.out.print("Ingresesueldo:")
turnoTar[f]=teclado.nextFloat()
}
}
publicvoidcalcularGastos(){
floatman=0
floattar=0
for(intf=0f<4f++){
man=man+turnoMan[f]
tar=tar+turnoTar[f]
}
System.out.println("Totaldegastosdelturnodelam
System.out.println("Totaldegastosdelturnodelat
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=89&inicio=0
7/13
2/25/2016
Estructuradedatostipovector.
publicstaticvoidmain(String[]ar){
PruebaVector3pv=newPruebaVector3()
pv.cargar()
pv.calcularGastos()
}
}
Definimos dos atributos de tipo vector donde almacenaremos los sueldos de los
empleadosdecadaturno:
privatefloat[]turnoMan;
privatefloat[]turnoTar;
Creamoslosvectoresconcuatroelementoscadauno:
turnoMan=newfloat[4];
turnoTar=newfloat[4];
Mediantedosestructurasrepetitivasprocedemosacargarcadavector:
System.out.println("Sueldosdeempleadosdelturnodelamaana.");
for(intf=0;f<4;f++){
System.out.print("Ingresesueldo:");
turnoMan[f]=teclado.nextFloat();
}
System.out.println("Sueldosdeempleadosdelturnodelatarde.");
for(intf=0;f<4;f++){
System.out.print("Ingresesueldo:");
turnoTar[f]=teclado.nextFloat();
}
8/13
2/25/2016
Estructuradedatostipovector.
System.out.println("Totaldegastosdelturnodelamaana:"+man);
System.out.println("Totaldegastosdelturnodelatarde:"+tar);
Problemaspropuestos
1. Desarrollar un programa que permita ingresar un vector de 8 elementos, e
informe:
Elvaloracumuladodetodosloselementosdelvector.
Elvaloracumuladodeloselementosdelvectorqueseanmayoresa36.
Cantidaddevaloresmayoresa50.
2. Realizarunprogramaquepidalacargadedosvectoresnumricosenterosde4
elementos. Obtener la suma de los dos vectores, dicho resultado guardarlo en
untercervectordelmismotamao.Sumarcomponenteacomponente.
3. Setienenlasnotasdelprimerparcialdelosalumnosdedoscursos,elcursoAy
elcursoB,cadacursocuentacon5alumnos.
Realizar un programa que muestre el curso que obtuvo el mayor promedio
general.
4. Cargar un vector de 10 elementos y verificar posteriormente si el mismo est
ordenadodemenoramayor.
importjava.util.Scanner
publicclassPruebaVector4{
privateScannerteclado
privateint[]vec
publicvoidcargar(){
teclado=newScanner(System.in)
vec=newint[8]
for(intf=0f<8f++){
System.out.print("Ingreseelemento:")
vec[f]=teclado.nextInt()
}
}
publicvoidacumularElementos(){
intsuma=0
for(intf=0f<8f++){
suma=suma+vec[f]
}
System.out.println("Lasumadelos8elementoses:"+suma)
}
publicvoidacumularMayores36(){
intsuma=0
for(intf=0f<8f++){
http://www.javaya.com.ar/detalleconcepto.php?codigo=89&inicio=0
9/13
2/25/2016
Estructuradedatostipovector.
if(vec[f]>36){
suma=suma+vec[f]
}
}
System.out.println("Lasumadeloselementosmayoresa36es:"+sum
}
publicvoidcantidadMayores50(){
intcant=0
for(intf=0f<8f++){
if(vec[f]>50){
cant++
}
}
System.out.println("Lacantidaddevaloresmayoresa50es:"+cant)
}
publicstaticvoidmain(String[]ar){
PruebaVector4pv=newPruebaVector4()
pv.cargar()
pv.acumularElementos()
pv.acumularMayores36()
pv.cantidadMayores50()
}
}
importjava.util.Scanner
publicclassPruebaVector5{
privateScannerteclado
privateint[]vec1
privateint[]vec2
privateint[]vecSuma
publicvoidcargar(){
teclado=newScanner(System.in)
vec1=newint[4]
vec2=newint[4]
System.out.println("Cargadelprimervector.")
for(intf=0f<4f++){
System.out.print("Ingreseelemento:")
vec1[f]=teclado.nextInt()
}
System.out.println("Cargadelsegundovector.")
for(intf=0f<4f++){
System.out.print("Ingreseelemento:")
vec2[f]=teclado.nextInt()
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=89&inicio=0
10/13
2/25/2016
Estructuradedatostipovector.
publicvoidsumarizarVectores(){
vecSuma=newint[4]
for(intf=0f<4f++){
vecSuma[f]=vec1[f]+vec2[f]
}
System.out.println("Vectorresultante.")
for(intf=0f<4f++){
System.out.println(vecSuma[f])
}
}
publicstaticvoidmain(String[]ar){
PruebaVector5pv=newPruebaVector5()
pv.cargar()
pv.sumarizarVectores()
}
}
importjava.util.Scanner
publicclassPruebaVector6{
privateScannerteclado
privateint[]cursoa
privateint[]cursob
privateint[]vecSuma
publicvoidcargar(){
teclado=newScanner(System.in)
cursoa=newint[5]
cursob=newint[5]
System.out.println("CargadenotasdelcursoA")
for(intf=0f<5f++){
System.out.print("Ingresenota:")
cursoa[f]=teclado.nextInt()
}
System.out.println("CargadelnotasdelcursoB")
for(intf=0f<5f++){
System.out.print("Ingresenota:")
cursob[f]=teclado.nextInt()
}
}
publicvoidcalcularPromedios(){
intsuma1=0
intsuma2=0
for(intf=0f<5f++){
suma1=suma1+cursoa[f]
suma2=suma2+cursob[f]
}
intpromedioa=suma1/5
http://www.javaya.com.ar/detalleconcepto.php?codigo=89&inicio=0
11/13
2/25/2016
Estructuradedatostipovector.
intpromediob=suma2/5
if(promedioa>promediob){
System.out.println("ElcursoAtieneunpromediomayor.")
}else{
System.out.println("ElcursoBtieneunpromediomayor.")
}
}
publicstaticvoidmain(String[]ar){
PruebaVector6pv=newPruebaVector6()
pv.cargar()
pv.calcularPromedios()
}
}
importjava.util.Scanner
publicclassPruebaVector7{
privateScannerteclado
privateint[]vec
publicvoidcargar(){
teclado=newScanner(System.in)
vec=newint[10]
for(intf=0f<10f++){
System.out.print("Ingreseelemento:")
vec[f]=teclado.nextInt()
}
}
publicvoidverificarOrdenado(){
intorden=1
for(intf=0f<9f++){
if(vec[f+1]<vec[f]){
orden=0
}
}
if(orden==1){
System.out.println("Estaordenadodemenoramayor")
}else{
System.out.println("Noestaordenadodemenoramayor")
}
}
publicstaticvoidmain(String[]ar){
PruebaVector7pv=newPruebaVector7()
pv.cargar()
pv.verificarOrdenado()
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=89&inicio=0
12/13
2/25/2016
Vector(Tamaodeunvector)
Vector(Tamaodeunvector)
Comohemosvistocuandosecreaunvectorindicamosentrecorchetessutamao:
sueldos=newint[5];
Luego cuando tenemos que recorrer dicho vector disponemos una estructura
repetitivafor:
for(intf=0;f<5;f++){
System.out.print("Ingresevalordelacomponente:");
sueldos[f]=teclado.nextInt();
}
Comovemoselforserepitemientraselcontadorfvalemenosde5.Esteestructura
repetitivaesidnticacadavezquerecorremoselvector.
Quepasaahorasicambiamoseltamaodelvectorcuandolocreamos:
sueldos=newint[7];
Con esto tenemos que cambiar todos los for que recorren dicho vector. Ahora
veremos que un vector al ser un objeto tiene un atributo llamado length que
almacena su tamao. Luego podemos modificar todos los for con la siguiente
sintaxis:
for(intf=0;f<sueldos.length;f++){
System.out.print("Ingresevalordelacomponente:");
sueldos[f]=teclado.nextInt();
}
Tambin podemos pedir al usuario que indique el tamao del vector en tiempo de
ejecucin,enestoscasossehaceimprescindibleelempleodelatributolength.
Problema1:
Se desea almacenar los sueldos de operarios. Cuando se ejecuta el programa se
debe pedir la cantidad de sueldos a ingresar. Luego crear un vector con dicho
http://www.javaya.com.ar/detalleconcepto.php?codigo=90&inicio=0
1/4
2/25/2016
Vector(Tamaodeunvector)
tamao.
Programa:
importjava.util.Scanner
publicclassPruebaVector8{
privateScannerteclado
privateint[]sueldos
publicvoidcargar()
{
teclado=newScanner(System.in)
System.out.print("Cuantossueldoscargar:")
intcant
cant=teclado.nextInt()
sueldos=newint[cant]
for(intf=0f<sueldos.lengthf++){
System.out.print("Ingresesueldo:")
sueldos[f]=teclado.nextInt()
}
publicvoidimprimir(){
for(intf=0f<sueldos.lengthf++){
System.out.println(sueldos[f])
}
}
publicstaticvoidmain(String[]ar){
PruebaVector8pv=newPruebaVector8()
pv.cargar()
pv.imprimir()
}
}
Ladefinicindelvectornovara:
privateint[]sueldos;
Luego para la creacin del mismo ingresamos una variable entera y la utilizamos
comosubndiceenelmomentodelacreacindelvector:
http://www.javaya.com.ar/detalleconcepto.php?codigo=90&inicio=0
2/4
2/25/2016
Vector(Tamaodeunvector)
System.out.print("Cuantossueldoscargar:");
intcant;
cant=teclado.nextInt();
sueldos=newint[cant];
Luego las estructuras repetitivas las acotamos accediendo al atributo length del
vector:
for(intf=0;f<sueldos.length;f++){
System.out.print("Ingresesueldo:");
sueldos[f]=teclado.nextInt();
}
Problemaspropuestos
1. Desarrollar un programa que permita ingresar un vector de n elementos,
ingresarnporteclado.Luegoimprimirlasumadetodossuselementos
importjava.util.Scanner
publicclassPruebaVector9{
privateScannerteclado
privateint[]vec
publicvoidcargar(){
teclado=newScanner(System.in)
System.out.print("Cuantoselementostieneelvector:")
intn
n=teclado.nextInt()
vec=newint[n]
for(intf=0f<vec.lengthf++){
System.out.print("Ingreseelemento:")
vec[f]=teclado.nextInt()
}
}
publicvoidacumularElementos(){
intsuma=0
for(intf=0f<vec.lengthf++){
suma=suma+vec[f]
}
System.out.println("Lasumadeloselementoses:"+suma)
}
publicstaticvoidmain(String[]ar){
PruebaVector9pv=newPruebaVector9()
pv.cargar()
http://www.javaya.com.ar/detalleconcepto.php?codigo=90&inicio=0
3/4
2/25/2016
Vector(Tamaodeunvector)
pv.acumularElementos()
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=90&inicio=0
4/4
2/25/2016
Vectoresparalelos
Vectoresparalelos
Este concepto se da cuando hay una relacin entre las componentes de igual
subndice(mismaposicin)deunvectoryotro.
Problema1:
Desarrollar un programa que permita cargar 5 nombres de personas y sus edades
respectivas. Luego de realizar la carga por teclado de todos los datos imprimir los
nombresdelaspersonasmayoresdeedad(mayoresoigualesa18aos)
Programa:
importjava.util.Scanner
publicclassPruebaVector10{
privateScannerteclado
privateString[]nombres
privateint[]edades
publicvoidcargar(){
teclado=newScanner(System.in)
nombres=newString[5]
edades=newint[5]
http://www.javaya.com.ar/detalleconcepto.php?codigo=91&inicio=0
1/3
2/25/2016
Vectoresparalelos
for(intf=0f<nombres.lengthf++){
System.out.print("Ingresenombre:")
nombres[f]=teclado.next()
System.out.print("Ingreseedad:")
edades[f]=teclado.nextInt()
}
}
publicvoidmayoresEdad(){
System.out.println("Personasmayoresdeedad.")
for(intf=0f<nombres.lengthf++){
if(edades[f]>=18){
System.out.println(nombres[f])
}
}
}
publicstaticvoidmain(String[]ar){
PruebaVector10pv=newPruebaVector10()
pv.cargar()
pv.mayoresEdad()
}
}
Definimoslosdosvectores:
privateString[]nombres;
privateint[]edades;
Creamoslosdosvectorescon5elementoscadauno:
nombres=newString[5];
edades=newint[5];
Medianteunforprocedemosalacargadeloselementosdelosvectores:
for(intf=0;f<nombres.length;f++){
System.out.print("Ingresenombre:");
nombres[f]=teclado.next();
System.out.print("Ingreseedad:");
edades[f]=teclado.nextInt();
http://www.javaya.com.ar/detalleconcepto.php?codigo=91&inicio=0
2/3
2/25/2016
Vectoresparalelos
Podemosutilizarellengthdecualquieradelosdosvectores,yaquetienenelmismo
tamao.
Para imprimir los nombres de las personas mayores de edad verificamos cada
componentedelvectordeedades,encasoqueseaigualomayoro18procedemos
amostrarelelementodelamismaposicindelotrovector:
for(intf=0;f<nombres.length;f++){
if(edades[f]>=18){
System.out.println(nombres[f]);
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=91&inicio=0
3/3
2/25/2016
Vectores(mayorymenorelemento)
Vectores(mayorymenorelemento)
Esunaactividadcomnlabsquedadelmayorymenorelementodeunvector,lo
mismoquesuposicin.
Elmayorelementoesel820yseencuentraenlaposicinn2.
Problema1:
Confeccionar un programa que permita cargar los nombres de 5 operarios y sus
sueldosrespectivos.Mostrarelsueldomayoryelnombredeloperario.
Programa:
importjava.util.Scanner
publicclassPruebaVector11{
privateScannerteclado
privateString[]nombres
privatefloat[]sueldos
publicvoidcargar(){
teclado=newScanner(System.in)
nombres=newString[5]
sueldos=newfloat[5]
for(intf=0f<nombres.lengthf++){
System.out.print("Ingreseelnombredelempleado:
nombres[f]=teclado.next()
System.out.print("Ingreseelsueldo:")
sueldos[f]=teclado.nextFloat()
}
}
publicvoidmayorSueldo(){
http://www.javaya.com.ar/detalleconcepto.php?codigo=92&inicio=0
1/5
2/25/2016
Vectores(mayorymenorelemento)
floatmayor
intpos
mayor=sueldos[0]
pos=0
for(intf=1f<nombres.lengthf++){
if(sueldos[f]>mayor){
mayor=sueldos[f]
pos=f
}
}
System.out.println("Elempleadoconsueldomayores"
System.out.println("Tieneunsueldo:"+mayor)
}
publicstaticvoidmain(String[]ar){
PruebaVector11pv=newPruebaVector11()
pv.cargar()
pv.mayorSueldo()
}
}
Definimos los dos vectores paralelos donde almacenaremos los nombres y los
sueldosdelosoperarios:
privateString[]nombres;
privatefloat[]sueldos;
Creamoslosdosvectoresyprocedemosacargarsuselementos:
nombres=newString[5];
sueldos=newfloat[5];
for(intf=0;f<nombres.length;f++){
System.out.print("Ingreseelnombredelempleado:");
nombres[f]=teclado.next();
System.out.print("Ingreseelsueldo:");
sueldos[f]=teclado.nextFloat();
}
Paraobtenerelmayorsueldoyelnombredeloperariorealizarlossiguientespasos:
Inicializamosunavariablemayorconlaprimercomponentedelvectorsueldos:
http://www.javaya.com.ar/detalleconcepto.php?codigo=92&inicio=0
2/5
2/25/2016
Vectores(mayorymenorelemento)
mayor=sueldos[0];
Inicializamosunavariableposconelvalor0,yaquedecimosprimeramentequeel
mayoreslaprimercomponentedelvector:
pos=0;
Recorremoslascomponentesdelvectorquefaltananalizar,osea,dela1ala4:
for(intf=1;f<nombres.length;f++){
yalavariableposlecargamoslavariablefqueindicalacomponentequeestamos
analizando:
pos=f
Problemaspropuestos
1. Cargar un vector de n elementos. imprimir el menor y un mensaje si se repite
dentrodelvector.
http://www.javaya.com.ar/detalleconcepto.php?codigo=92&inicio=0
3/5
2/25/2016
Vectores(mayorymenorelemento)
importjava.util.Scanner
publicclassPruebaVector12{
privateScannerteclado
privateint[]vec
privateintmenor
publicvoidcargar(){
teclado=newScanner(System.in)
System.out.print("Cuantoselementosdeseacargar:")
intn=teclado.nextInt()
vec=newint[n]
for(intf=0f<vec.lengthf++){
System.out.print("Ingresecomponente:")
vec[f]=teclado.nextInt()
}
}
publicvoidmenorElemento(){
menor=vec[0]
for(intf=1f<vec.lengthf++){
if(vec[f]<menor){
menor=vec[f]
}
}
System.out.println("Elelementomenores:"+menor)
}
publicvoidrepiteMenor(){
intcant=0
for(intf=0f<vec.lengthf++){
if(vec[f]==menor){
cant++
}
}
if(cant>1){
System.out.println("Serepiteelmenorenelvector.")
}else{
System.out.println("Noserepiteelmenorenelvector.")
}
}
publicstaticvoidmain(String[]ar){
PruebaVector12pv=newPruebaVector12()
pv.cargar()
pv.menorElemento()
pv.repiteMenor()
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=92&inicio=0
4/5
2/25/2016
Vectores(ordenamiento)
Vectores(ordenamiento)
Elordenamientodeunvectorselograintercambiandolascomponentesdemanera
que:
vec[0]<=vec[1]<=vec[2]etc.
El contenido de la componente vec[0] sea menor o igual al contenido de la
componentevec[1]yassucesivamente.
Sisecumplelodichoanteriormentedecimosqueelvectorestordenadodemenor
amayor.Igualmentepodemosordenarunvectordemayoramenor.
Sepuedeordenartantovectoresconcomponentesdetipoint,floatcomoString.En
esteltimocasoelordenamientoesalfabtico.
Problema1:
Sedebecrearunvectordondealmacenar5sueldos.Ordenarelvectorsueldosde
menoramayor.
Estaprimeraaproximacintieneporobjetivoanalizarlosintercambiosdeelementos
dentrodelvector.
http://www.javaya.com.ar/detalleconcepto.php?codigo=93&inicio=0
1/9
2/25/2016
Vectores(ordenamiento)
Elalgoritmoconsisteencompararsilaprimeracomponenteesmayoralasegunda,
en caso que la condicin sea verdadera, intercambiamos los contenidos de las
componentes.
Vamosasuponerqueseingresanlossiguientesvaloresporteclado:
1200
750
820
550
490
f=0
750
1200
820
550
490
f=1
f=2
f=3
750
820
1200
550
490
750
820
550
1200
490
750
820
550
490
1200
Alsalirdelforenesteejemploelcontenidodelvectoreselsiguiente:
750
820
550
490
http://www.javaya.com.ar/detalleconcepto.php?codigo=93&inicio=0
2/9
2/25/2016
Vectores(ordenamiento)
1200
Realicemosunapruebadelsiguientealgoritmo:
Cuandok=0
f=0
http://www.javaya.com.ar/detalleconcepto.php?codigo=93&inicio=0
f=1
f=2
f=3
3/9
2/25/2016
Vectores(ordenamiento)
Cuandok=1
750
1200
820
550
490
750
820
1200
550
490
750
820
550
1200
490
750
820
550
490
1200
f=0
750
820
550
490
1200
f=1
750
550
820
490
1200
f=2
750
550
490
820
1200
f=3
750
550
490
820
1200
Cuandok=2
f=0
550
750
490
820
1200
f=1
550
490
750
820
1200
f=2
550
490
750
820
1200
f=3
550
490
750
820
1200
Cuandok=3
f=0
490
550
750
820
1200
f=1
490
550
750
820
1200
f=2
490
550
750
820
1200
f=3
490
550
750
820
1200
Porquerepetimos4veceselforexterno?
Como sabemos cada vez que se repite en forma completa el for interno queda
ordenada una componente del vector. A primera vista diramos que deberamos
repetir el for externo la cantidad de componentes del vector, en este ejemplo el
vectorsueldostiene5componentes.
Siobservamos,cuandoquedandoselementosporordenar,alordenarunodeellos
queda el otro automticamente ordenado (podemos imaginar que si tenemos un
vectorcon2elementosnoserequiereelforexterno,porqueestedeberarepetirse
unanicavez)
Una ltima consideracin a este ALGORITMO de ordenamiento es que los
elementosquesevanordenandocontinuamoscomparndolos.
Ejemplo:Enlaprimeraejecucindelforinternoelvalor1200quedaubicadoenla
posicin 4 del vector. En la segunda ejecucin comparamos si el 820 es mayor a
http://www.javaya.com.ar/detalleconcepto.php?codigo=93&inicio=0
4/9
2/25/2016
Vectores(ordenamiento)
1200,locualseguramenteserfalso.
Podemos concluir que la primera vez debemos hacer para este ejemplo 4
comparaciones, en la segunda ejecucin del for interno debemos hacer 3
comparaciones y en general debemos ir reduciendo en uno la cantidad de
comparaciones.
Sibienelalgoritmoplanteadofunciona,unalgoritmomseficiente,quesederivadel
anterioreselplantearunforinternoconlasiguienteestructura:(f=0f<4kf++)
Esdecirrestarleelvalordelcontadordelforexterno.
Programa:
importjava.util.Scanner
publicclassPruebaVector13{
privateScannerteclado
privateint[]sueldos
publicvoidcargar(){
teclado=newScanner(System.in)
sueldos=newint[5]
for(intf=0f<sueldos.lengthf++){
System.out.print("Ingreseelsueldo:")
sueldos[f]=teclado.nextInt()
}
}
publicvoidordenar(){
for(intk=0k<4k++){
for(intf=0f<4kf++){
if(sueldos[f]>sueldos[f+1]){
intaux
aux=sueldos[f]
sueldos[f]=sueldos[f+1]
sueldos[f+1]=aux
}
}
}
}
publicvoidimprimir(){
System.out.println("Sueldosordenadosdemenoramayo
for(intf=0f<sueldos.lengthf++){
System.out.println(sueldos[f])
http://www.javaya.com.ar/detalleconcepto.php?codigo=93&inicio=0
5/9
2/25/2016
Vectores(ordenamiento)
}
}
publicstaticvoidmain(String[]ar){
PruebaVector13pv=newPruebaVector13()
pv.cargar()
pv.ordenar()
pv.imprimir()
}
}
Tambin podemos ordenar vectores cuyas componentes sean de tipo String. Para
estonopodemosutilizareloperador>sinodebemosutilizarunmtododelaclase
String:
Stringcad1="juan";
Stringcad2="analia";
if(cad1.compareTo(cad2)>0)
{
System.out.println(cad1+"esmayoralfabticamenteque"+cad2);
}
Problema2:
Definir un vector donde almacenar los nombres de 5 paises. Confeccionar el
algoritmodeordenamientoalfabtico.
Programa:
importjava.util.Scanner
publicclassPruebaVector14{
privateScannerteclado
privateString[]paises
http://www.javaya.com.ar/detalleconcepto.php?codigo=93&inicio=0
6/9
2/25/2016
Vectores(ordenamiento)
publicvoidcargar(){
teclado=newScanner(System.in)
paises=newString[5]
for(intf=0f<paises.lengthf++){
System.out.print("Ingreseelnombredelpais:")
paises[f]=teclado.next()
}
}
publicvoidordenar(){
for(intk=0k<4k++){
for(intf=0f<4kf++){
if(paises[f].compareTo(paises[f+1])>0){
Stringaux
aux=paises[f]
paises[f]=paises[f+1]
paises[f+1]=aux
}
}
}
}
publicvoidimprimir(){
System.out.println("Paisesordenadosenformaalfabt
for(intf=0f<paises.lengthf++){
System.out.println(paises[f])
}
}
publicstaticvoidmain(String[]ar){
PruebaVector14pv=newPruebaVector14()
pv.cargar()
pv.ordenar()
pv.imprimir()
}
}
DefinimosunvectordetipoString:
privateString[]paises;
http://www.javaya.com.ar/detalleconcepto.php?codigo=93&inicio=0
7/9
2/25/2016
Vectores(ordenamiento)
Locreamosindicandoquealmacenarcincoelementos:
paises=newString[5];
Procedemosacargarelvector:
for(intf=0;f<paises.length;f++){
System.out.print("Ingreseelnombredelpais:");
paises[f]=teclado.next();
}
ParaelordenamientoutilizamoselmtodocompareToparaverificarsitenemosque
intercambiarlascomponentes:
if(paises[f].compareTo(paises[f+1])>0){
EnelcasoquesitenemosqueintercambiarlautilizamosunauxilirdetipoString:
Stringaux;
aux=paises[f];
paises[f]=paises[f+1];
paises[f+1]=aux;
Problemaspropuestos
1. Cargar un vector de n elementos de tipo entero. Ordenar posteriormente el
vector.
importjava.util.Scanner
publicclassPruebaVector15{
privateScannerteclado
privateint[]vec
publicvoidcargar(){
teclado=newScanner(System.in)
System.out.print("Cuantoselementostendrelvector:")
intcant
cant=teclado.nextInt()
vec=newint[cant]
for(intf=0f<vec.lengthf++){
System.out.print("Ingreseelemento:")
vec[f]=teclado.nextInt()
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=93&inicio=0
8/9
2/25/2016
Vectores(ordenamiento)
publicvoidordenar(){
for(intk=0k<vec.lengthk++){
for(intf=0f<vec.length1kf++){
if(vec[f]>vec[f+1]){
intaux
aux=vec[f]
vec[f]=vec[f+1]
vec[f+1]=aux
}
}
}
}
publicvoidimprimir(){
System.out.println("Vectorordenadosdemenoramayor.")
for(intf=0f<vec.lengthf++){
System.out.println(vec[f])
}
}
publicstaticvoidmain(String[]ar){
PruebaVector15pv=newPruebaVector15()
pv.cargar()
pv.ordenar()
pv.imprimir()
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=93&inicio=0
9/9
2/25/2016
Vectores(ordenamientoconvectoresparalelos)
Vectores(ordenamientoconvectores
paralelos)
Cuando se tienen vectores paralelos y se ordena uno de ellos hay que tener la
precaucindeintercambiarloselementosdelosvectoresparalelos.
Problema1:
Confeccionar un programa que permita cargar los nombres de 5 alumnos y sus
notasrespectivas.Luegoordenarlasnotasdemayoramenor.Imprimirlasnotasy
losnombresdelosalumnos.
Programa:
importjava.util.Scanner
publicclassPruebaVector16{
privateScannerteclado
privateString[]nombres
privateint[]notas
publicvoidcargar(){
teclado=newScanner(System.in)
nombres=newString[5]
notas=newint[5]
System.out.println("Cargadenombresynotas")
for(intf=0f<nombres.lengthf++){
System.out.print("Ingeseelnombredelalumno:")
nombres[f]=teclado.next()
System.out.print("Ingreselanotadelalumno:")
notas[f]=teclado.nextInt()
}
}
publicvoidordenar(){
for(intk=0k<notas.lengthk++){
for(intf=0f<notas.length1kf++){
if(notas[f]<notas[f+1]){
intauxnota
http://www.javaya.com.ar/detalleconcepto.php?codigo=94&inicio=20
1/5
2/25/2016
Vectores(ordenamientoconvectoresparalelos)
auxnota=notas[f]
notas[f]=notas[f+1]
notas[f+1]=auxnota
Stringauxnombre
auxnombre=nombres[f]
nombres[f]=nombres[f+1]
nombres[f+1]=auxnombre
}
}
}
}
publicvoidimprimir(){
System.out.println("Nombresdealumnosynotasdemay
for(intf=0f<notas.lengthf++){
System.out.println(nombres[f]+""+notas[f])
}
}
publicstaticvoidmain(String[]ar){
PruebaVector16pv=newPruebaVector16()
pv.cargar()
pv.ordenar()
pv.imprimir()
}
}
Definimoslosdosvectores:
privateString[]nombres;
privateint[]notas;
Creamoslosdosvectoresparalelosconcincoelementoscadauno:
nombres=newString[5];
notas=newint[5];
2/5
2/25/2016
Vectores(ordenamientoconvectoresparalelos)
for(intf=0;f<notas.length1k;f++){
if(notas[f]<notas[f+1]){
En el caso que la nota de la posicin 'f' sea menor a de la posicin siguiente 'f+1'
procedemosaintercambiarlasnotas:
intauxnota;
auxnota=notas[f];
notas[f]=notas[f+1];
notas[f+1]=auxnota;
Como vemos utilizamos dos auxiliares distintos porque los elementos de los dos
vectoressondedistintotipo(intyString)
Sideseamosordenaralfabticamentelacondicindependerdelvectornombres.
Problemaspropuestos
1. Cargar en un vector los nombres de 5 paises y en otro vector paralelo la
cantidad de habitantes del mismo. Ordenar alfabticamente e imprimir los
resultados. Por ltimo ordenar con respecto a la cantidad de habitantes (de
mayoramenor)eimprimirnuevamente.
importjava.util.Scanner
publicclassPruebaVector17{
privateScannerteclado
privateString[]paises
privateint[]habitantes
publicvoidcargar(){
teclado=newScanner(System.in)
paises=newString[5]
habitantes=newint[5]
System.out.println("Cargadepaisesyhabitantes")
for(intf=0f<paises.lengthf++){
System.out.print("Ingeseelnombredelpais:")
paises[f]=teclado.next()
System.out.print("Ingreselacantidaddehabitantes:")
http://www.javaya.com.ar/detalleconcepto.php?codigo=94&inicio=20
3/5
2/25/2016
Vectores(ordenamientoconvectoresparalelos)
habitantes[f]=teclado.nextInt()
}
}
publicvoidordenarPorNombres(){
for(intk=0k<paises.lengthk++){
for(intf=0f<paises.length1kf++){
if(paises[f].compareTo(paises[f+1])>0){
Stringauxpais
auxpais=paises[f]
paises[f]=paises[f+1]
paises[f+1]=auxpais
intauxhabitante
auxhabitante=habitantes[f]
habitantes[f]=habitantes[f+1]
habitantes[f+1]=auxhabitante
}
}
}
}
publicvoidordenarPorHabitantes(){
for(intk=0k<paises.lengthk++){
for(intf=0f<paises.length1kf++){
if(habitantes[f]<habitantes[f+1]){
Stringauxpais
auxpais=paises[f]
paises[f]=paises[f+1]
paises[f+1]=auxpais
intauxhabitante
auxhabitante=habitantes[f]
habitantes[f]=habitantes[f+1]
habitantes[f+1]=auxhabitante
}
}
}
}
publicvoidimprimir(){
for(intf=0f<paises.lengthf++){
System.out.println(paises[f]+""+habitantes[f])
}
}
publicstaticvoidmain(String[]ar){
PruebaVector17pv=newPruebaVector17()
pv.cargar()
pv.ordenarPorNombres()
System.out.println("Ordenadosalfabticamente")
pv.imprimir()
pv.ordenarPorHabitantes()
System.out.println("Ordenadosporcantidaddehabitnates")
pv.imprimir()
http://www.javaya.com.ar/detalleconcepto.php?codigo=94&inicio=20
4/5
2/25/2016
Vectores(ordenamientoconvectoresparalelos)
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=94&inicio=20
5/5
2/25/2016
Estructuradedatostipomatriz
Estructuradedatostipomatriz
Una matriz es una estructura de datos que permite almacenar un CONJUNTO de
datosdelMISMOtipo.
ConunniconombresedefinelamatrizypormediodeDOSsubndiceshacemos
referenciaacadaelementodelamisma(componente)
Hemosgraficadounamatrizde3filasy5columnas.Parahacerreferenciaacada
elemento debemos indicar primero la fila y luego la columna, por ejemplo en la
componente1,4sealmacenaelvalor97.
En este ejemplo almacenamos valores enteros. Todos los elementos de la matriz
debenserdelmismotipo(int,float,Stringetc.)
Lasfilasycolumnascomienzananumerarseapartirdecero,similaralosvectores.
Unamatrizselapuederepresentarporunconjuntodevectores.
Problema1:
Crear una matriz de 3 filas por 5 columnas con elementos de tipo int, cargar sus
componentesyluegoimprimirlas.
Programa:
importjava.util.Scanner
publicclassMatriz1{
privateScannerteclado
privateint[][]mat
publicvoidcargar(){
http://www.javaya.com.ar/detalleconcepto.php?codigo=95&inicio=20
1/7
2/25/2016
Estructuradedatostipomatriz
teclado=newScanner(System.in)
mat=newint[3][5]
for(intf=0f<3f++){
for(intc=0c<5c++){
System.out.print("Ingresecomponente:")
mat[f][c]=teclado.nextInt()
}
}
}
publicvoidimprimir(){
for(intf=0f<3f++){
for(intc=0c<5c++){
System.out.print(mat[f][c]+"")
}
System.out.println()
}
}
publicstaticvoidmain(String[]ar){
Matriz1ma=newMatriz1()
ma.cargar()
ma.imprimir()
}
}
Paradefinirunamatrizdebemosantecederleloscorchetesabiertosycerradosdos
veces:
privateint[][]mat;
DeestaformaelcompiladordeJavapuedediferenciarlosvectoresdelasmatrices.
Paracrearlamatriz,esdecirhacerlareservadeespaciodetodassuscomponentes
debemosutilizareloperadornewymediantedossubndicesindicamoslacantidad
defilasycolumnasquetendrlamatriz:
mat=newint[3][5];
2/7
2/25/2016
Estructuradedatostipomatriz
componentesytenemos3filas)
Lomscmodoesutilizarunforanidado,elprimerforqueincrementaelcontadorf
loutilizamospararecorrerlasfilasyelcontadorinternollamadocloutilizamospara
recorrerlascolumnas.
Cadavezqueserepiteenformacompletaelforinternosecargaunafilacompleta,
primerosecargalafilaceroenformacompleta,luegolafilaunoyfinalmentelafila
2.
Para imprimir la matriz de forma similar utilizamos dos for para acceder a cada
elementodelamatriz:
for(intf=0;f<3;f++){
for(intc=0;c<5;c++){
System.out.print(mat[f][c]+"");
}
System.out.println();
}
}
Cadavezqueseejecutatodaslasvueltasdelforinternotenemosenpantallauna
fila completa de la matriz, por eso pasamos a ejecutar un salto de lnea (con esto
logramosqueenpantallalosdatosaparezcanenformamatricial):
System.out.println();
Problema2:
Crearycargarunamatrizde4filaspor4columnas.Imprimirladiagonalprincipal.
x
x
x
x
http://www.javaya.com.ar/detalleconcepto.php?codigo=95&inicio=20
3/7
2/25/2016
Estructuradedatostipomatriz
Programa:
importjava.util.Scanner
publicclassMatriz2{
privateScannerteclado
privateint[][]mat
publicvoidcargar(){
teclado=newScanner(System.in)
mat=newint[4][4]
for(intf=0f<4f++){
for(intc=0c<4c++){
System.out.print("Ingresecomponente:")
mat[f][c]=teclado.nextInt()
}
}
}
publicvoidimprimirDiagonalPrincipal(){
for(intk=0k<4k++){
System.out.print(mat[k][k]+"")
}
}
publicstaticvoidmain(String[]ar){
Matriz2ma=newMatriz2()
ma.cargar()
ma.imprimirDiagonalPrincipal()
}
}
Ladefinicin,creacinycargadelamatriznovaranconelejemploanterior.
Paraimprimirladiagonalprincipaldelamatrizlomsconvenienteesutilizarunfor
queserepita4vecesydisponercomosubndicedichocontador(loselementosde
ladiagonalprincipalcoincidenlosvaloresdelafilaycolumna):
for(intk=0;k<4;k++){
System.out.print(mat[k][k]+"");
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=95&inicio=20
4/7
2/25/2016
Estructuradedatostipomatriz
Problema3:
Crearycargarunamatrizde3filaspor4columnas.Imprimirlaprimerfila.Imprimir
laltimafilaeimprimirlaprimercolumna.
Programa:
importjava.util.Scanner
publicclassMatriz3{
privateScannerteclado
privateint[][]mat
publicvoidcargar(){
teclado=newScanner(System.in)
mat=newint[3][4]
for(intf=0f<3f++){
for(intc=0c<4c++){
System.out.print("Ingresecomponente:")
mat[f][c]=teclado.nextInt()
}
}
}
publicvoidprimerFila(){
System.out.println("Primerfiladelamatriz:")
for(intc=0c<4c++){
System.out.println(mat[0][c])
}
}
publicvoidultimaFila(){
System.out.println("Ultimafiladelamatriz:")
for(intc=0c<4c++){
System.out.println(mat[2][c])
}
}
publicvoidprimerColumna(){
System.out.println("Primercolumna:")
for(intf=0f<3f++){
System.out.println(mat[f][0])
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=95&inicio=20
5/7
2/25/2016
Estructuradedatostipomatriz
publicstaticvoidmain(String[]ar){
Matriz3ma=newMatriz3()
ma.cargar()
ma.primerFila()
ma.ultimaFila()
ma.primerColumna()
}
}
Creamosunamatrizde3filasy4columnas:
mat=newint[3][4];
Luegodecargarlaelprimermtodoquecodificamoseselqueimprimimelaprimer
fila. Disponemos un for para recorrer las columnas, ya que la fila siempre ser la
cero.Comosoncuatroloselementosdelaprimerfilaelforserepiteestacantidad
deveces:
System.out.println("Primerfiladelamatriz:");
for(intc=0;c<4;c++){
System.out.println(mat[0][c]);
}
Paraimprimirlaltimafilaelalgoritmoessimilar,disponemosunforqueserepita4
veces y en el subndice de la fila disponemos el valor 2 (ya que la matriz tiene 3
filas):
System.out.println("Ultimafiladelamatriz:");
for(intc=0;c<4;c++){
System.out.println(mat[2][c]);
}
Paraimprimirlaprimercolumnaelfordeberepetirse3vecesyaquelamatriztiene3
filas.Dejamosconstanteelsubndicedelacolumnaconelvalorcero:
System.out.println("Primercolumna:");
for(intf=0;f<3;f++){
System.out.println(mat[f][0]);
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=95&inicio=20
6/7
2/25/2016
Estructuradedatostipomatriz
Problemaspropuestos
1. Crearunamatrizde2filasy5columnas.Realizarlacargadecomponentespor
columna (es decir primero ingresar toda la primer columna, luego la segunda
columnayassucesivamente)
Imprimirluegolamatriz.
importjava.util.Scanner
publicclassMatriz4{
privateScannerteclado
privateint[][]mat
publicvoidcargar(){
teclado=newScanner(System.in)
mat=newint[2][5]
System.out.println("Cargadelamatrizporcolumna:")
for(intc=0c<5c++){
for(intf=0f<2f++){
System.out.print("Ingresecomponente"+"delafila"+
mat[f][c]=teclado.nextInt()
}
}
}
publicvoidimprimir(){
for(intf=0f<2f++){
for(intc=0c<5c++){
System.out.print(mat[f][c]+"")
}
System.out.println()
}
}
publicstaticvoidmain(String[]ar){
Matriz4ma=newMatriz4()
ma.cargar()
ma.imprimir()
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=95&inicio=20
7/7
2/25/2016
Matrices(cantidaddefilasycolumnas)
Matrices(cantidaddefilasycolumnas)
Comohemosvistoparadefinirycrearlamatrizutilizamoslasiguientesintaxis:
int[][]mat;
Creacin:
mat=newint[3][4];
ComolasmatricessonobjetosenJavadisponemosporunladodelatributolength
quealmacenalacantidaddefilasdelamatriz:
System.out.println("Cantidaddefilasdelamatriz:"+mat.length);
Tambinpodemospreguntarleacadafiladelamatrizlacantidaddeelementosque
almacena:
System.out.println("Cantidaddeelementosdelaprimerfila:"+mat[0].length);
Problema1:
Crearunamatrizden*mfilas(cargarnymporteclado)Imprimirlamatrizcompleta
ylaltimafila.
Programa:
importjava.util.Scanner
publicclassMatriz5{
privateScannerteclado
privateint[][]mat
publicvoidcargar(){
teclado=newScanner(System.in)
System.out.print("Cuantasfilatienelamatriz:")
intfilas=teclado.nextInt()
http://www.javaya.com.ar/detalleconcepto.php?codigo=96&inicio=20
1/7
2/25/2016
Matrices(cantidaddefilasycolumnas)
System.out.print("Cuantascolumnastienelamatriz:")
intcolumnas=teclado.nextInt()
mat=newint[filas][columnas]
for(intf=0f<mat.lengthf++){
for(intc=0c<mat[f].lengthc++){
System.out.print("Ingresecomponente:")
mat[f][c]=teclado.nextInt()
}
}
}
publicvoidimprimir(){
for(intf=0f<mat.lengthf++){
for(intc=0c<mat[f].lengthc++){
System.out.print(mat[f][c]+"")
}
System.out.println()
}
}
publicvoidimprimirUltimaFila(){
System.out.println("Ultimafila")
for(intc=0c<mat[mat.length1].lengthc++){
System.out.print(mat[mat.length1][c]+"")
}
}
publicstaticvoidmain(String[]ar){
Matriz5ma=newMatriz5()
ma.cargar()
ma.imprimir()
ma.imprimirUltimaFila()
}
}
En este ejemplo cada vez que se ejecute el programa el tamao de la matriz lo
define el usuario, para ello ingresamos por teclado dos enteros y seguidamente
procedemosacrearlamatrizcondichosvalores:
System.out.print("Cuantasfilatienelamatriz:");
intfilas=teclado.nextInt();
System.out.print("Cuantascolumnastienelamatriz:");
http://www.javaya.com.ar/detalleconcepto.php?codigo=96&inicio=20
2/7
2/25/2016
Matrices(cantidaddefilasycolumnas)
intcolumnas=teclado.nextInt();
mat=newint[filas][columnas];
Paraimprimirlaltimafiladebemosdisponerunvalorfijoenelsubndicedelafila
(en este caso no podemos disponer un nmero fijo sino preguntarle a la misma
matrizlacantidaddefilasyrestarleunoyaquelasfilascomienzananumerarsea
partirdecero:mat[mat.length1][c])
Tambin la condicin del for debemos acceder al atributo length de la ltima fila
mat[mat.length1].length
for(intc=0;c<mat[mat.length1].length;c++){
System.out.print(mat[mat.length1][c]+"");
}
Problema2:
Crearunamatrizden*mfilas(cargarnymporteclado)Imprimirelmayorelemento
ylafilaycolumnadondesealmacena.
http://www.javaya.com.ar/detalleconcepto.php?codigo=96&inicio=20
3/7
2/25/2016
Matrices(cantidaddefilasycolumnas)
Programa:
importjava.util.Scanner
publicclassMatriz6{
privateScannerteclado
privateint[][]mat
publicvoidcargar(){
teclado=newScanner(System.in)
System.out.print("Cuantasfilatienelamatriz:")
intfilas=teclado.nextInt()
System.out.print("Cuantascolumnastienelamatriz:")
intcolumnas=teclado.nextInt()
mat=newint[filas][columnas]
for(intf=0f<mat.lengthf++){
for(intc=0c<mat[f].lengthc++){
System.out.print("Ingresecomponente:")
mat[f][c]=teclado.nextInt()
}
}
}
publicvoidimprimirMayor(){
intmayor=mat[0][0]
intfilamay=0
intcolumnamay=0
for(intf=0f<mat.lengthf++){
for(intc=0c<mat[f].lengthc++){
if(mat[f][c]>mayor){
mayor=mat[f][c]
filamay=f
columnamay=c
}
}
}
System.out.println("Elelementomayores:"+mayor)
System.out.println("Seencuentraenlafila:"+filamay
}
publicstaticvoidmain(String[]ar){
Matriz6ma=newMatriz6()
ma.cargar()
http://www.javaya.com.ar/detalleconcepto.php?codigo=96&inicio=20
4/7
2/25/2016
Matrices(cantidaddefilasycolumnas)
ma.imprimirMayor()
}
}
Para obtener el mayor elemento de la matriz y la fila y columna donde se ubica
debemos inicializar una variable mayor con el elemento de la fila cero y columna
cero(estolohacemossuponiendoqueendichaposicinsealmacenaelmayor):
intmayor=mat[0][0];
intfilamay=0;
intcolumnamay=0;
Luegomediantedosforrecorremostodosloselementosdelamatrizycadavezque
encontramosunelementomayoralactualprocedemosaactualizarlavariablemayor
ylaposicindondesealmacena:
for(intf=0;f<mat.length;f++){
for(intc=0;c<mat[f].length;c++){
if(mat[f][c]>mayor){
mayor=mat[f][c];
filamay=f;
columnamay=c;
}
}
}
Problemaspropuestos
1. Crearunamatrizden*mfilas(cargarnymporteclado)Intercambiarlaprimer
filaconlasegundo.Imprimirluegolamatriz.
2. Crear una matriz de n * m filas (cargar n y m por teclado) Imprimir los cuatro
valoresqueseencuentranenlosvrticesdelamisma(mat[0][0]etc.)
importjava.util.Scanner
publicclassMatriz7{
privateScannerteclado
privateint[][]mat
publicvoidcargar(){
teclado=newScanner(System.in)
System.out.print("Cuantasfilatienelamatriz:")
intfilas=teclado.nextInt()
http://www.javaya.com.ar/detalleconcepto.php?codigo=96&inicio=20
5/7
2/25/2016
Matrices(cantidaddefilasycolumnas)
System.out.print("Cuantascolumnastienelamatriz:")
intcolumnas=teclado.nextInt()
mat=newint[filas][columnas]
for(intf=0f<mat.lengthf++){
for(intc=0c<mat[f].lengthc++){
System.out.print("Ingresecomponente:")
mat[f][c]=teclado.nextInt()
}
}
}
publicvoidintercambiar(){
for(intc=0c<mat[0].lengthc++){
intaux=mat[0][c]
mat[0][c]=mat[1][c]
mat[1][c]=aux
}
}
publicvoidimprimir(){
for(intf=0f<mat.lengthf++){
for(intc=0c<mat[f].lengthc++){
System.out.print(mat[f][c]+"")
}
System.out.println()
}
}
publicstaticvoidmain(String[]ar){
Matriz7ma=newMatriz7()
ma.cargar()
ma.intercambiar()
ma.imprimir()
}
}
importjava.util.Scanner
publicclassMatriz8{
privateScannerteclado
privateint[][]mat
publicvoidcargar(){
teclado=newScanner(System.in)
System.out.print("Cuantasfilatienelamatriz:")
intfilas=teclado.nextInt()
System.out.print("Cuantascolumnastienelamatriz:")
intcolumnas=teclado.nextInt()
mat=newint[filas][columnas]
for(intf=0f<mat.lengthf++){
for(intc=0c<mat[f].lengthc++){
http://www.javaya.com.ar/detalleconcepto.php?codigo=96&inicio=20
6/7
2/25/2016
Matrices(cantidaddefilasycolumnas)
System.out.print("Ingresecomponente:")
mat[f][c]=teclado.nextInt()
}
}
}
publicvoidimprimirVertices(){
System.out.println("Vrticesuperiorizquierdo:")
System.out.println(mat[0][0])
System.out.println("Vrticesuperiorderecho:")
System.out.println(mat[0][mat[0].length1])
System.out.println("Vrticeinferiorizquierdo:")
System.out.println(mat[mat.length1][0])
System.out.println("Vrticeinferiorderecho:")
System.out.println(mat[mat.length1][mat[mat.length1].length1])
}
publicstaticvoidmain(String[]ar){
Matriz8ma=newMatriz8()
ma.cargar()
ma.imprimirVertices()
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=96&inicio=20
7/7
2/25/2016
Matricesyvectoresparalelos
Matricesyvectoresparalelos
Dependiendodelacomplejidaddelproblemapodemosnecesitarelempleodevectoresy
matricesparalelos.
Problema1:
Setienelasiguienteinformacin:
Nombresde4empleados.
Ingresosenconceptodesueldo,cobradoporcadaempleado,enlosltimos3meses.
Confeccionarelprogramapara:
a)Realizarlacargadelainformacinmencionada.
b) Generar un vector que contenga el ingreso acumulado en sueldos en los ltimos 3
mesesparacadaempleado.
c)Mostrarporpantallaeltotalpagadoensueldosatodoslosempleadosenlosltimos3
meses
d)Obtenerelnombredelempleadoquetuvoelmayoringresoacumulado
Programa:
importjava.util.Scanner
publicclassMatriz9{
privateScannerteclado
privateString[]empleados
privateint[][]sueldos
privateint[]sueldostot
http://www.javaya.com.ar/detalleconcepto.php?codigo=97&inicio=20
1/6
2/25/2016
Matricesyvectoresparalelos
publicvoidcargar(){
teclado=newScanner(System.in)
empleados=newString[4]
sueldos=newint[4][3]
for(intf=0f<empleados.lengthf++){
System.out.print("Ingreseelnombredelempleado:")
empleados[f]=teclado.next()
for(intc=0c<sueldos[f].lengthc++){
System.out.print("Ingresesueldo:")
sueldos[f][c]=teclado.nextInt()
}
}
}
publicvoidcalcularSumaSueldos(){
sueldostot=newint[4]
for(intf=0f<sueldos.lengthf++){
intsuma=0
for(intc=0c<sueldos[f].lengthc++){
suma=suma+sueldos[f][c]
}
sueldostot[f]=suma
}
}
publicvoidimprimirTotalPagado(){
System.out.println("Totaldesueldospagadosporemplead
for(intf=0f<sueldostot.lengthf++){
System.out.println(empleados[f]+""+sueldostot[f])
}
}
publicvoidempleadoMayorSueldo(){
intmay=sueldostot[0]
Stringnom=empleados[0]
for(intf=0f<sueldostot.lengthf++){
if(sueldostot[f]>may){
may=sueldostot[f]
nom=empleados[f]
}
}
System.out.println("Elempleadoconmayorsueldoes"+n
}
publicstaticvoidmain(String[]ar){
Matriz9ma=newMatriz9()
http://www.javaya.com.ar/detalleconcepto.php?codigo=97&inicio=20
2/6
2/25/2016
Matricesyvectoresparalelos
Matriz9ma=newMatriz9()
ma.cargar()
ma.calcularSumaSueldos()
ma.imprimirTotalPagado()
ma.empleadoMayorSueldo()
}
}
Para resolver este problema lo primero que hacemos es definir una matriz donde se
almacenarn los sueldos mensuales de cada empleado, un vector de tipo String donde
almacenaremoslosnombredecadaempleadoyfinalmentedefinimosunvectorparalelo
alamatrizdondealmacenaremoslasumadecadafiladelamatriz:
privateString[]empleados;
privateint[][]sueldos;
privateint[]sueldostot;
Elmtodosumarsueldoscreaelvectordondesealmacenarlasumadecadafiladela
matriz.Mediantedosforrecorremostodalamatrizysumamoscadafila:
sueldostot=newint[4];
for(intf=0;f<sueldos.length;f++){
intsuma=0;
for(intc=0;c<sueldos[f].length;c++){
suma=suma+sueldos[f][c];
}
sueldostot[f]=suma;
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=97&inicio=20
3/6
2/25/2016
Matricesyvectoresparalelos
ElmtodoimprimirTotalPagadotieneporobjetivomostrarlosdosvectores(eldenombre
delosempleadosyelquealmacenalasumadecadafiladelamatriz):
for(intf=0;f<sueldostot.length;f++){
System.out.println(empleados[f]+""+sueldostot[f]);
}
Porltimoparaobtenerelnombredelempleadoconmayorsueldoacumuladodebemos
inicializardosvariablesauxiliaresconelprimerelementodelvectordeempleadosyen
otraauxiliarguardamoslaprimercomponentedelvectorsueldostot:
intmay=sueldostot[0];
Stringnom=empleados[0];
for(intf=0;f<sueldostot.length;f++){
if(sueldostot[f]>may){
may=sueldostot[f];
nom=empleados[f];
}
}
System.out.println("Elempleadoconmayorsueldoes"+nom+"quetieneuns
Problemaspropuestos
1. Sedeseasaberlatemperaturamediatrimestraldecuatropaises.Paraellosetiene
comodatolastemperaturasmediasmensualesdedichospaises.
Se debe ingresar el nombre del pas y seguidamente las tres temperaturas medias
mensuales.
Seleccionarlasestructurasdedatosadecuadasparaelalmacenamientodelosdatos
enmemoria.
a Cargar por teclado los nombres de los paises y las temperaturas medias
mensuales.
bImprimirlosnombresdelaspaisesylastemperaturasmediasmensualesdelas
mismas.
cCalcularlatemperaturamediatrimestraldecadapas.
cImprimrlosnombresdelasprovinciasylastemperaturasmediastrimestrales.
bImprimirelnombredelaprovinciaconlatemperaturamediatrimestralmayor.
importjava.util.Scanner
publicclassMatriz10{
privateScannerteclado
privateString[]paises
privateint[][]tempmen
privateint[]temptri
publicvoidcargar(){
teclado=newScanner(System.in)
paises=newString[4]
http://www.javaya.com.ar/detalleconcepto.php?codigo=97&inicio=20
4/6
2/25/2016
Matricesyvectoresparalelos
tempmen=newint[4][3]
for(intf=0f<paises.lengthf++){
System.out.print("Ingreseelnombredelpas:")
paises[f]=teclado.next()
for(intc=0c<tempmen[f].lengthc++){
System.out.print("Ingresetemperaturamensual:")
tempmen[f][c]=teclado.nextInt()
}
}
}
publicvoidimprimirTempMensuales(){
for(intf=0f<paises.lengthf++){
System.out.print("Pais:"+paises[f]+":")
for(intc=0c<tempmen[f].lengthc++){
System.out.print(tempmen[f][c]+"")
}
System.out.println()
}
}
publicvoidcalcularTemperaturaTri(){
temptri=newint[4]
for(intf=0f<tempmen.lengthf++){
intsuma=0
for(intc=0c<tempmen[f].lengthc++){
suma=suma+tempmen[f][c]
}
temptri[f]=suma/3
}
}
publicvoidimprimirTempTrimestrales(){
System.out.println("Temperaturastrimestrales.")
for(intf=0f<paises.lengthf++){
System.out.println(paises[f]+""+temptri[f])
}
}
publicvoidpaisMayorTemperaturaTri(){
intmay=temptri[0]
Stringnom=paises[0]
for(intf=0f<paises.lengthf++){
if(temptri[f]>may){
may=temptri[f]
nom=paises[f]
}
}
System.out.println("Paiscontemperaturatrimestralmayores"+nom+"
}
publicstaticvoidmain(String[]ar){
Matriz10ma=newMatriz10()
ma.cargar()
ma.imprimirTempMensuales()
ma.calcularTemperaturaTri()
http://www.javaya.com.ar/detalleconcepto.php?codigo=97&inicio=20
5/6
2/25/2016
Matricesyvectoresparalelos
ma.calcularTemperaturaTri()
ma.imprimirTempTrimestrales()
ma.paisMayorTemperaturaTri()
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=97&inicio=20
6/6
2/25/2016
Matricesirregulares
Matricesirregulares
Javanospermitecrearmatricesirregulares.Sedicequeunamatrizesirregularsila
cantidad de elementos de cada fila vara. Luego podemos imaginar una matriz
irregular:
Como podemos ver la fila cero tiene reservado dos espacios, la fila uno reserva
cuatroespaciosylaltimafilareservaespacioparatrescomponentes.
Paracrearlamatrizirregulardelgrfico:
Ladeclaracineslamismaqueparamatricesregulares:
int[][]mat;
Primerocreamoslacantidaddefilasdejandovacoelespacioqueindicalacantidad
decolumnas:
mat=newint[3][];
Luegodebemosircreandocadafiladelamatrizindicandolacantidaddeelementos
delarespectivafila:
mat[0]=newint[2];
mat[1]=newint[4];
mat[2]=newint[3];
Luegolaformaparaaccederasuscomponentesessimilaralasmatricesregulares,
siempreteniendoencuentayvalidandoqueexistadichacomponente:
mat[0][0]=120;
http://www.javaya.com.ar/detalleconcepto.php?codigo=98&inicio=20
1/6
2/25/2016
Matricesirregulares
Darunerrorsiqueremoscargarlatercercomponentedelafilacero(estodebidoa
quenoexiste):
mat[0][2]=230;
Luegosiqueremossaberlacantidaddefilasquetienelamatriz:
Sytem.out.println(mat.length);
Siqueremossaberlacantidaddeelementosdeunadeterminadafila:
Sytem.out.println("Cantidaddeelementosdelafila0:"+mat[0].length);
Sytem.out.println("Cantidaddeelementosdelafila1:"+mat[1].length);
Sytem.out.println("Cantidaddeelementosdelafila2:"+mat[2].length);
Problema1:
Confeccionaremos un programa que permita crear una matriz irregular y luego
imprimirlamatrizenformacompleta.
Programa:
importjava.util.Scanner
publicclassMatrizIrregular1{
privateScannerteclado
privateint[][]mat
publicvoidcargar(){
teclado=newScanner(System.in)
System.out.print("Cuantasfilatienelamatriz:")
intfilas=teclado.nextInt()
mat=newint[filas][]
for(intf=0f<mat.lengthf++){
System.out.print("Cuantaselementostienelafila
intelementos=teclado.nextInt()
mat[f]=newint[elementos]
for(intc=0c<mat[f].lengthc++){
System.out.print("Ingresecomponente:")
mat[f][c]=teclado.nextInt()
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=98&inicio=20
2/6
2/25/2016
Matricesirregulares
}
}
publicvoidimprimir(){
for(intf=0f<mat.lengthf++){
for(intc=0c<mat[f].lengthc++){
System.out.print(mat[f][c]+"")
}
System.out.println()
}
}
publicstaticvoidmain(String[]ar){
MatrizIrregular1ma=newMatrizIrregular1()
ma.cargar()
ma.imprimir()
}
}
Primerocreamoslacantidaddefilasquetendrlamatriz(enloscorchetesparalas
columnasnodisponemosvalor):
System.out.print("Cuantasfilatienelamatriz:");
intfilas=teclado.nextInt();
mat=newint[filas][];
Dentrodelprimerforpedimosqueingreselacantidaddeelementosquetendrcada
filayutilizamoseloperadornewnuevamente,peroenestecasoseestncreando
cadafiladelamatriz(Javatrataacadafilacomounvector):
for(intf=0;f<mat.length;f++){
System.out.print("Cuantaselementostienelafila"+f+":");
intelementos=teclado.nextInt();
mat[f]=newint[elementos];
Dentrodelforinternohacemoslacargadelascomponentespropiamentedichode
lamatriz(podemosircargandocadafilaamedidaquelasvamoscreando):
for(intc=0;c<mat[f].length;c++){
System.out.print("Ingresecomponente:");
http://www.javaya.com.ar/detalleconcepto.php?codigo=98&inicio=20
3/6
2/25/2016
Matricesirregulares
mat[f][c]=teclado.nextInt();
}
Problemaspropuestos
1. Confeccionar una clase para administrar una matriz irregular de 5 filas y 1
columnalaprimerfila,2columnaslasegundafilayassucesivamentehasta5
columnaslaltimafila(crearlasinlaintervencindeloperador)
Realizarlacargaportecladoeimprimirposteriormente.
2. Confeccionar una clase para administrar los das que han faltado los 3
empleadosdeunaempresa.
Definir un vector de 3 elementos de tipo String para cargar los nombres y una
matriz irregular para cargar los das que han faltado cada empleado (cargar el
nmerodedaquefalt)
Cadafiladelamatrizrepresentanlosdasdecadaempleado.
Mostrarlosempleadosconlacantidaddeinasistencias.
Culempleadofaltmenosdas.
importjava.util.Scanner
publicclassMatrizIrregular2{
privateScannerteclado
privateint[][]mat
publicvoidcargar(){
teclado=newScanner(System.in)
mat=newint[5][]
for(intf=0f<mat.lengthf++){
mat[f]=newint[f+1]
for(intc=0c<mat[f].lengthc++){
System.out.print("Ingresecomponente:")
mat[f][c]=teclado.nextInt()
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=98&inicio=20
4/6
2/25/2016
Matricesirregulares
}
}
publicvoidimprimir(){
for(intf=0f<mat.lengthf++){
for(intc=0c<mat[f].lengthc++){
System.out.print(mat[f][c]+"")
}
System.out.println()
}
}
publicstaticvoidmain(String[]ar){
MatrizIrregular2ma=newMatrizIrregular2()
ma.cargar()
ma.imprimir()
}
}
importjava.util.Scanner
publicclassMatrizIrregular3{
privateScannerteclado
privateString[]nombres
privateint[][]dias
publicvoidcargar(){
teclado=newScanner(System.in)
nombres=newString[3]
dias=newint[3][]
for(intf=0f<nombres.lengthf++){
System.out.print("Ingreseelnombredelempleado:")
nombres[f]=teclado.next()
System.out.print("Cuantasdasfaltelempleado:")
intfaltas=teclado.nextInt()
dias[f]=newint[faltas]
for(intc=0c<dias[f].lengthc++){
System.out.print("Ingresenrodeda:")
dias[f][c]=teclado.nextInt()
}
}
}
publicvoidinasistencias(){
for(intf=0f<nombres.lengthf++){
System.out.println(nombres[f]+"falt"+dias[f].length+"
}
}
publicvoidempleadoMensosFaltas(){
intfaltas=dias[0].length
Stringnom=nombres[0]
http://www.javaya.com.ar/detalleconcepto.php?codigo=98&inicio=20
5/6
2/25/2016
Matricesirregulares
Stringnom=nombres[0]
for(intf=1f<dias.lengthf++){
if(dias[f].length<faltas){
faltas=dias[f].length
nom=nombres[f]
}
}
System.out.println("Elempleadoquefaltmenoses"+nom+"con"+f
}
publicstaticvoidmain(String[]ar){
MatrizIrregular3ma=newMatrizIrregular3()
ma.cargar()
ma.inasistencias()
ma.empleadoMensosFaltas()
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=98&inicio=20
6/6
2/25/2016
Constructordelaclase
Constructordelaclase
En Java podemos definir un mtodo que se ejecute inicialmente y en forma
automtica.Estemtodoselollamaconstructor.
Elconstructortienelassiguientescaractersticas:
Tieneelmismonombredelaclase.
Eselprimermtodoqueseejecuta.
Seejecutaenformaautomtica.
Nopuederetornardatos.
Seejecutaunanicavez.
Unconstructortieneporobjetivoinicializaratributos.
Problema1:
Se desea guardar los sueldos de 5 operarios en un vector. Realizar la creacin y
cargadelvectorenelconstructor.
Programa:
importjava.util.Scanner
publicclassOperarios{
privateScannerteclado
privateint[]sueldos
publicOperarios()
{
teclado=newScanner(System.in)
sueldos=newint[5]
for(intf=0f<5f++){
System.out.print("Ingresevalordelacomponente:
sueldos[f]=teclado.nextInt()
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=99&inicio=20
1/6
2/25/2016
Constructordelaclase
publicvoidimprimir(){
for(intf=0f<5f++){
System.out.println(sueldos[f])
}
}
publicstaticvoidmain(String[]ar){
Operariosop=newOperarios()
op.imprimir()
}
}
Como podemos ver es el mismo problema que resolvimos cuando vimos vectores.
Ladiferenciaesquehemossustituidoelmtodocargarconelconstructor:
publicOperarios()
{
teclado=newScanner(System.in);
sueldos=newint[5];
for(intf=0;f<5;f++){
System.out.print("Ingresevalordelacomponente:");
sueldos[f]=teclado.nextInt();
}
Cuandosecreaelobjetoopsellamaalmtodoconstructor.
Finalmentellamamosalmtodoimprimir:
op.imprimir();
http://www.javaya.com.ar/detalleconcepto.php?codigo=99&inicio=20
2/6
2/25/2016
Constructordelaclase
Problema2:
Plantear una clase llamada Alumno y definir como atributos su nombre y su edad.
Enelconstructorrealizarlacargadedatos.Definirotrosdosmtodosparaimprimir
losdatosingresadosyunmensajesiesmayoronodeedad(edad>=18)
Programa:
importjava.util.Scanner
publicclassAlumno{
privateScannerteclado
privateStringnombre
privateintedad
publicAlumno(){
teclado=newScanner(System.in)
System.out.print("Ingresenombre:")
nombre=teclado.next()
System.out.print("Ingreseedad:")
edad=teclado.nextInt()
}
publicvoidimprimir(){
System.out.println("Nombre:"+nombre)
System.out.println("Edad:"+edad)
}
publicvoidesMayorEdad(){
if(edad>=18){
System.out.print(nombre+"esmayordeedad.")
}else{
System.out.print(nombre+"noesmayordeedad.")
}
}
publicstaticvoidmain(String[]ar){
Alumnoalumno1=newAlumno()
alumno1.imprimir()
alumno1.esMayorEdad()
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=99&inicio=20
3/6
2/25/2016
Constructordelaclase
publicAlumno(){
teclado=newScanner(System.in);
System.out.print("Ingresenombre:");
nombre=teclado.next();
System.out.print("Ingreseedad:");
edad=teclado.nextInt();
}
Enlamainelconstructorsellamaenformaautomticacuandocreamosunobjeto
delaclaseAlumno:
publicstaticvoidmain(String[]ar){
Alumnoalumno1=newAlumno();
Los otros dos mtodos deben llamarse por su nombre y en el orden que
necesitemos:
alumno1.imprimir();
alumno1.esMayorEdad();
Problemaspropuestos
1. Confeccionarunaclasequerepresenteunempleado.Definircomoatributossu
nombre y su sueldo. En el constructor cargar los atributos y luego en otro
mtodo imprimir sus datos y por ltimo uno que imprima un mensaje si debe
pagarimpuestos(sielsueldosuperaa3000)
2. Implementar la clase operaciones. Se deben cargar dos valores enteros en el
constructor, calcular su suma, resta, multiplicacin y divisin, cada una en un
mtodo,imprimirdichosresultados.
importjava.util.Scanner
publicclassEmpleadoFabrica{
privateScannerteclado
Stringnombre
floatsueldo
http://www.javaya.com.ar/detalleconcepto.php?codigo=99&inicio=20
4/6
2/25/2016
Constructordelaclase
publicEmpleadoFabrica(){
teclado=newScanner(System.in)
System.out.print("Ingreseelnombredelempleado:")
nombre=teclado.next()
System.out.print("Ingresesusueldo:")
sueldo=teclado.nextFloat()
}
publicvoidpagaImpuestos(){
if(sueldo>3000){
System.out.print("Debeabonarimpuestos")
}else{
System.out.print("Nopagaimpuestos")
}
}
publicstaticvoidmain(String[]ar){
EmpleadoFabricaempleado1
empleado1=newEmpleadoFabrica()
empleado1.pagaImpuestos()
}
}
importjava.util.Scanner
publicclassOperacionesCalculo{
privateScannerteclado
intvalor1,valor2
publicOperacionesCalculo(){
teclado=newScanner(System.in)
System.out.print("Ingreseprimervalor:")
valor1=teclado.nextInt()
System.out.print("Ingresesegundovalor:")
valor2=teclado.nextInt()
}
publicvoidsumar(){
intsuma
suma=valor1+valor2
System.out.println("Lasumaes:"+suma)
}
publicvoidrestar(){
intresta
resta=valor1valor2
System.out.println("Larestaes:"+resta)
}
publicvoidmultiplicar(){
http://www.javaya.com.ar/detalleconcepto.php?codigo=99&inicio=20
5/6
2/25/2016
Constructordelaclase
intmultiplicacion
multiplicacion=valor1*valor2
System.out.println("Lamultiplicacines:"+multiplicacion)
}
publicvoiddividir(){
intdivision
division=valor1/valor2
System.out.println("Ladivisines:"+division)
}
publicstaticvoidmain(String[]ar){
OperacionesCalculoopera=newOperacionesCalculo()
opera.sumar()
opera.restar()
opera.multiplicar()
opera.dividir()
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=99&inicio=20
6/6
2/25/2016
ClaseString
ClaseString
La clase String est orientada a manejar cadenas de caracteres. Hasta este
momentohemosutilizadoalgunosmtodosdelaclaseString(equals,compareTo)
AhoraveremosotroconjuntodemtodosdeusocomndelaclaseString:
Mtodos
booleanequals(Strings1)
booleanequalsIgnoreCase(Strings1)
intcompareTo(Strings1)
charcharAt(intpos)
RetornauncaracterdelString,llegaalmtodolaposicindelcaracteraextraer.
intlength()
RetornalacantidaddecaracteresalmacenadosenelString.
http://www.javaya.com.ar/detalleconcepto.php?codigo=100&inicio=20
1/9
2/25/2016
ClaseString
Stringsubstring(intpos1,intpos2)
Retornaunsubstringapartirdelaposicinindicadaenelparmetropos1hasta
laposicinpos2sinincluirdichaposicin.
intindexOf(Strings1)
Retorna1sielStringquelepasamoscomoparmetronoestcontenidaenla
cadenadelobjetoquellamaalmtodo.Encasoqueseencuentrecontenidoel
Strings1retornalaposicindondecomienzaarepetirse.
StringtoUpperCase()
RetornaunStringconelcontenidoconvertidotodoamaysculas.
StringtoLowerCase()
RetornaunStringconelcontenidoconvertidotodoaminsculas.
Problema1:
Confeccionar una clase que solicite el ingreso de dos String y luego emplee los
mtodosmscomunesdelaclaseString.
Programa:
importjava.util.Scanner
publicclassCadena1{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in)
Stringcad1
Stringcad2
System.out.print("Ingreselaprimercadena:")
cad1=teclado.nextLine()
System.out.print("Ingreselasegundacadena:")
cad2=teclado.nextLine()
if(cad1.equals(cad2)==true){
System.out.println(cad1+"esexactamenteiguala
}else{
http://www.javaya.com.ar/detalleconcepto.php?codigo=100&inicio=20
2/9
2/25/2016
ClaseString
System.out.println(cad1+"noesexactamenteigual
}
if(cad1.equalsIgnoreCase(cad2)==true){
System.out.println(cad1+"esiguala"+cad2+"sin
}else{
System.out.println(cad1+"noesiguala"+cad2+"
}
if(cad1.compareTo(cad2)==0){
System.out.println(cad1+"esexactamenteiguala
}else{
if(cad1.compareTo(cad2)>0){
System.out.println(cad1+"esmayoralfabtic
}else{
System.out.println(cad2+"esmayoralfabtic
}
}
charcarac1=cad1.charAt(0)
System.out.println("Elprimercaracterde"+cad1+"es
intlargo=cad1.length()
System.out.println("EllargodelString"+cad1+"es"
Stringcad3=cad1.substring(0,3)
System.out.println("Losprimerostrescaracteresde"
intposi=cad1.indexOf(cad2)
if(posi==1){
System.out.println(cad2+"noestcontenidoen"+
}else{
System.out.println(cad2+"estcontenidoen"+cad
}
System.out.println(cad1+"convertidoamaysculases
System.out.println(cad1+"convertidoaminsculases
}
}
ParacargarlosdosStringutilizamosenestecasoelmtodonextLineparapermitir
ingresarespaciosenblanco:
System.out.print("Ingreselaprimercadena:");
cad1=teclado.nextLine();
System.out.print("Ingreselasegundacadena:");
cad2=teclado.nextLine();
http://www.javaya.com.ar/detalleconcepto.php?codigo=100&inicio=20
3/9
2/25/2016
ClaseString
Problemaspropuestos
1. Realizarunaclase,quepermitacargarunadireccindemailenelconstructor,
luegoenotromtodomostrarunmensajesicontieneelcaracter'@'.
2. CargarunStringportecladoeimplementarlossiguientesmtodos:
a)Imprimirlaprimeramitaddeloscaracteresdelacadena.
b)Imprimirelltimocaracter.
c)Imprimirloenformainversa.
d)ImprimircadacaracterdelStringseparadoconunguin.
e)Imprimirlacantidaddevocalesalmacenadas.
f)Implementarunmtodoqueverifiquesilacadenaseleeigualdeizquierdaa
derechatantocomodederechaaizquierda(ej.neuquenseleeigualenlasdos
direcciones)
3. Desarrollarunprogramaquesolicitelacargadeunaclave.Laclasedebetener
dosmtodosunoparalacargayotroquemuestresilaclaveeslacorrecta(la
claveacomparares"123abc")
4. Confeccionarunprogramaquepermitacargarlosnombresde5personasysus
mail,luegoimplementarlossiguientesmtodos:
a)Mostrarporpantallalosdatos.
b)Consultadelmailingresandosunombre.
c)Mostrarlosmailquenotienenelcarcter@.
5. Codifique un programa que permita cargar una oracin por teclado, luego
mostrarcadapalabraingresadaenunalneadistinta.
Porejemplosicargo:
Lamaanaestfra.
Debeaparecer:
La
maana
est
fra.
importjava.util.Scanner
publicclassCadena2{
privateScannerteclado
privateStringmail
publicCadena2(){
teclado=newScanner(System.in)
System.out.print("Ingreseunmail:")
mail=teclado.nextLine()
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=100&inicio=20
4/9
2/25/2016
ClaseString
publicvoidverificarArroba(){
booleanexiste=false
for(intf=0f<mail.length()f++){
if(mail.charAt(f)=='@'){
existe=true
}
}
if(existe==true){
System.out.println(mail+"contieneelcaracter@")
}else{
System.out.println(mail+"nocontieneelcaracter@")
}
}
publicstaticvoidmain(String[]ar){
Cadena2cad=newCadena2()
cad.verificarArroba()
}
}
importjava.util.Scanner
publicclassCadena3{
privateScannerteclado
privateStringcad
publicCadena3(){
teclado=newScanner(System.in)
System.out.print("Ingreseunacadena:")
cad=teclado.nextLine()
}
publicvoidprimerMitad(){
Stringparte
parte=cad.substring(0,cad.length()/2)
System.out.println("Primermitaddecaraceres:"+parte)
}
publicvoidultimoCaracter(){
charultimo=cad.charAt(cad.length()1)
System.out.println("Ultimocaracter:"+ultimo)
}
publicvoidformaInversa(){
System.out.println("Impresinenformainversa:")
for(intf=cad.length()1f>=0f){
System.out.print(cad.charAt(f))
}
System.out.println()
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=100&inicio=20
5/9
2/25/2016
ClaseString
publicvoidconGuion(){
System.out.println("Separadoporguiones:")
for(intf=0f<cad.length()f++){
System.out.print(cad.charAt(f)+"")
}
System.out.println()
}
publicvoidcantidadVocales(){
intcant=0
for(intf=0f<cad.length()f++){
if(cad.charAt(f)=='a'||cad.charAt(f)=='e'||
cad.charAt(f)=='i'||cad.charAt(f)=='o'||
cad.charAt(f)=='u'||cad.charAt(f)=='A'||
cad.charAt(f)=='E'||cad.charAt(f)=='I'||
cad.charAt(f)=='O'||cad.charAt(f)=='U'){
cant++
}
}
System.out.println("Cantidaddevocales:"+cant)
}
publicvoidesCapicua(){
intcant=0
for(intf=0f<cad.length()/2f++){
if(cad.charAt(f)==cad.charAt(cad.length()1f)){
cant++
}
}
if(cant==cad.length()/2){
System.out.println("Escapicalacadena"+cad)
}else{
System.out.println("Noescapicalacadena"+cad)
}
}
publicstaticvoidmain(String[]ar){
Cadena3cad=newCadena3()
cad.primerMitad()
cad.ultimoCaracter()
cad.formaInversa()
cad.conGuion()
cad.cantidadVocales()
cad.esCapicua()
}
}
importjava.util.Scanner
http://www.javaya.com.ar/detalleconcepto.php?codigo=100&inicio=20
6/9
2/25/2016
ClaseString
publicclassCadena4{
privateScannerteclado
privateStringclave
publicCadena4(){
teclado=newScanner(System.in)
System.out.print("Ingreseclave:")
clave=teclado.nextLine()
}
publicvoidverificarClave(){
if(clave.equals("123abc")==true){
System.out.println("Seingreslaclaveenformacorrecta")
}else{
System.out.println("Noseingreslaclaveenformacorrecta")
}
}
publicstaticvoidmain(String[]ar){
Cadena4cad=newCadena4()
cad.verificarClave()
}
}
importjava.util.Scanner
publicclassCadena5{
privateScannerteclado
privateString[]nombres
privateString[]mail
publicCadena5(){
teclado=newScanner(System.in)
nombres=newString[5]
mail=newString[5]
for(intf=0f<nombres.lengthf++){
System.out.print("Ingresenombre:")
nombres[f]=teclado.nextLine()
System.out.print("Ingresemail")
mail[f]=teclado.nextLine()
}
}
publicvoidlistar(){
for(intf=0f<nombres.lengthf++){
System.out.println(nombres[f]+""+mail[f])
}
}
publicvoidconsultaMail(){
http://www.javaya.com.ar/detalleconcepto.php?codigo=100&inicio=20
7/9
2/25/2016
ClaseString
Stringaux
System.out.print("Ingreseelnombredelapersona:")
aux=teclado.nextLine()
booleanexiste=false
for(intf=0f<nombres.lengthf++){
if(aux.equals(nombres[f])){
System.out.println("Maildelapersona:"+mail[f])
existe=true
}
}
if(existe==false){
System.out.println("Noexisteunapersonaconesenombre.")
}
}
publicvoidsinArroba(){
for(intf=0f<mail.lengthf++){
booleantiene=false
for(intk=0k<mail[f].length()k++){
if(mail[f].charAt(k)=='@'){
tiene=true
}
}
if(tiene==false){
System.out.println(mail[f]+"notiene@")
}
}
publicstaticvoidmain(String[]ar){
Cadena5cad=newCadena5()
cad.listar()
cad.consultaMail()
cad.sinArroba()
}
}
importjava.util.Scanner
publicclassCadena6{
privateScannerteclado
privateStringoracion
publicCadena6(){
teclado=newScanner(System.in)
System.out.print("Ingreseoracin:")
oracion=teclado.nextLine()
}
publicvoidimprimir(){
http://www.javaya.com.ar/detalleconcepto.php?codigo=100&inicio=20
8/9
2/25/2016
ClaseString
for(intf=0f<oracion.length()f++){
if(oracion.charAt(f)==''){
System.out.println()
}else{
System.out.print(oracion.charAt(f))
}
}
}
publicstaticvoidmain(String[]ar){
Cadena6cad=newCadena6()
cad.imprimir()
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=100&inicio=20
9/9
2/25/2016
Colaboracindeclases
Colaboracindeclases
Normalmenteunproblemaresueltoconlametodologadeprogramacinorientadaa
objetosnointervieneunasolaclase,sinoquehaymuchasclasesqueinteractany
secomunican.
Plantearemosunproblemaseparandolasactividadesendosclases.
Problema1:
Un banco tiene 3 clientes que pueden hacer depsitos y extracciones. Tambin el
bancorequierequealfinaldeldacalculelacantidaddedineroquehaydepositada.
Loprimeroquehacemosesidentificarlasclases:
PodemosidentificarlaclaseClienteylaclaseBanco.
Luegodebemosdefinirlosatributosylosmtodosdecadaclase:
Cliente
atributos
nombre
monto
mtodos
constructor
depositar
extraer
retornarMonto
Banco
atributos
3Cliente(3objetosdelaclaseCliente)
1Scanner(Parapoderhacerlaentradadedatosporteclado)
mtodos
constructor
operar
depositosTotales
CreamosunproyectoenEclipsellamado:Proyecto1ydentrodelproyectocreamos
dosclasesllamadas:ClienteyBanco.
Programa:
http://www.javaya.com.ar/detalleconcepto.php?codigo=101&inicio=20
1/10
2/25/2016
Colaboracindeclases
publicclassCliente{
privateStringnombre
privateintmonto
publicCliente(Stringnom){
nombre=nom
monto=0
}
publicvoiddepositar(intm){
monto=monto+m
}
publicvoidextraer(intm){
monto=montom
}
publicintretornarMonto(){
returnmonto
}
publicvoidimprimir(){
System.out.println(nombre+"tienedepositadolasuma
}
}
publicclassBanco{
privateClientecliente1,cliente2,cliente3
publicBanco(){
cliente1=newCliente("Juan")
cliente2=newCliente("Ana")
cliente3=newCliente("Pedro")
}
publicvoidoperar(){
cliente1.depositar(100)
cliente2.depositar(150)
cliente3.depositar(200)
http://www.javaya.com.ar/detalleconcepto.php?codigo=101&inicio=20
2/10
2/25/2016
Colaboracindeclases
cliente3.extraer(150)
}
publicvoiddepositosTotales()
{
intt=cliente1.retornarMonto()+cliente2.retornar
System.out.println("Eltotaldedineroenelbancoe
cliente1.imprimir()
cliente2.imprimir()
cliente3.imprimir()
}
publicstaticvoidmain(String[]ar){
Bancobanco1=newBanco()
banco1.operar()
banco1.depositosTotales()
}
}
Analicemoslaimplementacindelproblema.
Losatributosdeunaclasenormalmentesonprivadosparaquenosetengaacceso
directamentedesdeotraclase,losatributossonmodificadosporlosmtodosdela
mismaclase:
privateStringnombre;
privateintmonto;
Losmtodosdepositaryextraeractualizanelatributomontoconeldineroquellega
como parmetro (para simplificar el problema no hemos validado que cuando se
extraedineroelatributomontoquedeconunvalornegativo):
publicvoiddepositar(intm){
http://www.javaya.com.ar/detalleconcepto.php?codigo=101&inicio=20
3/10
2/25/2016
Colaboracindeclases
monto=monto+m;
}
publicvoidextraer(intm){
monto=montom;
}
ElmtodoretornarMontotieneporobjetivocomunicaralBancolacantidaddedinero
quetieneelcliente(recordemosquecomoelatributomontoesprivadodelaclase,
debemostenerunmtodoqueloretorne):
publicintretornarMonto(){
returnmonto;
}
Porltimoelmtodoimprimirmuestranombreyelmontodedinerodelcliente:
publicvoidimprimir(){
System.out.println(nombre+"tienedepositadolasumade"+monto);
}
Como podemos observar la clase Cliente no tiene funcin main. Entonces donde
definimosobjetosdelaclaseCliente?
LarespuestaaestapreguntaesqueenlaclaseBancodefinimostresobjetosdela
claseCliente.
VeamosahoralaclaseBancoquerequierelacolaboracindelaclaseCliente.
PrimerodefinimostresatributosdetipoCliente:
publicclassBanco{
privateClientecliente1,cliente2,cliente3;
En le constructor creamos los tres objetos (cada vez que creamos un objeto de la
claseClientedebemospasarasuconstructorelnombredelcliente,recordemosque
sumontodedepsitoseinicializaconcero):
publicBanco(){
cliente1=newCliente("Juan");
cliente2=newCliente("Ana");
cliente3=newCliente("Pedro");
http://www.javaya.com.ar/detalleconcepto.php?codigo=101&inicio=20
4/10
2/25/2016
Colaboracindeclases
El mtodo operar del banco (llamamos a los mtodos depositar y extraer de los
clientes):
publicvoidoperar(){
cliente1.depositar(100);
cliente2.depositar(150);
cliente3.depositar(200);
cliente3.extraer(150);
}
publicvoiddepositosTotales()
{
intt=cliente1.retornarMonto()+cliente2.retornarMonto()+cliente3
System.out.println("Eltotaldedineroenelbancoes:"+t);
cliente1.imprimir();
cliente2.imprimir();
cliente3.imprimir();
}
Por ltimo en la main definimos un objeto de la clase Banco (la clase Banco es la
claseprincipalennuestroproblema):
publicstaticvoidmain(String[]ar){
Bancobanco1=newBanco();
banco1.operar();
banco1.depositosTotales();
}
Problema2:
Plantear un programa que permita jugar a los dados. Las reglas de juego son: se
tirantresdadossilostressalenconelmismovalormostrarunmensajeque"gano",
sino"perdi".
Loprimeroquehacemosesidentificarlasclases:
PodemosidentificarlaclaseDadoylaclaseJuegoDeDados.
http://www.javaya.com.ar/detalleconcepto.php?codigo=101&inicio=20
5/10
2/25/2016
Colaboracindeclases
Luegolosatributosylosmtodosdecadaclase:
Dado
atributos
valor
mtodos
tirar
imprimir
retornarValor
JuegoDeDados
atributos
3Dado(3objetosdelaclaseDado)
mtodos
constructor
jugar
CreamosunproyectoenEclipsellamado:Proyecto2ydentrodelproyectocreamos
dosclasesllamadas:DadoyJuegoDeDados.
Programa:
publicclassDado{
privateintvalor
publicvoidtirar(){
valor=1+(int)(Math.random()*6)
}
publicvoidimprimir(){
System.out.println("Elvalordeldadoes:"+valor)
}
publicintretornarValor(){
returnvalor
}
}
publicclassJuegoDeDados{
privateDadodado1,dado2,dado3
http://www.javaya.com.ar/detalleconcepto.php?codigo=101&inicio=20
6/10
2/25/2016
Colaboracindeclases
publicJuegoDeDados(){
dado1=newDado()
dado2=newDado()
dado3=newDado()
publicvoidjugar(){
dado1.tirar()
dado1.imprimir()
dado2.tirar()
dado2.imprimir()
dado3.tirar()
dado3.imprimir()
if(dado1.retornarValor()==dado2.retornarValor()&&
dado1.retornarValor()==dado3.retornarValor()){
System.out.println("Gan")
}else{
System.out.println("Perdi")
}
publicstaticvoidmain(String[]ar){
JuegoDeDadosj=newJuegoDeDados()
j.jugar()
}
}
Laclasedadodefineelatributo"valor"dondealmacenamosunvaloraleatorioque
representaelnmeroquesalealtirarlo.
publicclassDado{
privateintvalor;
7/10
2/25/2016
Colaboracindeclases
valor=1+(int)(Math.random()*6);
}
Comovemoslesumamosunoyaqueelproductodelvaloraleatorioconseispuede
generarnmerosenterosentre0y5.
ElmtodoimprimirdelaclaseDadomuestraporpantallaelvalordeldado:
publicvoidimprimir(){
System.out.println("Elvalordeldadoes:"+valor);
}
Porltimoelmtodoqueretornaelvalordeldado(seutilizaenlaotraclaseparaver
silostresdadosgeneraronelmismovalor):
publicintretornarValor(){
returnvalor;
}
La clase JuegoDeDatos define tres atributos de la clase Dado (con esto decimos
quelaclaseDadocolaboraconlaclaseJuegoDeDados):
publicclassJuegoDeDados{
privateDadodado1,dado2,dado3;
EnelconstructorprocedemosacrearlostresobjetosdelaclaseDado:
publicJuegoDeDados(){
dado1=newDado();
dado2=newDado();
dado3=newDado();
}
Enelmtodojugarllamamosalmtodotirardecadadado,pedimosqueseimprima
elvalorgeneradoyfinalmenteprocedemosaverificarsiseganono:
publicvoidjugar(){
dado1.tirar();
dado1.imprimir();
dado2.tirar();
dado2.imprimir();
dado3.tirar();
dado3.imprimir();
http://www.javaya.com.ar/detalleconcepto.php?codigo=101&inicio=20
8/10
2/25/2016
Colaboracindeclases
if(dado1.retornarValor()==dado2.retornarValor()&&
dado1.retornarValor()==dado3.retornarValor()){
System.out.println("Gan");
}else{
System.out.println("Perdi");
}
En la main creamos solo un objeto de la clase principal (en este caso la clase
principaleselJuegoDeDados):
publicstaticvoidmain(String[]ar){
JuegoDeDadosj=newJuegoDeDados();
j.jugar();
}
Problemaspropuestos
1. PlantearunaclaseClubyotraclaseSocio.
La clase Socio debe tener los siguientes atributos privados: nombre y la
antigedadenelclub(enaos).Enelconstructorpedirlacargadelnombreysu
antigedad. La clase Club debe tener como atributos 3 objetos de la clase
Socio.Definirunaresponsabilidadparaimprimirelnombredelsocioconmayor
antigedadenelclub.
importjava.util.Scanner
publicclassSocio{
privateStringnombre
privateintantiguedad
publicSocio(Scannerteclado){
System.out.print("Ingreseelnombredelsocio:")
nombre=teclado.next()
System.out.print("Ingreselaantiguedad:")
antiguedad=teclado.nextInt()
}
publicvoidimprimir(){
System.out.println(nombre+"tieneunaantiguedadde"+antiguedad)
}
publicintretornarAntiguedad(){
returnantiguedad
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=101&inicio=20
9/10
2/25/2016
Colaboracindeclases
importjava.util.Scanner
publicclassClub{
privateSociosocio1,socio2,socio3
privateScannerteclado
publicClub(){
teclado=newScanner(System.in)
socio1=newSocio(teclado)
socio2=newSocio(teclado)
socio3=newSocio(teclado)
}
publicvoidmayorAntiguedad(){
System.out.print("Socioconmayorantiguedad:")
if(socio1.retornarAntiguedad()>socio2.retornarAntiguedad()&&
socio1.retornarAntiguedad()>socio3.retornarAntiguedad()){
socio1.imprimir()
}else{
if(socio2.retornarAntiguedad()>socio3.retornarAntiguedad()){
socio2.imprimir()
}else{
socio3.imprimir()
}
}
}
publicstaticvoidmain(String[]ar){
Clubclub1=newClub()
club1.mayorAntiguedad()
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=101&inicio=20
10/10
2/25/2016
Herencia
Herencia
Vimos en el concepto anterior que dos clases pueden estar relacionadas por la
colaboracin.AhoraveremosotrotipoderelacionesentreclasesqueeslaHerencia.
La herencia significa que se pueden crear nuevas clases partiendo de clases
existentes,quetendrtodaslosatributosylosmtodosdesu'superclase'o'clase
padre'yademsselepodrnaadirotrosatributosymtodospropios.
clasepadre
Clase de la que desciende o deriva una clase. Las clases hijas (descendientes)
heredan(incorporan)automticamentelosatributosymtodosdelalaclasepadre.
Subclase
Clasedesciendientedeotra.Heredaautomticamentelosatributosymtodosdesu
superclase. Es una especializacin de otra clase. Admiten la definicin de nuevos
atributosymtodosparaaumentarlaespecializacindelaclase.
Veamosalgunosejemplostericosdeherencia:
1)ImaginemoslaclaseVehculo.Quclasespodranderivardeella?
Vehiculo
ColectivoMotoAuto
FordKRenault9
Siemprehaciaabajoenlajerarquahayunaespecializacin(lassubclasesaaden
nuevosatributosymtodos.
2)ImaginemoslaclaseSoftware.Quclasespodranderivardeella?
Software
DeAplicacionDeBase
ProcesadorTextoPlanillaDeCalculoSistemaOperativ
http://www.javaya.com.ar/detalleconcepto.php?codigo=102&inicio=20
1/8
2/25/2016
Herencia
WordWordPerfectExcelLotus123LinuxWindow
Problema1:
Ahora plantearemos el primer problema utilizando herencia. Supongamos que
necesitamos implementar dos clases que llamaremos Suma y Resta. Cada clase
tiene como atributo valor1, valor2 y resultado. Los mtodos a definir son cargar1
(que inicializa el atributo valor1), carga2 (que inicializa el atributo valor2), operar
(queenelcasodelaclase"Suma"sumalosdosatributosyenelcasodelaclase
"Resta"haceladiferenciaentrevalor1yvalor2,yotromtodomostrarResultado.
Si analizamos ambas clases encontramos que muchos atributos y mtodos son
idnticos. En estos casos es bueno definir una clase padre que agrupe dichos
atributosyresponsabilidadescomunes.
http://www.javaya.com.ar/detalleconcepto.php?codigo=102&inicio=20
2/8
2/25/2016
Herencia
Larelacindeherenciaquepodemosdisponerparaesteproblemaes:
Operacion
SumaResta
SolamenteelmtodooperaresdistintoparalasclasesSumayResta(estohacequeno
lo podamos disponer en la clase Operacion), luego los mtodos cargar1, cargar2 y
mostrarResultadosonidnticosalasdosclases,estohacequepodamosdisponerlosen
laclaseOperacion.Lomismolosatributosvalor1,valor2yresultadosedefinirnenla
clasepadreOperacion.
Crearunproyectoyluegocrearcuatroclasesllamadas:Operacion,Suma,Restay
Prueba
Programa:
importjava.util.Scanner
publicclassOperacion{
protectedScannerteclado
protectedintvalor1
protectedintvalor2
protectedintresultado
publicOperacion(){
teclado=newScanner(System.in)
}
publicvoidcargar1(){
System.out.print("Ingreseelprimervalor:")
valor1=teclado.nextInt()
}
publicvoidcargar2(){
System.out.print("Ingreseelsegundovalor:")
valor2=teclado.nextInt()
}
publicvoidmostrarResultado(){
System.out.println(resultado)
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=102&inicio=20
3/8
2/25/2016
Herencia
publicclassSumaextendsOperacion{
voidoperar(){
resultado=valor1+valor2
}
}
publicclassRestaextendsOperacion{
publicvoidoperar(){
resultado=valor1valor2
}
}
publicclassPrueba{
publicstaticvoidmain(String[]ar){
Sumasuma1=newSuma()
suma1.cargar1()
suma1.cargar2()
suma1.operar()
System.out.print("Elresultadodelasumaes:")
suma1.mostrarResultado()
Restaresta1=newResta()
resta1.cargar1()
resta1.cargar2()
resta1.operar()
System.out.print("Elresultadodelarestaes:")
resta1.mostrarResultado()
}
}
LaclaseOperacindefineloscuatroatributos:
importjava.util.Scanner;
publicclassOperacion{
http://www.javaya.com.ar/detalleconcepto.php?codigo=102&inicio=20
4/8
2/25/2016
Herencia
protectedScannerteclado;
protectedintvalor1;
protectedintvalor2;
protectedintresultado;
Ya veremos que definimos los atributos con este nuevo modificador de acceso
(protected) para que la subclase tenga acceso a dichos atributos. Si los definimos
privatelassubclasesnopuedenaccederadichosatributos.
LosmtodosdelaclaseOperacionson:
publicOperacion(){
teclado=newScanner(System.in);
}
publicvoidcargar1(){
System.out.print("Ingreseelprimervalor:");
valor1=teclado.nextInt();
}
publicvoidcargar2(){
System.out.print("Ingreseelsegundovalor:");
valor2=teclado.nextInt();
}
publicvoidmostrarResultado(){
System.out.println(resultado);
}
Ahoraveamoscomoeslasintaxisparaindicarqueunaclaseheredadeotra:
publicclassSumaextendsOperacion{
El mtodo operar puede acceder a los atributos heredados (siempre y cuando los
http://www.javaya.com.ar/detalleconcepto.php?codigo=102&inicio=20
5/8
2/25/2016
Herencia
Podemos llamar tanto al mtodo propio de la clase Suma "operar()" como a los
mtodos heredados. Quien utilice la clase Suma solo debe conocer que mtodos
pblicostiene(independientementequepertenezcanalaclaseSumaoaunaclase
superior)
LalgicaessimilarparadeclararlaclaseResta.
La clase Operacin agrupa en este caso un conjunto de atributos y mtodos
comunesaunconjuntodesubclases(Suma,Resta).Notienesentidodefinirobjetos
delaclaseOperacion.
El planteo de jerarquas de clases es una tarea compleja que requiere un perfecto
entendimientodetodaslasclasesqueintervienenenunproblema,cualessonsus
atributosyresponsabilidades.
Problemaspropuestos
1. ConfeccionarunaclasePersonaquetengacomoatributoselnombreylaedad.
Definir como responsabilidades un mtodo que cargue los datos personales y
otroquelosimprima.
PlantearunasegundaclaseEmpleadoqueherededelaclasePersona.Aadir
http://www.javaya.com.ar/detalleconcepto.php?codigo=102&inicio=20
6/8
2/25/2016
Herencia
unatributosueldoylosmtodosdecargarelsueldoeimprimirsusueldo.
DefinirunobjetodelaclasePersonayllamarasusmtodos.Tambincrearun
objetodelaclaseEmpleadoyllamarasusmtodos.
importjava.util.Scanner
publicclassPersona{
protectedScannerteclado
protectedStringnombre
protectedintedad
publicPersona(){
teclado=newScanner(System.in)
}
publicvoidcargarDatosPersonales(){
System.out.print("Ingreseelnombre:")
nombre=teclado.next()
System.out.print("Ingreseedad:")
edad=teclado.nextInt()
}
publicvoidimprimirDatosPersonales(){
System.out.println("Nombre:"+nombre)
System.out.println("Edad:"+edad)
}
}
importjava.util.Scanner
publicclassEmpleadoextendsPersona{
protectedintsueldo
publicvoidcargarSueldo(){
System.out.print("Ingresesusueldo:")
sueldo=teclado.nextInt()
}
publicvoidimprimirSueldo(){
System.out.println("Elsueldoes:"+sueldo)
}
}
publicclassPrueba{
publicstaticvoidmain(String[]ar){
Personapersona1=newPersona()
persona1.cargarDatosPersonales()
Empleadoempleado1=newEmpleado()
empleado1.cargarDatosPersonales()
empleado1.cargarSueldo()
http://www.javaya.com.ar/detalleconcepto.php?codigo=102&inicio=20
7/8
2/25/2016
Herencia
persona1.imprimirDatosPersonales()
empleado1.imprimirDatosPersonales()
empleado1.imprimirSueldo()
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=102&inicio=20
8/8
2/25/2016
Interfacesvisuales(componentesSwing)
Interfacesvisuales(componentesSwing)
Hasta ahora hemos resuelto todos los algoritmos haciendo las salidas a travs de
unaconsolaenmodotexto.Larealidadqueesmuycomnlanecesidaddehacerla
entradaysalidadedatosmedianteunainterfazmsamigablesconelusuario.
En Java existen varias libreras de clase para implementar interfaces visuales.
UtilizaremoslascomponentesSwing.
Problema1:
Confeccionarelprograma"HolaMundo"utilizandounainterfazgrficadeusuario.
Programa:
importjavax.swing.*
publicclassFormularioextendsJFrame{
privateJLabellabel1
publicFormulario(){
setLayout(null)
label1=newJLabel("HolaMundo.")
label1.setBounds(10,20,200,30)
add(label1)
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(10,10,400,300)
formulario1.setVisible(true)
}
}
HastaahorahabamosutilizadolaclaseScannerparahacerlaentradadedatospor
teclado.Dichaclasedebemosimportarlaennuestroprogramaconlasintaxis:
importjava.util.Scanner;
Otrasintaxisparaimportarlaes:
http://www.javaya.com.ar/detalleconcepto.php?codigo=103&inicio=20
1/4
2/25/2016
Interfacesvisuales(componentesSwing)
importjava.util.*;
Sidisponemosun*indicamosqueimportetodaslasclasesdelpaquetejava.util.
Ahora bien las componentes Swing hay que importarlas del paquete javax.swing.
Cuandodebemosimportarvariascomponentesdeunpaqueteesmsconveniente
utilizarelasteriscoqueindicarcadaclaseaimportar:
importjavax.swing.JFrame;
importjavax.swing.JLabel;
Enlugardelasdoslneasanterioresesmejorutilizarlasintaxis:
importjavax.swing.*;
ConlasintaxisanteriorestamosindicandoquequelaclaseFormularioheredatodos
losmtodosypropiedadesdelaclaseJFrame.
Para mostrar un texto dentro de una ventana necesitamos requerir la colaboracin
delaclaseJLabel(quetieneporobjetivomostraruntextodentrodeunJFrame)
DefinimosluegocomoatributodelaclaseunobjetodelaclaseJLabel:
privateJLabellabel1;
LuegotenemosquecrearelobjetodelaclaseJLabelypasarlecomoparmetroal
http://www.javaya.com.ar/detalleconcepto.php?codigo=103&inicio=20
2/4
2/25/2016
Interfacesvisuales(componentesSwing)
constructoreltextoamostrar:
label1=newJLabel("HolaMundo.");
UbicamosalobjetodelaclaseJLabelllamandoalmtodosetBounds,esterequiere
comoparmetroslacolumna,fila,anchoyaltodelJLabel.Finalmentellamamosal
mtodoadd(metodoheredadodelaclaseJFrame)quetienecomoobjetivoaadir
elcontrolJLabelalcontrolJFrame.
label1=newJLabel("HolaMundo.");
label1.setBounds(10,20,200,30);
add(label1);
}
Cuandoejecutamosnuestroproyectotenemoscomoresultadounaventanasimilara
esta:
http://www.javaya.com.ar/detalleconcepto.php?codigo=103&inicio=20
3/4
2/25/2016
SwingJFrame
SwingJFrame
La componente bsica que requerimos cada vez que implementamos una interfaz
visualconlalibraraSwingeslaclaseJFrame.EstaclaseencapsulaunaVentana
clsica de cualquier sistema operativo con entorno grfico (Windows, OS X, Linux
etc.)
Hemos dicho que esta clase se encuentra en el paquete javax.swing y como
generalmente utilizamos varias clases de este paquete luego para importarla
utilizamoslasintaxis:
importjavax.swing.*;
PodemoshacerunaaplicacinmnimaconlaclaseJFrame:
importjavax.swing.JFrame;
publicclassFormulario{
publicstaticvoidmain(String[]ar){
JFramef=newJFrame();
f.setBounds(10,10,300,200);
f.setVisible(true);
}
}
ComovemosimportamoslaclaseJFramedelpaquetejavax.swing:
importjavax.swing.JFrame;
PeroestaformadetrabajarconlaclaseJFrameesdepocautilidadyaqueraravez
http://www.javaya.com.ar/detalleconcepto.php?codigo=104&inicio=20
1/3
2/25/2016
SwingJFrame
necesitemosimplementarunaaplicacinquemuestreunaventanavaca.
LomscorrectoesplantearunaclasequeherededelaclaseJFrameyextiendasus
responsabilidadesagregandobotones,etiquetas,editoresdelneaetc.
Entonceslaestructurabsicaqueemplearemosparacrearunainterfazvisualser:
Programa:
importjavax.swing.*
publicclassFormularioextendsJFrame{
publicFormulario(){
setLayout(null)
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(10,20,400,300)
formulario1.setVisible(true)
}
}
ImportamoselpaquetedondeseencuentralaclaseJFrame:
importjavax.swing.*;
PlanteamosunaclasequeherededelaclaseJFrame:
publicclassFormularioextendsJFrame{
Enelconstructorindicamosqueubicaremosloscontrolesvisualesconcoordenadas
absolutas mediante la desactivacin del Layout heredado (ms adelante veremos
otrasformasdeubicarloscontrolesvisualesdentrodelJFrame):
publicFormulario(){
setLayout(null);
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=104&inicio=20
2/3
2/25/2016
SwingJFrame
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario();
formulario1.setBounds(10,20,400,300);
formulario1.setVisible(true);
}
ElmtodosetBoundsubicaelJFrame(laventana)enlacolumna10,fila20conun
anchode400pxelesyunaltode300.
DebemosllamaralmtodosetVisibleypasarleelvalortrueparaquesehagavisible
laventana.
Problemaspropuestos
1. Crear una ventana de 1024 pxeles por 800 pxeles. Luego no permitir que el
operadormodifiqueeltamaodelaventana.Sabiendoquehacemosvisibleal
JFramellamandolamtodosetVisiblepasandoelvalortrue,existeotromtodo
llamado setResizable que tambin requiere como parmetro un valor true o
false.
importjavax.swing.*
publicclassFormularioextendsJFrame{
Formulario(){
setLayout(null)
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,1024,800)
formulario1.setResizable(false)
formulario1.setVisible(true)
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=104&inicio=20
3/3
2/25/2016
SwingJLabel
SwingJLabel
VeamoslasegundacomponentedelalibreraswingllamadaJLabel.
LaclaseJLabelnospermitemostrarbsicamenteuntexto.
Problema1:
Confeccionar una ventana que muestre el nombre de un programa en la parte
superiorysunmerodeversinenlaparteinferior.Nopermitirmodificareltamao
delaventanaentiempodeejecucin.
Programa:
importjavax.swing.*
publicclassFormularioextendsJFrame{
privateJLabellabel1,label2
publicFormulario(){
setLayout(null)
label1=newJLabel("SistemadeFacturacin.")
label1.setBounds(10,20,300,30)
add(label1)
label2=newJLabel("Vesion1.0")
label2.setBounds(10,100,100,30)
add(label2)
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
http://www.javaya.com.ar/detalleconcepto.php?codigo=105&inicio=20
1/3
2/25/2016
SwingJLabel
formulario1.setBounds(0,0,300,200)
formulario1.setResizable(false)
formulario1.setVisible(true)
}
}
Importamoselpaquetejavax.swingdondeseencuentrandefinidaslasclaseJFrame
yJLabel:
importjavax.swing.*;
HeredamosdelaclasedeJFrame:
publicclassFormularioextendsJFrame{
DefinimosdosatributosdelaclaseJLabel:
privateJLabellabel1,label2;
2/3
2/25/2016
SwingJLabel
Formularioformulario1=newFormulario();
formulario1.setBounds(0,0,300,200);
formulario1.setResizable(false);
formulario1.setVisible(true);
}
Problemaspropuestos
1. Crear tres objetos de la clase JLabel, ubicarlos uno debajo de otro y mostrar
nombresdecolores.
importjavax.swing.*
publicclassFormularioextendsJFrame{
privateJLabellabel1,label2,label3
publicFormulario(){
setLayout(null)
label1=newJLabel("Rojo")
label1.setBounds(10,20,100,30)
add(label1)
label2=newJLabel("Verde")
label2.setBounds(10,60,100,30)
add(label2)
label3=newJLabel("Azul")
label3.setBounds(10,100,100,30)
add(label3)
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,300,200)
formulario1.setVisible(true)
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=105&inicio=20
3/3
2/25/2016
SwingJButton
SwingJButton
El tercer control visual de uso muy comn es el que provee la clase JButton. Este
controlvisualmuestraunbotn.
ElprocesoparaaadirbotonesauncontrolJFrameessimilaraaadircontrolesde
tipoJLabel.
Ahoraveremoslacapturadeeventosconloscontrolesvisuales.Unodeloseventos
mscomunesescuandohacemosclicsobreunbotn.
Java implementa el concepto de interfaces para poder llamar a mtodos de una
claseexistenteaunaclasedesarrolladapornosotros.
Problema1:
Confeccionar una ventana que muestre un botn. Cuando se presione finalizar la
ejecucindelprogramaJava.
Programa:
importjavax.swing.*
importjava.awt.event.*
http://www.javaya.com.ar/detalleconcepto.php?codigo=106&inicio=20
1/7
2/25/2016
SwingJButton
publicclassFormularioextendsJFrameimplementsActionListe
JButtonboton1
publicFormulario(){
setLayout(null)
boton1=newJButton("Finalizar")
boton1.setBounds(300,250,100,30)
add(boton1)
boton1.addActionListener(this)
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
System.exit(0)
}
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,450,350)
formulario1.setVisible(true)
}
}
LamecnicaparaatraparelclicdelobjetodelaclaseJButtonsehacemediantela
implementacin de una interface. Una interface es un protocolo que permite la
comunicacin entre dos clases. Una interface contiene uno o ms cabecera de
mtodos,peronosuimplementacin.PorejemplolainterfaceActionListenertienela
siguienteestructura:
interfaceActionListener{
publicvoidactionPerformed(ActionEvente){
}
LuegolasclasesqueimplementenlainterfaceActionListenerdebernespecificarel
algortmodelmtodoactionPerformed.
Mediante el concepto de interfaces podemos hacer que desde la clase JButton se
puedellamaraunmtodoqueimplementamosennuestraclase.
Paraindicarqueunaclaseimplementarunainterfacelohacemosenladeclaracin
delaclaseconlasintaxis:
http://www.javaya.com.ar/detalleconcepto.php?codigo=106&inicio=20
2/7
2/25/2016
SwingJButton
publicclassFormularioextendsJFrameimplementsActionListener{
EsdecirquecadavezquesepresionaelbotndesdelaclaseJButtonsellamaal
mtodoactionPerformedyrecibecomoparmetrounobjetodelaclaseActionEvent.
EnelmtodoactionPerformedmedianteelaccesoalmtodogetSource()delobjeto
quellegacomoparmetropodemosanalizarquebotnsepresion:
http://www.javaya.com.ar/detalleconcepto.php?codigo=106&inicio=20
3/7
2/25/2016
SwingJButton
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
System.exit(0);
}
}
Sisepresionnelboton1luegoelifseverificaverdaderoyporlotantollamandoal
mtodoexitdelaclaseSystemsefinalizalaejecucindelprograma.
Lamainnovaraennadaconrespectoaproblemasanteriores.
Problema2:
Confeccionar una ventana que contenga tres objetos de la clase JButton con las
etiquetas "1", "2" y "3". Al presionarse cambiar el ttulo del JFrame indicando cul
botnsepresion.
Programa:
importjavax.swing.*
importjava.awt.event.*
publicclassFormularioextendsJFrameimplementsActionListe
privateJButtonboton1,boton2,boton3
publicFormulario(){
setLayout(null)
boton1=newJButton("1")
boton1.setBounds(10,100,90,30)
add(boton1)
boton1.addActionListener(this)
boton2=newJButton("2")
boton2.setBounds(110,100,90,30)
add(boton2)
http://www.javaya.com.ar/detalleconcepto.php?codigo=106&inicio=20
4/7
2/25/2016
SwingJButton
boton2.addActionListener(this)
boton3=newJButton("3")
boton3.setBounds(210,100,90,30)
add(boton3)
boton3.addActionListener(this)
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
setTitle("boton1")
}
if(e.getSource()==boton2){
setTitle("boton2")
}
if(e.getSource()==boton3){
setTitle("boton3")
}
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,350,200)
formulario1.setVisible(true)
}
}
Debemosdeclarar3objetosdelaclaseJButton:
privateJButtonboton1,boton2,boton3;
EnelconstructorcreamoslostresobjetosdelaclaseJButtonylosubicamosdentro
delcontrolJFrame(tambinllamamosalmtodoaddActionListenerparaenviarlela
direccindelobjetodelaclaseFormulario):
publicFormulario(){
setLayout(null);
boton1=newJButton("1");
boton1.setBounds(10,100,90,30);
add(boton1);
boton1.addActionListener(this);
boton2=newJButton("2");
boton2.setBounds(110,100,90,30);
http://www.javaya.com.ar/detalleconcepto.php?codigo=106&inicio=20
5/7
2/25/2016
SwingJButton
add(boton2);
boton2.addActionListener(this);
boton3=newJButton("3");
boton3.setBounds(210,100,90,30);
add(boton3);
boton3.addActionListener(this);
}
SegnelbotnpresionadollamamosalmtodosetTitlequesetratadeunmtodo
heredadodelaclaseJFrameyquetieneporobjetivomostrarunStringenelttulo
delaventana.
Problemaspropuestos
1. DisponerdosobjetosdelaclaseJButtonconlasetiquetas:"varn"y"mujer",al
presionarse mostrar en la barra de ttulos del JFrame la etiqueta del botn
presionado.
importjavax.swing.*
importjava.awt.event.*
publicclassFormularioextendsJFrameimplementsActionListener{
privateJButtonboton1,boton2
publicFormulario(){
setLayout(null)
boton1=newJButton("Varn")
boton1.setBounds(10,10,100,30)
boton1.addActionListener(this)
add(boton1)
boton2=newJButton("Mujer")
boton2.setBounds(10,70,100,30)
boton2.addActionListener(this)
add(boton2)
http://www.javaya.com.ar/detalleconcepto.php?codigo=106&inicio=20
6/7
2/25/2016
SwingJButton
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
setTitle("Varn")
}
if(e.getSource()==boton2){
setTitle("Mujer")
}
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,130,140)
formulario1.setVisible(true)
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=106&inicio=20
7/7
2/25/2016
SwingJTextField
SwingJTextField
As como podramos decir que el control JLabel remplaza a la salida estndar
System.out.print,elcontrolJTextFieldcumplelafuncindelaclaseScannerparala
entradadedatos.
El control JTextField permite al operador del programa ingresar una cadena de
caracteresporteclado.
Problema1:
Confeccionarunprogramaquepermitaingresarelnombredeusuarioycuandose
presioneunbotnmostrarelvaloringresadoenlabarradettulosdelJFrame.
Programa:
importjavax.swing.*
importjava.awt.event.*
publicclassFormularioextendsJFrameimplementsActionListe
privateJTextFieldtextfield1
privateJLabellabel1
privateJButtonboton1
publicFormulario(){
setLayout(null)
label1=newJLabel("Usuario:")
label1.setBounds(10,10,100,30)
add(label1)
textfield1=newJTextField()
textfield1.setBounds(120,10,150,20)
add(textfield1)
boton1=newJButton("Aceptar")
http://www.javaya.com.ar/detalleconcepto.php?codigo=107&inicio=20
1/6
2/25/2016
SwingJTextField
boton1.setBounds(10,80,100,30)
add(boton1)
boton1.addActionListener(this)
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
Stringcad=textfield1.getText()
setTitle(cad)
}
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,300,150)
formulario1.setVisible(true)
}
}
Definimoslostresobjetosquecolaboranconnuestraaplicacin:
publicclassFormularioextendsJFrameimplementsActionListener{
privateJTextFieldtextfield1;
privateJLabellabel1;
privateJButtonboton1;
Enelconstructorcreamoslostresobjetosylosubicamos:
publicFormulario(){
setLayout(null);
label1=newJLabel("Usuario:");
label1.setBounds(10,10,100,30);
add(label1);
textfield1=newJTextField();
textfield1.setBounds(120,10,150,20);
add(textfield1);
boton1=newJButton("Aceptar");
boton1.setBounds(10,80,100,30);
add(boton1);
boton1.addActionListener(this);
}
EnelmtodoactionPerformedseverificasisepresionelobjetoJButton,encaso
http://www.javaya.com.ar/detalleconcepto.php?codigo=107&inicio=20
2/6
2/25/2016
SwingJTextField
afirmativoextraemoselcontenidodelcontrolJTextFieldmedianteelmtodogetText:
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
Stringcad=textfield1.getText();
setTitle(cad);
}
}
EnlavariableauxiliarcadalmacenamostemporalmenteelcontenidodelJTextField
yseguidamenteactualizamoselttulodelcontrolJFrame.
Problema2:
Confeccionar un programa que permita ingresar dos nmeros en controles de tipo
JTextField,luegosumarlosdosvaloresingresadosymostrarlasumaenlabarradel
ttulodelcontrolJFrame.
Programa:
importjavax.swing.*
importjava.awt.event.*
publicclassFormularioextendsJFrameimplementsActionListe
privateJTextFieldtextfield1,textfield2
privateJButtonboton1
publicFormulario(){
setLayout(null)
textfield1=newJTextField()
textfield1.setBounds(10,10,100,30)
add(textfield1)
textfield2=newJTextField()
textfield2.setBounds(10,50,100,30)
add(textfield2)
boton1=newJButton("Sumar")
http://www.javaya.com.ar/detalleconcepto.php?codigo=107&inicio=20
3/6
2/25/2016
SwingJTextField
boton1.setBounds(10,90,100,30)
add(boton1)
boton1.addActionListener(this)
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
Stringcad1=textfield1.getText()
Stringcad2=textfield2.getText()
intx1=Integer.parseInt(cad1)
intx2=Integer.parseInt(cad2)
intsuma=x1+x2
Stringtotal=String.valueOf(suma)
setTitle(total)
}
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,140,150)
formulario1.setVisible(true)
}
}
Definimoslostresobjetos:
publicclassFormularioextendsJFrameimplementsActionListener{
privateJTextFieldtextfield1,textfield2;
privateJButtonboton1;
EnelmtodoactionPerformedesdondedebemossumarlosvaloresingresadosen
loscontrolesdetipoJTextField.Paraextraerelcontenidodeloscontrolesdebemos
extraerlosconelmtodogetText:
Stringcad1=textfield1.getText();
Stringcad2=textfield2.getText();
Comodebemossumarnumricamentelosvaloresingresadosdebemosconvertirel
contenidodelasvariablescad2ycad2atipodedatoint:
intx1=Integer.parseInt(cad1);
http://www.javaya.com.ar/detalleconcepto.php?codigo=107&inicio=20
4/6
2/25/2016
SwingJTextField
intx2=Integer.parseInt(cad2);
ElmtodoparseIntdelaclaseIntegerretornaelcontenidodecad1convertidoaint
(provoca un error si ingresamos caracteres en el control JTextField en lugar de
nmeros)
Unavezquetenemoslosdosvaloresenformatonumricoprocedemosasumarlos
yalmacenarelresultadoenotravariableauxiliar:
intsuma=x1+x2;
Ahoratenemosquemostrarelvaloralmacenadoensumaenlabarradettulosdel
control JFrame, pero como el mtodo setTitle requiere un String como parmetro
debemosconvertirloatipoString:
Stringtotal=String.valueOf(suma);
setTitle(total);
ComoveremosdeacenadelanteesmuycomnlanecesidaddeconvertirStringa
enterosyenterosaString:
DeStringaint:
intx1=Integer.parseInt(cad1);
DeintaString:
Stringtotal=String.valueOf(suma);
Problemaspropuestos
1. Ingresar el nombre de usuario y clave en controles de tipo JTextField. Si se
ingresa las cadena (usuario: juan, clave=abc123) luego mostrar en el ttulo del
JFrameelmensaje"Correcto"encasocontrariomostrarelmensaje"Incorrecto".
importjavax.swing.*
importjava.awt.event.*
publicclassFormularioextendsJFrameimplementsActionListener{
privateJLabellabel1,label2
privateJTextFieldtextfield1,textfield2
privateJButtonboton1
publicFormulario(){
http://www.javaya.com.ar/detalleconcepto.php?codigo=107&inicio=20
5/6
2/25/2016
SwingJTextField
setLayout(null)
label1=newJLabel("Nombre:")
label1.setBounds(10,10,100,30)
add(label1)
label2=newJLabel("Clave:")
label2.setBounds(10,50,100,30)
add(label2)
textfield1=newJTextField()
textfield1.setBounds(130,10,100,30)
add(textfield1)
textfield2=newJTextField()
textfield2.setBounds(130,50,100,30)
add(textfield2)
boton1=newJButton("Confirmar")
boton1.setBounds(10,100,100,30)
add(boton1)
boton1.addActionListener(this)
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
Stringcad1=textfield1.getText()
Stringcad2=textfield2.getText()
if(cad1.equals("juan")==true&&cad2.equals("abc123")==true)
setTitle("Correcto")
}else{
setTitle("Incorrecto")
}
}
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,240,200)
formulario1.setVisible(true)
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=107&inicio=20
6/6
2/25/2016
SwingJTextArea
SwingJTextArea
ElcontroldetipoJTextAreapermiteingresarmltipleslneas,adiferenciadelcontrol
detipoJTextField.
Problema1:
Confeccionar un programa que permita ingresar un mail en un control de tipo
JTextFieldyelcuerpodelmailenuncontroldetipoJTextArea.
Programa:
importjavax.swing.*
publicclassFormularioextendsJFrame{
privateJTextFieldtextfield1
privateJTextAreatextarea1
publicFormulario(){
setLayout(null)
textfield1=newJTextField()
textfield1.setBounds(10,10,200,30)
http://www.javaya.com.ar/detalleconcepto.php?codigo=108&inicio=20
1/6
2/25/2016
SwingJTextArea
add(textfield1)
textarea1=newJTextArea()
textarea1.setBounds(10,50,400,300)
add(textarea1)
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,540,400)
formulario1.setVisible(true)
}
}
ComovemoscrearuncontroldetipoJTextAreaessimilaralacreacindecontroles
detipoJTextField:
textarea1=newJTextArea();
textarea1.setBounds(10,50,400,300);
add(textarea1);
Elinconvenientequetieneestecontrolesquesiingresamosmstextoqueelque
puedevisualizarnoaparecenlasbarrasdescrollynopodemosverloscaracteres
tipeados.
ParasalvarelproblemaanteriordebemoscrearunobjetodelaclaseJScrollPaney
aadirensuinteriorelobjetodelaclaseJTextArea,luegoelprogramadefinitivoes
elsiguiente:
importjavax.swing.*
publicclassFormularioextendsJFrame{
privateJTextFieldtextfield1
privateJScrollPanescrollpane1
privateJTextAreatextarea1
publicFormulario(){
setLayout(null)
textfield1=newJTextField()
textfield1.setBounds(10,10,200,30)
add(textfield1)
textarea1=newJTextArea()
scrollpane1=newJScrollPane(textarea1)
scrollpane1.setBounds(10,50,400,300)
add(scrollpane1)
http://www.javaya.com.ar/detalleconcepto.php?codigo=108&inicio=20
2/6
2/25/2016
SwingJTextArea
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,540,400)
formulario1.setVisible(true)
}
}
Declaramoslosdosobjetos:
privateJScrollPanescrollpane1;
privateJTextAreatextarea1;
PrimerocreamoselobjetodelaclaseJTextArea:
textarea1=newJTextArea();
3/6
2/25/2016
SwingJTextArea
FinalmenteaadimoselcontroldetipoJScrollPanealJFrame:
add(scrollpane1);
Problema2:
ConfeccionarunprogramaquepermitaingresarenuncontroldetipoJTextAreauna
carta.LuegoalpresionarunbotnmostrarunmensajesilacartacontieneelString
"argentina".
Programa:
importjavax.swing.*
importjava.awt.event.*
publicclassFormularioextendsJFrameimplementsActionListe
privateJScrollPanescrollpane1
privateJTextAreatextarea1
privateJButtonboton1
publicFormulario(){
setLayout(null)
textarea1=newJTextArea()
scrollpane1=newJScrollPane(textarea1)
scrollpane1.setBounds(10,10,300,200)
add(scrollpane1)
boton1=newJButton("Verificar")
boton1.setBounds(10,260,100,30)
add(boton1)
boton1.addActionListener(this)
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
Stringtexto=textarea1.getText()
if(texto.indexOf("argentina")!=1){
setTitle("Sicontieneeltexto\"argentina\""
}else{
http://www.javaya.com.ar/detalleconcepto.php?codigo=108&inicio=20
4/6
2/25/2016
SwingJTextArea
setTitle("Nocontieneeltexto\"argentina\""
}
}
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,400,380)
formulario1.setVisible(true)
}
}
CuandosepresionaelbotnseejecutaelmtodoactionPerformedyprocedemosa
extraerelcontenidodelcontrolTextAreaatravsdelmtodogetText:
Stringtexto=textarea1.getText();
Problemaspropuestos
1. DisponerdoscontrolesdetipoJTextArea,luegoalpresionarunbotnverificarsi
tienenexactamenteelmismocontenido.
importjavax.swing.*
importjava.awt.event.*
publicclassFormularioextendsJFrameimplementsActionListener{
http://www.javaya.com.ar/detalleconcepto.php?codigo=108&inicio=20
5/6
2/25/2016
SwingJTextArea
privateJScrollPanescrollpane1,scrollpane2
privateJTextAreatextarea1,textarea2
privateJButtonboton1
publicFormulario(){
setLayout(null)
textarea1=newJTextArea()
scrollpane1=newJScrollPane(textarea1)
scrollpane1.setBounds(10,10,200,140)
add(scrollpane1)
textarea2=newJTextArea()
scrollpane2=newJScrollPane(textarea2)
scrollpane2.setBounds(220,10,200,140)
add(scrollpane2)
boton1=newJButton("Verificarcontenidos")
boton1.setBounds(10,170,150,30)
add(boton1)
boton1.addActionListener(this)
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
Stringtexto1=textarea1.getText()
Stringtexto2=textarea2.getText()
if(texto1.equals(texto2)==true){
setTitle("Losdoscontrolestieneelmismotexto.")
}else{
setTitle("Losdoscontrolesnotieneelmismotexto.")
}
}
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,500,350)
formulario1.setVisible(true)
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=108&inicio=20
6/6
2/25/2016
SwingJComboBox
SwingJComboBox
ElcontrolJComboBoxpermiteseleccionarunStringdeunalista.
Para inicializar los String que contendr el JComboBox debemos llamar al mtodo
addItemtantasvecescomoelementosqueremoscargar.
UneventomuytilconestecontrolescuandoeloperadorseleccionaunItemdela
lista. Para capturar la seleccin de un item debemos implementar la interface
ItemListenerquecontieneunmtodollamadaitemStateChanged.
Problema1:
Cargar en un JComboBox los nombres de varios colores. Al seleccionar alguno
mostrarenlabarradettulodelJFrameelStringseleccionado.
Programa:
importjavax.swing.*
importjava.awt.event.*
publicclassFormularioextendsJFrameimplementsItemListene
privateJComboBoxcombo1
publicFormulario(){
setLayout(null)
combo1=newJComboBox()
combo1.setBounds(10,10,80,20)
add(combo1)
combo1.addItem("rojo")
combo1.addItem("vede")
combo1.addItem("azul")
combo1.addItem("amarillo")
combo1.addItem("negro")
http://www.javaya.com.ar/detalleconcepto.php?codigo=109&inicio=20
1/8
2/25/2016
SwingJComboBox
combo1.addItemListener(this)
}
publicvoiditemStateChanged(ItemEvente){
if(e.getSource()==combo1){
Stringseleccionado=(String)combo1.getSelectedIte
setTitle(seleccionado)
}
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,200,150)
formulario1.setVisible(true)
}
}
IndicamosalaclasequeimplementaremoslainterfaceItemListener:
publicclassFormularioextendsJFrameimplementsItemListener{
DeclaramosunobjetodelaclaseComboBox:
privateJComboBoxcombo1;
EnelconstructorcreamoselobjetodelaclaseJComboBox:
combo1=newJComboBox();
Posicionamoselcontrol:
combo1.setBounds(10,10,80,20);
AadimoselcontrolalJFrame:
add(combo1);
AadimoslosStringalJComboBox:
http://www.javaya.com.ar/detalleconcepto.php?codigo=109&inicio=20
2/8
2/25/2016
SwingJComboBox
combo1.addItem("rojo");
combo1.addItem("vede");
combo1.addItem("azul");
combo1.addItem("amarillo");
combo1.addItem("negro");
Asociamoslaclasequecapturareleventodecambiodeitem(conthisindicamos
queestamismaclasecapturarelevento):
combo1.addItemListener(this);
ElmtodoitemStateChangedquedebemosimplementardelainterfaceItemListener
tienelasiguientesintaxis:
publicvoiditemStateChanged(ItemEvente){
if(e.getSource()==combo1){
Stringseleccionado=(String)combo1.getSelectedItem();
setTitle(seleccionado);
}
}
Problema2:
Disponer tres controles de tipo JComboBox con valores entre 0 y 255 (cada uno
representalacantidadderojo,verdeyazul).Luegoalpresionarunbotnpintarel
mismoconelcolorquesegeneracombinandolosvaloresdelosJComboBox.
http://www.javaya.com.ar/detalleconcepto.php?codigo=109&inicio=20
3/8
2/25/2016
SwingJComboBox
Programa:
importjavax.swing.*
importjava.awt.*
importjava.awt.event.*
publicclassFormularioextendsJFrameimplementsActionListe
privateJLabellabel1,label2,label3
privateJComboBoxcombo1,combo2,combo3
privateJButtonboton1
publicFormulario(){
setLayout(null)
label1=newJLabel("Rojo:")
label1.setBounds(10,10,100,30)
add(label1)
combo1=newJComboBox()
combo1.setBounds(120,10,50,30)
for(intf=0f<=255f++){
combo1.addItem(String.valueOf(f))
}
add(combo1)
label2=newJLabel("Verde:")
label2.setBounds(10,50,100,30)
add(label2)
combo2=newJComboBox()
combo2.setBounds(120,50,50,30)
for(intf=0f<=255f++){
combo2.addItem(String.valueOf(f))
http://www.javaya.com.ar/detalleconcepto.php?codigo=109&inicio=20
4/8
2/25/2016
SwingJComboBox
}
add(combo2)
label3=newJLabel("Azul:")
label3.setBounds(10,90,100,30)
add(label3)
combo3=newJComboBox()
combo3.setBounds(120,90,50,30)
for(intf=0f<=255f++){
combo3.addItem(String.valueOf(f))
}
add(combo3)
boton1=newJButton("FijarColor")
boton1.setBounds(10,130,100,30)
add(boton1)
boton1.addActionListener(this)
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
Stringcad1=(String)combo1.getSelectedItem()
Stringcad2=(String)combo2.getSelectedItem()
Stringcad3=(String)combo3.getSelectedItem()
introjo=Integer.parseInt(cad1)
intverde=Integer.parseInt(cad2)
intazul=Integer.parseInt(cad3)
Colorcolor1=newColor(rojo,verde,azul)
boton1.setBackground(color1)
}
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,400,300)
formulario1.setVisible(true)
}
}
Importamoselpaquetejava.awtyaqueelmismocontienelaclaseColor:
importjava.awt.*;
http://www.javaya.com.ar/detalleconcepto.php?codigo=109&inicio=20
5/8
2/25/2016
SwingJComboBox
Definimoslossieteobjetosrequeridosenestaaplicacin:
privateJLabellabel1,label2,label3;
privateJComboBoxcombo1,combo2,combo3;
privateJButtonboton1;
Enelconstructorcreamoslosobjetos,primeroelcontrollabel1delaclaseJLabel:
label1=newJLabel("Rojo:");
label1.setBounds(10,10,100,30);
add(label1);
Lomismohacemosconelobjetocombo1:
combo1=newJComboBox();
combo1.setBounds(120,10,50,30);
Paraaadirlos256elementosdelJComboBoxdisponemosunforypreviaallamar
almtodoaddItemconvertimoselenteroaString:
for(intf=0;f<=255;f++){
combo1.addItem(String.valueOf(f));
}
add(combo1);
Losconvertimosaentero:
http://www.javaya.com.ar/detalleconcepto.php?codigo=109&inicio=20
6/8
2/25/2016
SwingJComboBox
introjo=Integer.parseInt(cad1);
intverde=Integer.parseInt(cad2);
intazul=Integer.parseInt(cad3);
Para cambiar el color de fondo del control JButton debemos llamar al mtodo
setBackgroundypasarleelobjetodelaclaseColor:
boton1.setBackground(color1);
Problemaspropuestos
1. Solicitar el ingreso del nombre de una persona y seleccionar de un control
JComboBox un pas. Al presionar un botn mostrar en la barra del ttulo del
JFrameelnombreingresadoyelpasseleccionado.
importjavax.swing.*
importjava.awt.event.*
publicclassFormularioextendsJFrameimplementsActionListener{
privateJLabellabel1,label2
privateJTextFieldtextfield1
privateJComboBoxcombo1
privateJButtonboton1
publicFormulario(){
setLayout(null)
label1=newJLabel("Usuario:")
label1.setBounds(10,10,100,30)
add(label1)
textfield1=newJTextField()
textfield1.setBounds(120,10,120,30)
add(textfield1)
label2=newJLabel()
label2.setBounds(10,50,100,30)
add(label2)
combo1=newJComboBox()
combo1.setBounds(120,50,100,30)
combo1.addItem("Argentina")
combo1.addItem("Chile")
combo1.addItem("Espaa")
combo1.addItem("Brasil")
add(combo1)
http://www.javaya.com.ar/detalleconcepto.php?codigo=109&inicio=20
7/8
2/25/2016
SwingJComboBox
boton1=newJButton("Confirmar")
boton1.setBounds(10,100,100,30)
boton1.addActionListener(this)
add(boton1)
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
Stringnombre=textfield1.getText()
Stringpais=(String)combo1.getSelectedItem()
setTitle(nombre+""+pais)
}
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(10,20,300,200)
formulario1.setVisible(true)
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=109&inicio=20
8/8
2/25/2016
SwingJMenuBar,JMenu,JMenuItem
SwingJMenuBar,JMenu,JMenuItem
Ahora veremos como crear un men de opciones y la captura de eventos de los
mismos.
Cuando necesitamos implementar un men horizontal en la parte superior de un
JFrame requerimos de un objeto de la clase JMenuBar, uno o ms objetos de la
claseJMenuyporltimoobjetosdelaclaseJMenuItem.
Par la captura de eventos debemos implementar la interface ActionListener y
asociarloaloscontrolesdetipoJMenuItem,elmismosedisparaalpresionarconel
mouseelJMenuItem.
Problema1:
Confeccionaremos un men de opciones que contenga tres opciones que permita
cambiarelcolordefondodelJFramealoscolores:rojo,verdeyazul.
Programa:
importjavax.swing.*
importjava.awt.*
importjava.awt.event.*
publicclassFormularioextendsJFrameimplementsActionListe
privateJMenuBarmb
privateJMenumenu1
privateJMenuItemmi1,mi2,mi3
publicFormulario(){
setLayout(null)
mb=newJMenuBar()
http://www.javaya.com.ar/detalleconcepto.php?codigo=110&inicio=20
1/9
2/25/2016
SwingJMenuBar,JMenu,JMenuItem
setJMenuBar(mb)
menu1=newJMenu("Opciones")
mb.add(menu1)
mi1=newJMenuItem("Rojo")
mi1.addActionListener(this)
menu1.add(mi1)
mi2=newJMenuItem("Verde")
mi2.addActionListener(this)
menu1.add(mi2)
mi3=newJMenuItem("Azul")
mi3.addActionListener(this)
menu1.add(mi3)
}
publicvoidactionPerformed(ActionEvente){
Containerf=this.getContentPane()
if(e.getSource()==mi1){
f.setBackground(newColor(255,0,0))
}
if(e.getSource()==mi2){
f.setBackground(newColor(0,255,0))
}
if(e.getSource()==mi3){
f.setBackground(newColor(0,0,255))
}
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(10,20,300,200)
formulario1.setVisible(true)
}
}
Importamos el paquete javax.swing ya que en el mismo se encuentran las tres
clasesJMenuBar,JMenuyJMenuItem:
importjavax.swing.*;
Importamosjava.awtdondeseencuentralaclaseColor:
http://www.javaya.com.ar/detalleconcepto.php?codigo=110&inicio=20
2/9
2/25/2016
SwingJMenuBar,JMenu,JMenuItem
importjava.awt.*;
ParalacapturadeeventosmediantelainterfaceActionListenerdebemosimportarel
paquetejava.awt.event:
importjava.awt.event.*;
DefinimosunobjetodelaclaseJMenuBar(noimportaquetangrandeseaunmen
deopcionessolosenecesitarunsoloobjetodeestaclase):
privateJMenuBarmb;
Definimos un objeto de la clase JMenu (esta clase tiene por objeto desplegar un
conjuntodeobjetosdetipoJMenuItemuotrosobjetosdetipoJMenu:
privateJMenumenu1;
Definimos tres objetos de la clase JMenuItem (estos son los que disparan eventos
cuandoeloperadorlosselecciona:
privateJMenuItemmi1,mi2,mi3;
EnelconstructorcreamosprimeroelobjetodelaclaseJMenuBaryloasociamosal
JFramellamandoalmtodosetJMenuBar:
mb=newJMenuBar();
setJMenuBar(mb);
SeguidamentecreamosunobjetodelaclaseJMenu,enelconstructorpasamosel
String que debe mostrar y asociamos dicho JMenu con el JMenuBar llamando al
mtodo add de objeto de tipo JMenuBar (Es decir el objeto de la clase JMenu
colaboraconlaclaseJMenuBar):
http://www.javaya.com.ar/detalleconcepto.php?codigo=110&inicio=20
3/9
2/25/2016
SwingJMenuBar,JMenu,JMenuItem
menu1=newJMenu("Opciones");
mb.add(menu1);
LomismohacemosparalosotrosdosJMenuItem:
mi2=newJMenuItem("Verde");
mi2.addActionListener(this);
menu1.add(mi2);
mi3=newJMenuItem("Azul");
mi3.addActionListener(this);
menu1.add(mi3);
Containerf=this.getContentPane();
LuegomedianteifverificamoscualdelostresJMenuItemfueseleccionadoyapartir
deestollamamosalmtodosetBackgrounddelobjetodelaclaseContainer):
if(e.getSource()==mi1){
f.setBackground(newColor(255,0,0));
}
if(e.getSource()==mi2){
f.setBackground(newColor(0,255,0));
}
if(e.getSource()==mi3){
f.setBackground(newColor(0,0,255));
}
}
Problema2:
Confeccionaremos un men de opciones que contenga adems del JMenu de la
http://www.javaya.com.ar/detalleconcepto.php?codigo=110&inicio=20
4/9
2/25/2016
SwingJMenuBar,JMenu,JMenuItem
barraotrosdosobjetosdelaclaseJMenuquedependandelprimero.
UnodebemostrardosJMenuItemquepermitanmodificareltamaodelJFrameyel
segundo tambin debe mostrar dos JMenuItem que permitan cambiar el color de
fondo.
Programa:
importjavax.swing.*
importjava.awt.*
importjava.awt.event.*
publicclassFormularioextendsJFrameimplementsActionListe
privateJMenuBarmb
privateJMenumenu1,menu2,menu3
privateJMenuItemmi1,mi2,mi3,mi4
publicFormulario(){
setLayout(null)
mb=newJMenuBar()
setJMenuBar(mb)
menu1=newJMenu("Opciones")
mb.add(menu1)
menu2=newJMenu("Tamaodelaventana")
menu1.add(menu2)
menu3=newJMenu("Colordefondo")
menu1.add(menu3)
mi1=newJMenuItem("640*480")
menu2.add(mi1)
mi1.addActionListener(this)
mi2=newJMenuItem("1024*768")
menu2.add(mi2)
mi2.addActionListener(this)
mi3=newJMenuItem("Rojo")
menu3.add(mi3)
http://www.javaya.com.ar/detalleconcepto.php?codigo=110&inicio=20
5/9
2/25/2016
SwingJMenuBar,JMenu,JMenuItem
mi3.addActionListener(this)
mi4=newJMenuItem("Verde")
menu3.add(mi4)
mi4.addActionListener(this)
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==mi1){
setSize(640,480)
}
if(e.getSource()==mi2){
setSize(1024,768)
}
if(e.getSource()==mi3){
getContentPane().setBackground(newColor(255,0,0)
}
if(e.getSource()==mi4){
getContentPane().setBackground(newColor(0,255,0)
}
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,300,200)
formulario1.setVisible(true)
}
}
DefinimosunobjetodelaclaseJMenuBar,3objetosdelaclaseJMenuyfinalmente
4objetosdelaclaseJMenuItem:
privateJMenuBarmb;
privateJMenumenu1,menu2,menu3;
privateJMenuItemmi1,mi2,mi3,mi4;
6/9
2/25/2016
SwingJMenuBar,JMenu,JMenuItem
CreamoselprimerJMenuylopasamoscomoparmetroalJMenuBarmedianteel
mtodoadd:
menu1=newJMenu("Opciones");
mb.add(menu1);
EnformasimilarcreamoseltercerobjetodelaclaseJMenuyloasociamosconel
primerJMenucreado:
menu3=newJMenu("Colordefondo");
menu1.add(menu3);
TambinhacemoslomismoconlosotrosdosobjetosdetipoJMenuItemperoahora
losasociamosconeltercerJMenu:
mi3=newJMenuItem("Rojo");
menu3.add(mi3);
mi3.addActionListener(this);
mi4=newJMenuItem("Verde");
menu3.add(mi4);
mi4.addActionListener(this);
EnelmtodoactionPerformedsisepresionaelmi1procedemosaredimensionarel
JFramellamandoalmtodosetSizeylepasamosdosparmetrosquerepresentan
elnuevoanchoyaltodelaventana:
http://www.javaya.com.ar/detalleconcepto.php?codigo=110&inicio=20
7/9
2/25/2016
SwingJMenuBar,JMenu,JMenuItem
if(e.getSource()==mi1){
setSize(640,480);
}
DeformasimilarsisepresionaelsegundoJMenuItemcambiamoseltamaodela
ventanaa1024pxelespor768:
if(e.getSource()==mi2){
setSize(1024,768);
}
Problemaspropuestos
1. Mediante dos controles de tipo JTextField permitir el ingreso de dos nmeros.
Crear un men que contenga una opcin que redimensione el JFrame con los
valoresingresadosporteclado.Finalmentedisponerotraopcinquefinaliceel
programa (Finalizamos un programa java llamando al mtodo exit de la clase
System:System.exit(0))
importjavax.swing.*
importjava.awt.event.*
publicclassFormularioextendsJFrameimplementsActionListener{
privateJMenuBarmb
privateJMenumenu1
privateJMenuItemmi1,mi2
privateJTextFieldtf1,tf2
publicFormulario(){
setLayout(null)
mb=newJMenuBar()
setJMenuBar(mb)
menu1=newJMenu("Opciones")
mb.add(menu1)
mi1=newJMenuItem("Redimensionarventana")
menu1.add(mi1)
http://www.javaya.com.ar/detalleconcepto.php?codigo=110&inicio=20
8/9
2/25/2016
SwingJMenuBar,JMenu,JMenuItem
mi1.addActionListener(this)
mi2=newJMenuItem("Salir")
menu1.add(mi2)
mi2.addActionListener(this)
tf1=newJTextField()
tf1.setBounds(10,10,100,30)
add(tf1)
tf2=newJTextField()
tf2.setBounds(10,50,100,30)
add(tf2)
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==mi1){
Stringcad1=tf1.getText()
Stringcad2=tf2.getText()
intancho=Integer.parseInt(cad1)
intalto=Integer.parseInt(cad2)
setSize(ancho,alto)
}
if(e.getSource()==mi2){
System.exit(0)
}
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,300,200)
formulario1.setVisible(true)
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=110&inicio=20
9/9
2/25/2016
SwingJCheckBox
SwingJCheckBox
ElcontrolJCheckBoxpermiteimplementaruncuadrodeseleccin(bsicamenteun
botndedosestados)
Problema1:
Confeccionar un programa que muestre 3 objetos de la clase JCheckBox con
etiquetasdetresidiomas.CuandoseloseleccionamostrarenelttulodelJFrame
todoslosJCheckBoxseleccionadoshastaelmomento.
Programa:
importjavax.swing.*
importjavax.swing.event.*
publicclassFormularioextendsJFrameimplementsChangeListe
privateJCheckBoxcheck1,check2,check3
publicFormulario(){
setLayout(null)
check1=newJCheckBox("Ingls")
check1.setBounds(10,10,150,30)
check1.addChangeListener(this)
add(check1)
check2=newJCheckBox("Francs")
check2.setBounds(10,50,150,30)
check2.addChangeListener(this)
add(check2)
check3=newJCheckBox("Alemn")
check3.setBounds(10,90,150,30)
http://www.javaya.com.ar/detalleconcepto.php?codigo=111&inicio=20
1/8
2/25/2016
SwingJCheckBox
check3.addChangeListener(this)
add(check3)
}
publicvoidstateChanged(ChangeEvente){
Stringcad=""
if(check1.isSelected()==true){
cad=cad+"Ingls"
}
if(check2.isSelected()==true){
cad=cad+"Francs"
}
if(check3.isSelected()==true){
cad=cad+"Alemn"
}
setTitle(cad)
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,300,200)
formulario1.setVisible(true)
}
}
Loprimeroymsimportantequetenemosquenotarqueparacapturarelcambiode
estado del JCheckBox hay que implementar la interface ChangeListener que se
encuentraenelpaquete:
importjavax.swing.event.*;
ynoenelpaquete:
importjava.awt.event.*
DefinimostresobjetosdelaclaseJCheckBox:
http://www.javaya.com.ar/detalleconcepto.php?codigo=111&inicio=20
2/8
2/25/2016
SwingJCheckBox
privateJCheckBoxcheck1,check2,check3;
ElmtodoquedebemosimplementardelainterfaceChangeListeneres:
publicvoidstateChanged(ChangeEvente){
EnestemediantetresifverificamoselestadodecadaJCheckBoxyconcatenamos
losStringconlosidiomasseleccionados:
Stringcad="";
if(check1.isSelected()==true){
cad=cad+"Ingls";
}
if(check2.isSelected()==true){
cad=cad+"Francs";
}
if(check3.isSelected()==true){
cad=cad+"Alemn";
}
setTitle(cad);
Problema2:
DisponeruncontrolJLabelquemuestreelsiguientemensaje:"Estadeacuerdocon
las normas del servicio?", luego un JCheckBox y finalmente un objeto de tipo
JButtondesactivo.CuandosetildeelJCheckBoxdebemosactivarelbotn.
http://www.javaya.com.ar/detalleconcepto.php?codigo=111&inicio=20
3/8
2/25/2016
SwingJCheckBox
Programa:
importjavax.swing.*
importjavax.swing.event.*
importjava.awt.event.*
publicclassFormularioextendsJFrameimplementsActionListe
privateJLabellabel1
privateJCheckBoxcheck1
privateJButtonboton1
publicFormulario(){
setLayout(null)
label1=newJLabel("Estadeacuerdoconlasnormasdel
label1.setBounds(10,10,400,30)
add(label1)
check1=newJCheckBox("Acepto")
check1.setBounds(10,50,100,30)
check1.addChangeListener(this)
add(check1)
boton1=newJButton("Continuar")
boton1.setBounds(10,100,100,30)
add(boton1)
boton1.addActionListener(this)
boton1.setEnabled(false)
}
publicvoidstateChanged(ChangeEvente){
if(check1.isSelected()==true){
boton1.setEnabled(true)
}else{
boton1.setEnabled(false)
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=111&inicio=20
4/8
2/25/2016
SwingJCheckBox
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
System.exit(0)
}
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,350,200)
formulario1.setVisible(true)
}
}
Importamos los paquetes donde se encuentran las interfaces para captura de
eventosdeobjetosdetipoJButtonyJCheckBox:
importjavax.swing.event.*;
importjava.awt.event.*;
TambinimportamoselpaquetedondeestndefinidaslasclaseJFrame,JButtony
JCheckBox:
importjavax.swing.*;
EnelconstructorcreamoselobjetodetipoJLabel:
publicFormulario(){
setLayout(null);
label1=newJLabel("Estadeacuerdoconlasnormasdelservicio?");
label1.setBounds(10,10,400,30);
http://www.javaya.com.ar/detalleconcepto.php?codigo=111&inicio=20
5/8
2/25/2016
SwingJCheckBox
add(label1);
ElobjetodetipoJCheckBox:
check1=newJCheckBox("Acepto");
check1.setBounds(10,50,100,30);
check1.addChangeListener(this);
add(check1);
ytambincreamoselobjetodetipoJButtonyllamandoalmtodosetEnabledcon
unvalorfalseluegoelbotnaparecedesactivo:
boton1=newJButton("Continuar");
boton1.setBounds(10,100,100,30);
add(boton1);
boton1.addActionListener(this);
boton1.setEnabled(false);
ElmtodoactionPerformedseejecutacuandosepresionaelobjetodetipoJButton
(debeestaractivoparapoderpresionarlo):
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
System.exit(0);
}
}
Problemaspropuestos
1. DisponertresobjetosdelaclaseJCheckBoxconnombresdenavegadoresweb.
http://www.javaya.com.ar/detalleconcepto.php?codigo=111&inicio=20
6/8
2/25/2016
SwingJCheckBox
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
Stringcad=""
if(check1.isSelected()==true){
cad=cad+"Chrome"
}
if(check2.isSelected()==true){
cad=cad+"FireFox"
}
if(check3.isSelected()==true){
cad=cad+"Opera"
}
setTitle(cad)
}
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,350,230)
formulario1.setVisible(true)
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=111&inicio=20
7/8
2/25/2016
SwingJRadioButton
SwingJRadioButton
OtrocontrolvisualmuycomneselJRadioButtonquenormalmentesemuestranun
conjuntodeJRadioButtonypermitenlaseleccindesolounodeellos.Selosdebe
agrupar para que acten en conjunto, es decir cuando se selecciona uno
automticamentesedebendeseleccionarlosotros.
Problema1:
Confeccionar un programa que muestre 3 objetos de la clase JRadioButton que
permitanconfigurarelanchoyaltodelJFrame.
Programa:
importjavax.swing.*
importjavax.swing.event.*
publicclassFormularioextendsJFrameimplementsChangeListe
privateJRadioButtonradio1,radio2,radio3
privateButtonGroupbg
publicFormulario(){
setLayout(null)
bg=newButtonGroup()
radio1=newJRadioButton("640*480")
radio1.setBounds(10,20,100,30)
radio1.addChangeListener(this)
add(radio1)
bg.add(radio1)
http://www.javaya.com.ar/detalleconcepto.php?codigo=112&inicio=20
1/5
2/25/2016
SwingJRadioButton
radio2=newJRadioButton("800*600")
radio2.setBounds(10,70,100,30)
radio2.addChangeListener(this)
add(radio2)
bg.add(radio2)
radio3=newJRadioButton("1024*768")
radio3.setBounds(10,120,100,30)
radio3.addChangeListener(this)
add(radio3)
bg.add(radio3)
}
publicvoidstateChanged(ChangeEvente){
if(radio1.isSelected()){
setSize(640,480)
}
if(radio2.isSelected()){
setSize(800,600)
}
if(radio3.isSelected()){
setSize(1024,768)
}
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,350,230)
formulario1.setVisible(true)
}
}
Importamoslosdospaquetesdondeestndefinidaslasclaseseinterfacesparala
capturadeeventos:
importjavax.swing.*;
importjavax.swing.event.*;
HeredamosdelaclaseJFrameeimplementamoslainterfaceChangeListenerpara
capturarelcambiodeseleccindeobjetodetipoJRadioButton:
publicclassFormularioextendsJFrameimplementsChangeListener{
http://www.javaya.com.ar/detalleconcepto.php?codigo=112&inicio=20
2/5
2/25/2016
SwingJRadioButton
DefinimostresobjetosdelaclaseJRadioButtonyunodetipoButtonGroup:
privateJRadioButtonradio1,radio2,radio3;
privateButtonGroupbg;
EnelconstructorcreamosprimeroelobjetodelaclaseButtonGroup:
bg=newButtonGroup();
CreamosseguidamenteelobjetodelaclaseJRadioButton,definimossuubicacin,
llamamos al mtodo addChangeListener para informar que objeto capturar el
eventoyfinalmenteaadimoselobjetoJRadioButtonalJFrameyalButtonGroup:
radio1=newJRadioButton("640*480");
radio1.setBounds(10,20,100,30);
radio1.addChangeListener(this);
add(radio1);
bg.add(radio1);
ExactamentehacemoslomismoconlosotrosdosJRadioButton:
radio2=newJRadioButton("800*600");
radio2.setBounds(10,70,100,30);
radio2.addChangeListener(this);
add(radio2);
bg.add(radio2);
radio3=newJRadioButton("1024*768");
radio3.setBounds(10,120,100,30);
radio3.addChangeListener(this);
add(radio3);
bg.add(radio3);
3/5
2/25/2016
SwingJRadioButton
setSize(1024,768);
}
}
Problemaspropuestos
1. Permitir el ingreso de dos nmeros en controles de tipo JTextField y mediante
doscontrolesdetipoJRadioButtonpermitirseleccionarsiqueremossumarloso
restarlos.AlpresionarunbotnmostrarenelttulodelJFrameelresultadodela
operacin.
importjavax.swing.*
importjava.awt.event.*
publicclassFormularioextendsJFrameimplementsActionListener{
privateJTextFieldtf1,tf2
privateButtonGroupbg
privateJRadioButtonradio1,radio2
privateJButtonboton1
publicFormulario(){
setLayout(null)
tf1=newJTextField()
tf1.setBounds(10,10,100,30)
add(tf1)
tf2=newJTextField()
tf2.setBounds(10,60,100,30)
add(tf2)
bg=newButtonGroup()
radio1=newJRadioButton("Sumar")
radio1.setBounds(10,110,100,30)
bg.add(radio1)
add(radio1)
radio2=newJRadioButton("Restar")
radio2.setBounds(10,140,100,30)
bg.add(radio2)
add(radio2)
boton1=newJButton("Operar")
boton1.setBounds(10,180,100,30)
boton1.addActionListener(this)
add(boton1)
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
intv1=Integer.parseInt(tf1.getText())
intv2=Integer.parseInt(tf2.getText())
intresultado=0
if(radio1.isSelected()){
resultado=v1+v2
}
if(radio2.isSelected()){
http://www.javaya.com.ar/detalleconcepto.php?codigo=112&inicio=20
4/5
2/25/2016
SwingJRadioButton
resultado=v1v2
}
setTitle(String.valueOf(resultado))
}
}
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario()
formulario1.setBounds(0,0,350,250)
formulario1.setVisible(true)
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=112&inicio=20
5/5
2/25/2016
Estructurasdinmicas
Estructurasdinmicas
Conocemosalgunasestructurasdedatoscomosonlosvectoresymatrices.Noson
las nicas. Hay muchas situaciones donde utilizar alguna de estas estructuras nos
proporcionar una solucin muy ineficiente (cantidad de espacio que ocupa en
memoria,velocidaddeaccesoalainformacin,etc.)
Ejemplo 1. Imaginemos que debemos realizar un procesador de texto, debemos
elegirlaestructuradedatosparaalmacenarenmemorialasdistintaslneasqueel
operador ir tipeando. Una solucin factible es utilizar una matriz de caracteres.
Pero como sabemos debemos especificar la cantidad de filas y columnas que
ocupardeantemano.Podraserporejemplo2000filasy200columnas.Conesta
definicin estamos reservando de antemano 800000 bytes de la memoria, no
importasieloperadordespuscargaunalneacon20caracteres,igualmenteyase
hareservadounacantidaddeespacioquepermanecerociosa.
Tiene que existir alguna estructura de datos que pueda hacer ms eficiente la
solucindelproblemaanterior.
Ejemplo 2. Cmo estarn codificadas las planillas de clculo? Reservarn
espacio para cada casilla de la planilla al principio? Si no la lleno, lo mismo se
habrreservadoespacio?
Utilizar una matriz para almacenar todas las casillas de una planilla de clculo
seguroserineficiente.
Bien,todosestosproblemasymuchosmspodrnserresueltosenformaeficiente
cuandoconozcamosestasnuevasestructurasdedatos(Listas,rboles)
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=113&inicio=20
1/1
2/25/2016
Estructurasdinmicas:Listas
Estructurasdinmicas:Listas
Unalistaesunconjuntodenodos,cadaunodeloscualestienedoscampos:unode
informacin y un apuntador al siguiente nodo de la lista. Adems un apuntador
externosealaelprimernododelalista.
Representacingrficadeunnodo:
Comodecamos,unalistaesunasecuenciadenodos(enestecasocuatronodos).
La informacin de los nodos en este caso es un entero y siempre contiene un
punteroqueguardaladireccindelsiguientenodo.
raizesotropunteroexternoalalistaquecontieneladireccindelprimernodo.
Elestadodeunalistavaradurantelaejecucindelprograma:
Deestaformarepresentamosgrficamenteunalistavaca.
Siinsertamosunnodoenlalistaquedaraluego:
http://www.javaya.com.ar/detalleconcepto.php?codigo=114&inicio=40
1/3
2/25/2016
Estructurasdinmicas:Listas
Siinsertamosotronodoalprincipioconelvalor9tenemos:
Lomismopodemosborrarnodosdecualquierpartedelalista.
Estonostraealamenteelprimerproblemaplanteado:eldesarrollodelprocesador
de texto. Podramos utilizar una lista que inicialmente estuviera vaca e
introdujramos un nuevo nodo con cada lnea que tipea el operador. Con esta
estructuraharemosunusomuyeficientedelamemoria.
Tiposdelistas.
Segn el mecanismo de insercin y extraccin de nodos en la lista tenemos los
siguientestipos:
Listastipopila.
Listastipocola.
Listasgenricas.
Unalistasecomportacomounapilasilasinsercionesyextraccioneslashacemos
porunmismoladodelalista.TambinselasllamalistasLIFO(LastInFirstOut
ltimoenentrarprimeroensalir)
Una lista se comporta como una cola si las inserciones las hacemos al final y las
extraccioneslashacemosporelfrentedelalista.TambinselasllamalistasFIFO
(FirstInFirstOutprimeroenentrarprimeroensalir)
Una lista se comporta como genrica cuando las inserciones y extracciones se
realizanencualquierpartedelalista.
Podemosenalgnmomentoinsertarunnodoenmediodelalista,enotromomento
alfinal,borrarunodelfrente,borrarunodelfondoounointerior,etc.
http://www.javaya.com.ar/detalleconcepto.php?codigo=114&inicio=40
2/3
2/25/2016
Estructurasdinmicas:ListastipoPila
Estructurasdinmicas:ListastipoPila
Unalistasecomportacomounapilasilasinsercionesyextraccioneslashacemos
porunmismoladodelalista.TambinselasllamalistasLIFO(LastInFirstOut
ltimoenentrarprimeroensalir)
Importante:Unapilaalserunalistapuedealmacenarenelcampodeinformacin
cualquiertipodevalor(int,char,float,vectordecaracteres,unobjeto,etc)
Paraestudiarelmecanismodeutilizacindeunapilasupondremosqueenelcampo
deinformacinalmacenaunentero(paraunafcilinterpretacinycodificacin)
Inicialmente la PILA est vaca y decimos que el puntero raiz apunta a null (Si
apuntaanulldecimosquenotieneunadireccindememoria):
Insertamosunvalorenteroenlapila:insertar(10)
Luegoderealizarlainsercinlalistatipopilaquedadeestamanera:unnodoconel
valor10yraizapuntaadichonodo.Elpunterodelnodoapuntaanullyaquenohay
otronododespusdeeste.
Insertamosluegoelvalor4:insertar(4)
Ahora el primer nodo de la pila es el que almacena el valor cuatro. raiz apunta a
dicho nodo. Recordemos que raiz es el puntero externo a la lista que almacena la
direccindelprimernodo.Elnodoqueacabamosdeinsertarenelcampopuntero
http://www.javaya.com.ar/detalleconcepto.php?codigo=115&inicio=40
1/16
2/25/2016
Estructurasdinmicas:ListastipoPila
guardaladireccindelnodoquealmacenaelvalor10.
Ahoraqusucedesiextraemosunnododelapila.Culseextrae?Comosabemos
enunapilaseextraeelltimoenentrar.
Alextraerdelapilatenemos:extraer()
Lapilahaquedadoconunnodo.
Hayquetenercuidadoquesiseextraeunnuevonodolapilaquedarvacaynose
podrextraerotrosvalores(avisarquelapilaestvaca)
Problema1:
Confeccionar una clase que administre una lista tipo pila (se debe poder insertar,
extraereimprimirlosdatosdelapila)
Programa:
publicclassPila{
classNodo{
intinfo
Nodosig
}
privateNodoraiz
publicPila(){
raiz=null
}
publicvoidinsertar(intx){
Nodonuevo
nuevo=newNodo()
nuevo.info=x
if(raiz==null)
{
nuevo.sig=null
http://www.javaya.com.ar/detalleconcepto.php?codigo=115&inicio=40
2/16
2/25/2016
Estructurasdinmicas:ListastipoPila
raiz=nuevo
}
else
{
nuevo.sig=raiz
raiz=nuevo
}
}
publicintextraer()
{
if(raiz!=null)
{
intinformacion=raiz.info
raiz=raiz.sig
returninformacion
}
else
{
returnInteger.MAX_VALUE
}
}
publicvoidimprimir(){
Nodoreco=raiz
System.out.println("Listadodetodosloselementosde
while(reco!=null){
System.out.print(reco.info+"")
reco=reco.sig
}
System.out.println()
}
publicstaticvoidmain(String[]ar){
Pilapila1=newPila()
pila1.insertar(10)
pila1.insertar(40)
pila1.insertar(3)
pila1.imprimir()
System.out.println("Extraemosdelapila:"+pila1.extr
pila1.imprimir()
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=115&inicio=40
3/16
2/25/2016
Estructurasdinmicas:ListastipoPila
Analicemoslasdistintaspartesdeesteprograma:
classNodo{
intinfo;
Nodosig;
}
privateNodoraiz;
Paradeclararunnododebemosutilizarunaclase.Enestecasolainformacindel
nodo(info)esunenteroysiempreelnodotendrunareferenciadetipoNodo,que
lellamamossig.
El puntero sig apunta al siguiente nodo o a null en caso que no exista otro nodo.
Estepunteroesinternoalalista.
Tambin definimos un puntero de tipo Nodo llamado raiz. Este puntero tiene la
direccin del primer nodo de la lista. En caso de estar vaca la lista, raiz apunta a
null(esdecirnotienedireccin)
Elpunteroraizesfundamentalporquealtenerladireccindelprimernododelalista
nospermiteaccederalosdemsnodos.
publicPila(){
raiz=null;
}
Nodonuevo;
nuevo=newNodo();
nuevo.info=x;
if(raiz==null)
{
nuevo.sig=null;
raiz=nuevo;
}
else
{
nuevo.sig=raiz;
raiz=nuevo;
http://www.javaya.com.ar/detalleconcepto.php?codigo=115&inicio=40
4/16
2/25/2016
Estructurasdinmicas:ListastipoPila
}
}
Nodonuevo;
Creacindelnodo(creacindeunobjeto):
nuevo=newNodo();
Cuandoseejecutaeloperadornewsereservaespacioparaelnodo.Realmentese
creaelnodocuandoseejecutaelnew.
Pasoseguidodebemosguardarlainformacindelnodo:
nuevo.info=x;
Enelcampoinfoalmacenamosloquellegaenelparmetrox.Porejemplosillega
un5elnodoqueda:
Porltimoquedaenlazarelnodoqueacabamosdecrearalprincipiodelalista.
Si la lista est vaca debemos guardar en el campo sig del nodo el valor null para
indicar que no hay otro nodo despus de este, y hacer que raiz apunte al nodo
creado(sabemossiunalistaestavacasiraizalmacenaunnull)
http://www.javaya.com.ar/detalleconcepto.php?codigo=115&inicio=40
5/16
2/25/2016
Estructurasdinmicas:ListastipoPila
if(raiz==null)
{
nuevo.sig=null;
raiz=nuevo;
}
Grficamentepodemosobservarquecuandoindicamosraiz=nuevo,elpunteroraiz
guardaladireccindelnodoapuntadopornuevo.
Tener en cuenta que cuando finaliza la ejecucin del mtodo el puntero nuevo
desaparece,peronoelnodocreadoconeloperadornew.
Encasoquelalistanoestvaca,elpunterosigdelnodoqueacabamosdecrear
debe apuntar al que es hasta este momento el primer nodo, es decir al nodo que
apuntaraizactualmente.
else
{
nuevo.sig=raiz;
raiz=nuevo;
}
Comoprimeraactividadcargamosenelpunterosigdelnodoapuntadopornuevola
direccinderaiz,yposteriormenteraizapuntaalnodoqueacabamosdecrear,que
serahoraelprimerodelalista.
Antesdelosenlacestenemos:
Luegodeejecutarlalnea:
nuevo.sig=raiz;
http://www.javaya.com.ar/detalleconcepto.php?codigo=115&inicio=40
6/16
2/25/2016
Estructurasdinmicas:ListastipoPila
Ahoratenemos:
Porltimoasignamosaraizladireccinquealmacenaelpunteronuevo.
raiz=nuevo;
Lalistaqueda:
Elmtodoextraer:
publicintextraer()
{
if(raiz!=null)
{
intinformacion=raiz.info;
raiz=raiz.sig;
returninformacion;
}
else
{
returnInteger.MAX_VALUE;
}
}
Elobjetivodelmtodoextraeresretornarlainformacindelprimernodoyadems
borrarlodelalista.
Si la lista no est vaca guardamos en una variable local la informacin del primer
nodo:
intinformacion=raiz.info;
http://www.javaya.com.ar/detalleconcepto.php?codigo=115&inicio=40
7/16
2/25/2016
Estructurasdinmicas:ListastipoPila
Avanzamosraizalsegundonododelalista,yaqueborraremoselprimero:
raiz=raiz.sig;
Esmuyimportanteentendergrficamenteelmanejodelaslistas.Lainterpretacin
grficanospermitirplantearinicialmentelassolucionesparaelmanejodelistas.
Por ltimo expliquemos el mtodo para recorrer una lista en forma completa e
imprimirlainformacindecadanodo:
http://www.javaya.com.ar/detalleconcepto.php?codigo=115&inicio=40
8/16
2/25/2016
Estructurasdinmicas:ListastipoPila
publicvoidimprimir(){
Nodoreco=raiz;
System.out.println("Listadodetodosloselementosdelapila.");
while(reco!=null){
System.out.print(reco.info+"");
reco=reco.sig;
}
System.out.println();
}
Definimosunpunteroauxiliarrecoyhacemosqueapuntealprimernododelalista:
Nodoreco=raiz;
Disponemos una estructura repetitiva que se repetir mientras reco sea distinto a
null.Dentrodelaestructurarepetitivahacemosquerecoavancealsiguientenodo:
while(reco!=null){
System.out.print(reco.info+"");
reco=reco.sig;
}
Esmuyimportanteentenderlalnea:
reco=reco.sig;
Estamosdiciendoquerecoalmacenaladireccinquetieneelpunterosigdelnodo
apuntadoactualmenteporreco.
Grficamente:
http://www.javaya.com.ar/detalleconcepto.php?codigo=115&inicio=40
9/16
2/25/2016
Estructurasdinmicas:ListastipoPila
Alanalizarselacondicin:
while(reco!=null){
sevalaenverdaderoyaquerecoapuntaaunnodoysevuelveaejecutarlalnea:
reco=reco.sig;
Ahorarecoapuntaalsiguientenodo:
Lacondicindelwhilenuevamentesevalaenverdaderayavanzaelpunteroreco
alsiguientenodo:
reco=reco.sig;
http://www.javaya.com.ar/detalleconcepto.php?codigo=115&inicio=40
10/16
2/25/2016
Estructurasdinmicas:ListastipoPila
Ahora s reco apunta a null y ha llegado el final de la lista (Recordar que el ltimo
nododelalistatienealmacenadoenelpunterosigelvalornull,conelobjetivode
saberqueeselltimonodo)
Para poder probar esta clase recordemos que debemos definir un objeto de la
mismayllamarasusmtodos:
publicstaticvoidmain(String[]ar){
Pilapila1=newPila();
pila1.insertar(10);
pila1.insertar(40);
pila1.insertar(3);
pila1.imprimir();
System.out.println("Extraemosdelapila:"+pila1.extraer());
pila1.imprimir();
}
Problema2:
Agregar a la clase Pila un mtodo que retorne la cantidad de nodos y otro que
indiquesiestavaca.
Programa:
publicclassPila{
classNodo{
intinfo
Nodosig
privateNodoraiz
http://www.javaya.com.ar/detalleconcepto.php?codigo=115&inicio=40
11/16
2/25/2016
Estructurasdinmicas:ListastipoPila
Pila(){
raiz=null
}
publicvoidinsertar(intx){
Nodonuevo
nuevo=newNodo()
nuevo.info=x
if(raiz==null)
{
nuevo.sig=null
raiz=nuevo
}
else
{
nuevo.sig=raiz
raiz=nuevo
}
}
publicintextraer()
{
if(raiz!=null)
{
intinformacion=raiz.info
raiz=raiz.sig
returninformacion
}
else
{
returnInteger.MAX_VALUE
}
}
publicvoidimprimir(){
Nodoreco=raiz
System.out.println("Listadodetodosloselementosde
while(reco!=null){
System.out.print(reco.info+"")
reco=reco.sig
}
System.out.println()
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=115&inicio=40
12/16
2/25/2016
Estructurasdinmicas:ListastipoPila
publicbooleanvacia(){
if(raiz==null){
returntrue
}else{
returnfalse
}
}
publicintcantidad(){
intcant=0
Nodoreco=raiz
while(reco!=null){
cant++
reco=reco.sig
}
returncant
}
publicstaticvoidmain(String[]ar){
Pilapila1=newPila()
pila1.insertar(10)
pila1.insertar(40)
pila1.insertar(3)
pila1.imprimir()
System.out.println("Lacantidaddenodosdelalista
while(pila1.vacia()==false){
System.out.println(pila1.extraer())
}
}
}
Paraverificarsilapilaestavacaverificamoselcontenidodelavariableraiz,sitiene
nullluegolalistaestavacayporlotantoretornamosuntrue:
publicbooleanvacia(){
if(raiz==null){
returntrue;
}else{
returnfalse;
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=115&inicio=40
13/16
2/25/2016
Estructurasdinmicas:ListastipoPila
Elalgoritmoparasaberlacantidaddenodosessimilaralimprimir,peroenlugarde
mostrarlainformacindelnodoprocedemosaincrementaruncontador:
publicintcantidad(){
intcant=0;
Nodoreco=raiz;
while(reco!=null){
cant++;
reco=reco.sig;
}
returncant;
}
ParaprobarestaclaseenlamaincreamosunobjetodelaclasePilainsertamostres
enteros:
Pilapila1=newPila();
pila1.insertar(10);
pila1.insertar(40);
pila1.insertar(3);
Imprimimoslapila(nosmuestralostresdatos):
pila1.imprimir();
Llamamosalmtodocantidad(nosretornaun3):
System.out.println("Lacantidaddenodosdelalistaes:"+pila1.cantidad
Luegomientraselmtodovacanosretorneunfalse(listanovaca)procedemosa
llamaralmtodoextraer:
while(pila1.vacia()==false){
System.out.println(pila1.extraer());
}
Problemaspropuestos
1. AgregarunmtodoalaclasePilaqueretornelainformacindelprimernodode
laPilasinborrarlo.
http://www.javaya.com.ar/detalleconcepto.php?codigo=115&inicio=40
14/16
2/25/2016
Estructurasdinmicas:ListastipoPila
publicclassPila{
classNodo{
intinfo
Nodosig
privateNodoraiz
Pila(){
raiz=null
}
publicvoidinsertar(intx){
Nodonuevo
nuevo=newNodo()
nuevo.info=x
if(raiz==null)
{
nuevo.sig=null
raiz=nuevo
}
else
{
nuevo.sig=raiz
raiz=nuevo
}
}
publicintextraer()
{
if(raiz!=null)
{
intinformacion=raiz.info
raiz=raiz.sig
returninformacion
}
else
{
returnInteger.MAX_VALUE
}
}
publicintretornar()
{
if(raiz!=null)
{
intinformacion=raiz.info
returninformacion
}
else
{
http://www.javaya.com.ar/detalleconcepto.php?codigo=115&inicio=40
15/16
2/25/2016
Estructurasdinmicas:ListastipoPila
returnInteger.MAX_VALUE
}
}
publicvoidimprimir(){
Nodoreco=raiz
System.out.println("Listadodetodosloselementosdelapila.")
while(reco!=null){
System.out.print(reco.info+"")
reco=reco.sig
}
System.out.println()
}
publicstaticvoidmain(String[]ar){
Pilapila1=newPila()
pila1.insertar(10)
pila1.insertar(40)
pila1.insertar(3)
pila1.imprimir()
System.out.println("Extraemosdelapila:"+pila1.extraer())
pila1.imprimir()
System.out.println("Retornamosprimerodelapila:"+pila1.retornar
pila1.imprimir()
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=115&inicio=40
16/16
2/25/2016
Estructurasdinmicas:ListastipoPilaProblemadeaplicacin
Estructurasdinmicas:ListastipoPila
Problemadeaplicacin
Hastaahorahemosvistocomodesarrollarlosalgoritmosparaadministrarunalista
tipoPila,hemosvistoquehaybastantecomplejidadenelmanejodepunterospero
todoestoacarreaventajasenlasolucindeproblemasquerequierenunaestructura
detipoPila.
Planteodelproblema:
EsteprcticotieneporobjetivomostrarlaimportanciadelaspilasenlasCienciasde
laComputacinymsprecisamenteenlaprogramacindesoftwaredebajonivel.
Todocompiladorointrpretedeunlenguajetieneunmdulodedicadoaanalizarsi
una expresin est correctamente codificada, es decir que los parntesis estn
abiertosycerradosenunordenlgicoybienbalanceados.
Se debe desarrollar una clase que tenga las siguientes responsabilidades (clase
Formula):
Ingresarunafrmulaquecontengaparntesis,corchetesyllaves.
Validarquelos()[]y{}estncorrectamentebalanceados.
1/7
2/25/2016
Estructurasdinmicas:ListastipoPilaProblemadeaplicacin
concluirqueestcorrectamentebalanceada.
Ejemplosdefrmulasnobalanceadas:
}(2+[312]*{8/3})
Incorrecta:llegauna}decerradoylapilaestvaca.
{[2+4}]
Incorrecta:llegaunallave}yeneltopedelapilahayuncorchete[.
{[2+4]
Incorrecta:alfinalizarelanlisisdelltimocaracterenlapilaquedapendie
Programa:
publicclassPila{
classNodo{
charsimbolo
Nodosig
privateNodoraiz
Pila(){
raiz=null
}
publicvoidinsertar(charx){
Nodonuevo
nuevo=newNodo()
nuevo.simbolo=x
if(raiz==null)
{
nuevo.sig=null
raiz=nuevo
http://www.javaya.com.ar/detalleconcepto.php?codigo=116&inicio=40
2/7
2/25/2016
Estructurasdinmicas:ListastipoPilaProblemadeaplicacin
}
else
{
nuevo.sig=raiz
raiz=nuevo
}
}
publiccharextraer()
{
if(raiz!=null)
{
charinformacion=raiz.simbolo
raiz=raiz.sig
returninformacion
}
else
{
returnCharacter.MAX_VALUE
}
}
publicbooleanvacia(){
if(raiz==null){
returntrue
}else{
returnfalse
}
}
}
importjavax.swing.*
importjava.awt.event.*
publicclassFormulaextendsJFrameimplementsActionListener
privateJTextFieldtf1
privateJButtonboton1
publicFormula(){
setLayout(null)
tf1=newJTextField("{2*(45){3*4}[45]}")
http://www.javaya.com.ar/detalleconcepto.php?codigo=116&inicio=40
3/7
2/25/2016
Estructurasdinmicas:ListastipoPilaProblemadeaplicacin
tf1.setBounds(10,10,230,30)
add(tf1)
boton1=newJButton("Verificarfrmula.")
boton1.setBounds(10,70,180,30)
add(boton1)
boton1.addActionListener(this)
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
if(balanceada()){
setTitle("Estcorrectamentebalanceada.")
}else{
setTitle("Noestcorrectamentebalanceada.")
}
}
}
publicbooleanbalanceada(){
Pilapila1
pila1=newPila()
Stringcadena=tf1.getText()
for(intf=0f<cadena.length()f++)
if(cadena.charAt(f)=='('||cadena.charAt(f)=
pila1.insertar(cadena.charAt(f))
}else{
if(cadena.charAt(f)==')'){
if(pila1.extraer()!='('){
returnfalse
}else{
if(cadena.charAt(f)==']'){
if(pila1.extraer()!='['){
returnfalse
}else{
if(cadena.charAt(f)=='}'){
if(pila1.extraer()!='{'){
returnfalse
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=116&inicio=40
4/7
2/25/2016
Estructurasdinmicas:ListastipoPilaProblemadeaplicacin
}
}
if(pila1.vacia()){
returntrue
}else{
returnfalse
}
}
publicstaticvoidmain(String[]ar){
Formulaformula1=newFormula()
formula1.setBounds(0,0,350,140)
formula1.setVisible(true)
}
}
Primero declaramos y definimos la clase Pila. Almacenamos en cada nodo un
caracteryllamamosalcampodeinformacinsmbolo.
No es necesario implementar los mtodos imprimir, cantidad, etc. Porque no se
requierenparaesteproblema.
LaclaseFormulatienecomoatributos:
privateJTextFieldtf1;
privateJButtonboton1;
Enelconstructorcreamoslosdosobjetosylosubicamos:
setLayout(null);
tf1=newJTextField("{2*(45){3*4}[45]}");
tf1.setBounds(10,10,230,30);
add(tf1);
boton1=newJButton("Verificarfrmula.");
boton1.setBounds(10,70,180,30);
add(boton1);
boton1.addActionListener(this);
EnelmtodoactionPerformedllamamosalmtodobalanceadaquedeberetornarsi
http://www.javaya.com.ar/detalleconcepto.php?codigo=116&inicio=40
5/7
2/25/2016
Estructurasdinmicas:ListastipoPilaProblemadeaplicacin
lafrmulaestncorrectoslosparentesis,corchetesyllaves:
if(e.getSource()==boton1){
if(balanceada()){
setTitle("Estcorrectamentebalanceada.");
}else{
setTitle("Noestcorrectamentebalanceada.");
}
}
Elmtodomsimportanteeselbalanceada.
Enesteanalizamoslafrmulaparaverificarsiestcorrectamentebalanceada.
Enestemtodoesdondeestgranpartedelalgoritmodeesteproblema.Retorna
trueencasodesercorrectayfalseencasocontrario.
DefinimosunapilayextraemoselcontenidodelJTextField:
Pilapila1;
pila1=newPila();
Stringcadena=tf1.getText();
ElforserepitetantasvecescomocaracterestengaelJTextField.
Sedebenprocesarslolossmbolos([{y)]}.
Sielsmboloesun([{deaperturaprocedemosacargarloenlapila:
if(cadena.charAt(f)=='('||cadena.charAt(f)=='['||cadena.cha
pila1.insertar(cadena.charAt(f));
Encasodeserun)cerradodebemosextraeruncarcterdelapilayverificarsino
coincideconelparntesisdeapertura(lafrmulaestincorrecta:
if(cadena.charAt(f)==')'){
if(pila1.extraer()!='('){
returnfalse;
}
Elmismoprocesoesparalossmbolos]}.
Alfinalizarelanlisisdetodalacadenasilapilaestvacapodemosafirmarquela
frmula est correctamente balanceada, en caso contrario quiere decir que faltan
smbolosdecerradoyesincorrecta:
http://www.javaya.com.ar/detalleconcepto.php?codigo=116&inicio=40
6/7
2/25/2016
Estructurasdinmicas:ListastipoPilaProblemadeaplicacin
if(pila1.vacia()){
returntrue;
}else{
returnfalse;
}
EsimportanteentenderquelaclaseFormulautilizaunobjetodelaclasePilapara
resolver el algoritmo de verificar el balanceo de la frmula, pero no accede
directamentealosnodosdelalista.
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=116&inicio=40
7/7
2/25/2016
Estructurasdinmicas:ListastipoCola
Estructurasdinmicas:ListastipoCola
Una lista se comporta como una cola si las inserciones las hacemos al final y las
extraccioneslashacemosporelfrentedelalista.TambinselasllamalistasFIFO
(FirstInFirstOutprimeroenentrarprimeroensalir)
Confeccionaremos un programa que permita administrar una lista tipo cola.
Desarrollaremoslosmtodosdeinsertar,extraer,vaciaeimprimir.
Programa:
publicclassCola{
classNodo{
intinfo
Nodosig
}
privateNodoraiz,fondo
Cola(){
raiz=null
fondo=null
}
booleanvacia(){
if(raiz==null)
returntrue
else
returnfalse
}
voidinsertar(intinfo)
{
Nodonuevo
nuevo=newNodo()
nuevo.info=info
nuevo.sig=null
if(vacia()){
http://www.javaya.com.ar/detalleconcepto.php?codigo=117&inicio=40
1/6
2/25/2016
Estructurasdinmicas:ListastipoCola
raiz=nuevo
fondo=nuevo
}else{
fondo.sig=nuevo
fondo=nuevo
}
}
intextraer()
{
if(!vacia())
{
intinformacion=raiz.info
if(raiz==fondo){
raiz=null
fondo=null
}else{
raiz=raiz.sig
}
returninformacion
}else
returnInteger.MAX_VALUE
}
publicvoidimprimir(){
Nodoreco=raiz
System.out.println("Listadodetodosloselementosde
while(reco!=null){
System.out.print(reco.info+"")
reco=reco.sig
}
System.out.println()
}
publicstaticvoidmain(String[]ar){
Colacola1=newCola()
cola1.insertar(5)
cola1.insertar(10)
cola1.insertar(50)
cola1.imprimir()
System.out.println("Extraemosunodelacola:"+cola1.
cola1.imprimir()
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=117&inicio=40
2/6
2/25/2016
Estructurasdinmicas:ListastipoCola
}
La declaracin del nodo es igual a la clase Pila. Luego definimos dos punteros
externos:
privateNodoraiz,fondo;
raz apunta al principio de la lista y fondo al final de la lista. Utilizar dos punteros
tienecomoventajaquecadavezquetengamosqueinsertarunnodoalfinaldela
lista no tengamos que recorrerla. Por supuesto que es perfectamente vlido
implementarunacolaconunnicopunteroexternoalalista.
En el constructor inicializamos a los dos punteros en null (Realmente esto es
opcional ya que los atributos de una clase en java se inicializan automticamente
connull):
Cola(){
raiz=null;
fondo=null;
}
Elmtodovacaretornatruesilalistanotienenodosyfalseencasocontrario:
booleanvacia(){
if(raiz==null)
returntrue;
else
returnfalse;
}
Enlainsercinluegodecrearelnodotenemosdosposibilidades:quelacolaest
vaca, en cuyo caso los dos punteros externos a la lista deben apuntar al nodo
creado,oquehayanodosenlalista.
Nodonuevo;
nuevo=newNodo();
nuevo.info=info;
nuevo.sig=null;
if(vacia()){
raiz=nuevo;
fondo=nuevo;
}else{
http://www.javaya.com.ar/detalleconcepto.php?codigo=117&inicio=40
3/6
2/25/2016
Estructurasdinmicas:ListastipoCola
fondo.sig=nuevo;
fondo=nuevo;
}
Recordemosquedefinimosunpunterollamadonuevo,luegocreamoselnodoconel
operadornewycargamoslosdoscampos,eldeinformacinconloquellegaenel
parmetroyelpunteroconnullyaqueseinsertaralfinaldelalista,esdecirnohay
otrodespusdeeste.
Silalistaestvaca:
Encasodenoestarvaca:
Debemosenlazarelpunterosigdelltimonodoconelnodorecincreado:
fondo.sig=nuevo;
Yporltimoelpunteroexternofondodebeapuntaralnodoapuntadopornuevo:
fondo=nuevo;
http://www.javaya.com.ar/detalleconcepto.php?codigo=117&inicio=40
4/6
2/25/2016
Estructurasdinmicas:ListastipoCola
Con esto ya tenemos correctamente enlazados los nodos en la lista tipo cola.
Recordarqueelpunteronuevodesaparececuandosesaledelmtodoinsertar,pero
elnodocreadonosepierdeporquequedaenlazadoenlalista.
Elfuncionamientodelmtodoextraeressimilaraldelapila:
intextraer()
{
if(!vacia())
{
intinformacion=raiz.info;
if(raiz==fondo){
raiz=null;
fondo=null;
}else{
raiz=raiz.sig;
}
returninformacion;
}else
returnInteger.MAX_VALUE;
}
Si la lista no est vaca guardamos en una variable local la informacin del primer
nodo:
intinformacion=raiz.info;
Parasabersihayunsolonodoverificamossilosdospunterosraizyfondoapuntan
alamismadireccindememoria:
if(raiz==fondo){
http://www.javaya.com.ar/detalleconcepto.php?codigo=117&inicio=40
5/6
2/25/2016
Estructurasdinmicas:ListastipoCola
Luegohacemos:
raiz=null;
fondo=null;
Encasodehaber2omsnodosdebemosavanzarelpunteroraizalsiguientenodo:
raiz=raiz.sig;
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=117&inicio=40
6/6
2/25/2016
Estructurasdinmicas:ListastipoColaProblemasdeaplicacin
Estructurasdinmicas:ListastipoCola
Problemasdeaplicacin
Planteodelproblema:
EsteprcticotieneporobjetivomostrarlaimportanciadelascolasenlasCiencias
delaComputacinymsprecisamenteenlassimulaciones.
Las simulaciones permiten analizar situaciones de la realidad sin la necesidad de
ejecutarlas realmente. Tiene el beneficio que su costo es muy inferior a hacer
pruebasenlarealidad.
Desarrollarunprogramaparalasimulacindeuncajeroautomtico.
Secuentaconlasiguienteinformacin:
Lleganclientesalapuertadelcajerocada23minutos.
Cadaclientetardaentre2y4minutosparaseratendido.
Obtenerlasiguienteinformacin:
1Cantidaddeclientesqueseatiendenen10horas.
2Cantidaddeclientesquehayencoladespusde10horas.
3Horadellegadadelprimerclientequenoesatendidoluegode10horas(esdecir
lapersonaqueestprimeraenlacolacuandosecumplen10horas)
Programa:
publicclassCola{
classNodo{
intinfo
Nodosig
}
Nodoraiz,fondo
Cola(){
raiz=null
fondo=null
}
booleanvacia(){
http://www.javaya.com.ar/detalleconcepto.php?codigo=118&inicio=40
1/11
2/25/2016
Estructurasdinmicas:ListastipoColaProblemasdeaplicacin
if(raiz==null)
returntrue
else
returnfalse
}
voidinsertar(intinfo)
{
Nodonuevo
nuevo=newNodo()
nuevo.info=info
nuevo.sig=null
if(vacia()){
raiz=nuevo
fondo=nuevo
}else{
fondo.sig=nuevo
fondo=nuevo
}
}
intextraer()
{
if(!vacia())
{
intinformacion=raiz.info
if(raiz==fondo){
raiz=null
fondo=null
}else{
raiz=raiz.sig
}
returninformacion
}else
returnInteger.MAX_VALUE
}
publicvoidimprimir(){
Nodoreco=raiz
System.out.println("Listadodetodosloselementosde
while(reco!=null){
System.out.print(reco.info+"")
reco=reco.sig
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=118&inicio=40
2/11
2/25/2016
Estructurasdinmicas:ListastipoColaProblemasdeaplicacin
}
System.out.println()
}
publicintcantidad(){
intcant=0
Nodoreco=raiz
while(reco!=null){
cant++
reco=reco.sig
}
returncant
}
}
importjavax.swing.*
importjava.awt.event.*
publicclassCajeroextendsJFrameimplementsActionListener{
privateJLabell1,l2,l3
privateJButtonboton1
publicCajero(){
setLayout(null)
boton1=newJButton("ActivarSimulacin")
boton1.setBounds(10,10,180,30)
add(boton1)
boton1.addActionListener(this)
l1=newJLabel("Atendidos:")
l1.setBounds(10,50,300,30)
add(l1)
l2=newJLabel("Encola:")
l2.setBounds(10,90,300,30)
add(l2)
l3=newJLabel("Minutodellegada:")
l3.setBounds(10,130,400,30)
add(l3)
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
simulacion()
http://www.javaya.com.ar/detalleconcepto.php?codigo=118&inicio=40
3/11
2/25/2016
Estructurasdinmicas:ListastipoColaProblemasdeaplicacin
simulacion()
}
}
publicvoidsimulacion(){
intestado=0
intllegada=2+(int)(Math.random()*2)
intsalida=1
intcantAtendidas=0
Colacola=newCola()
for(intminuto=0minuto<600minuto++){
if(llegada==minuto)
{
if(estado==0){
estado=1
salida=minuto+2+(int)(Math.random()*3)
}else{
cola.insertar(minuto)
}
llegada=minuto+2+(int)(Math.random()*2)
}
if(salida==minuto)
{
estado=0
cantAtendidas++
if(!cola.vacia()){
cola.extraer()
estado=1
salida=minuto+2+(int)(Math.random()*3)
}
}
}
l1.setText("Atendidos:"+String.valueOf(cantAtendidas)
l2.setText("Encola"+String.valueOf(cola.cantidad()))
l3.setText("Minutollegada:"+String.valueOf(cola.extr
}
publicstaticvoidmain(String[]ar){
Cajerocajero1=newCajero()
cajero1.setBounds(0,0,340,250)
cajero1.setVisible(true)
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=118&inicio=40
4/11
2/25/2016
Estructurasdinmicas:ListastipoColaProblemasdeaplicacin
LaclaseColacolaboraconlaclaseCajero.Enlaclasecoladebemosdefinircomo
mnimolosmtodosdeinsertar,extraer,vacaycantidad.
LaclaseCajerodefinetresobjetosdelaclaseJLabelparamostrarlosresultadosde
lasimulacin.
Elmtodomsimportanteeseldesimulacion,veamoslasdistintaspartesdedicho
mtodo:
intestado=0;
intllegada=2+(int)(Math.random()*2);
intsalida=1;
intcantAtendidas=0;
Colacola=newCola();
La variable estado almacena un cero si el cajero est libre y un uno cuando est
ocupado.
La variable llegada almacena en que minuto llegar el prximo cliente (debemos
generarunvalorentre2y3)
La variable salida almacenar en que minuto terminar el cliente de ser atendido
(comoalprincipioelcajeroestvacoinicializamosestavariablecon1.
Llevamosuncontadorparasaberlacantidaddepersonasatendidas(cantAtendidas)
LuegodefinimosunobjetodelaclaseColaparapoderalmacenarlaspersonasque
lleganalcajeroyseloencuentranocupado.
Disponemosunforqueserepita600veces(600minutosoloqueeslomismo10
horas)
for(intminuto=0;minuto<600;minuto++){
Dentrodelforhaydosiffundamentalesqueverificanquesucedecuandollegauna
personaocuandounapersonaseretira:
if(llegada==minuto)
{
............
}
if(salida==minuto)
{
............
http://www.javaya.com.ar/detalleconcepto.php?codigo=118&inicio=40
5/11
2/25/2016
Estructurasdinmicas:ListastipoColaProblemasdeaplicacin
Sielcajeroestocupadoprocedemosacargardichapersonaenlacola(insertamos
elminutoquellega):
}else{
cola.insertar(minuto);
}
Luegogeneramoselprximominutoquellegarotrapersona:
llegada=minuto+2+(int)(Math.random()*2);
Elotroifimportanteesverquesucedecuandosalelapersonadelcajero:
if(salida==minuto){
Si sale una persona del cajero cambiamos el valor de la variable estado,
incrementamos en uno el contador cantAtendidos y si la cola no est vaca
extraemos una persona, cambiamos a uno la variable estado y generamos en que
minutodejarestapersonaelcajero:
estado=0;
cantAtendidas++;
if(!cola.vacia()){
cola.extraer();
estado=1;
salida=minuto+2+(int)(Math.random()*3);
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=118&inicio=40
6/11
2/25/2016
Estructurasdinmicas:ListastipoColaProblemasdeaplicacin
FueradelforactualizamoslastresJLabel:
l1.setText("Atendidos:"+String.valueOf(cantAtendidas));
l2.setText("Encola"+String.valueOf(cola.cantidad()));
l3.setText("Minutollegada:"+String.valueOf(cola.extraer()));
Problemaspropuestos
1.
Unsupermercadotienetrescajasparalaatencindelosclientes.
Lascajerastardanentre7y11minutosparalaatencindecadacliente.
Losclienteslleganalazonadecajascada23minutos.(Cuandoelcliente
llega, si todas las cajas tienen 6 personas, el cliente se marcha del
supermercado)
Cuandoelclientellegaalazonadecajaseligelacajaconunacolamenor.
Realizarunasimulacindurante8horasyobtenerlasiguienteinformacin:
aCantidaddeclientesatendidosporcadacaja.
bCantidaddeclientesquesemarcharonsinhacercompras.
cTiempopromedioencola.
publicclassCola{
classNodo{
intinfo
Nodosig
}
Nodoraiz,fondo
Cola(){
raiz=null
fondo=null
}
booleanvacia(){
if(raiz==null)
returntrue
else
returnfalse
}
voidinsertar(intinfo)
http://www.javaya.com.ar/detalleconcepto.php?codigo=118&inicio=40
7/11
2/25/2016
Estructurasdinmicas:ListastipoColaProblemasdeaplicacin
{
Nodonuevo
nuevo=newNodo()
nuevo.info=info
nuevo.sig=null
if(vacia()){
raiz=nuevo
fondo=nuevo
}else{
fondo.sig=nuevo
fondo=nuevo
}
}
intextraer()
{
if(!vacia())
{
intinformacion=raiz.info
if(raiz==fondo){
raiz=null
fondo=null
}else{
raiz=raiz.sig
}
returninformacion
}else
returnInteger.MAX_VALUE
}
publicvoidimprimir(){
Nodoreco=raiz
System.out.println("Listadodetodosloselementosdelacola.")
while(reco!=null){
System.out.print(reco.info+"")
reco=reco.sig
}
System.out.println()
}
publicintcantidad(){
intcant=0
Nodoreco=raiz
while(reco!=null){
cant++
reco=reco.sig
}
returncant
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=118&inicio=40
8/11
2/25/2016
Estructurasdinmicas:ListastipoColaProblemasdeaplicacin
importjavax.swing.*
importjava.awt.event.*
publicclassSupermercadoextendsJFrameimplementsActionListener{
privateJButtonboton1
privateJLabell1,l2,l3
publicSupermercado(){
setLayout(null)
boton1=newJButton("ActivarSimulacin")
boton1.setBounds(10,10,180,30)
add(boton1)
boton1.addActionListener(this)
l1=newJLabel("Clientesatendidosporcaja:")
l1.setBounds(10,50,400,30)
add(l1)
l2=newJLabel("Semarchansinhacercompras:")
l2.setBounds(10,90,400,30)
add(l2)
l3=newJLabel("Tiempopromedioencola:")
l3.setBounds(10,130,400,30)
add(l3)
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
simulacion()
}
}
publicvoidsimulacion(){
intestado1=0,estado2=0,estado3=0
intmarchan=0
intllegada=2+(int)(Math.random()*2)
intsalida1=1,salida2=1,salida3=1
intcantAte1=0,cantAte2=0,cantAte3=0
inttiempoEnCola=0
intcantidadEnCola=0
Colacola1=newCola()
Colacola2=newCola()
Colacola3=newCola()
for(intminuto=0minuto<600minuto++){
if(llegada==minuto){
if(estado1==0){
estado1=1
salida1=minuto+7+(int)(Math.random()*5)
}else{
if(estado2==0){
estado2=1
salida2=minuto+7+(int)(Math.random()*5)
}else{
if(estado3==0){
estado3=1
http://www.javaya.com.ar/detalleconcepto.php?codigo=118&inicio=40
9/11
2/25/2016
Estructurasdinmicas:ListastipoColaProblemasdeaplicacin
salida3=minuto+7+(int)(Math.random()*5)
}else{
if(cola1.cantidad()==6&&cola2.cantidad()==6
marchan++
}else{
if(cola1.cantidad()<=cola2.cantidad()&&
cola1.insertar(minuto)
}else{
if(cola2.cantidad()<=cola3.cantidad()
cola2.insertar(minuto)
}else{
cola3.insertar(minuto)
}
}
}
}
}
}
llegada=minuto+2+(int)(Math.random()*2)
}
if(salida1==minuto){
cantAte1++
estado1=0
if(!cola1.vacia()){
estado1=1
intm=cola1.extraer()
salida1=minuto+7+(int)(Math.random()*5)
tiempoEnCola=tiempoEnCola+(minutom)
cantidadEnCola++
}
}
if(salida2==minuto){
cantAte2++
estado2=0
if(!cola2.vacia()){
estado2=1
intm=cola2.extraer()
salida2=minuto+7+(int)(Math.random()*5)
tiempoEnCola=tiempoEnCola+(minutom)
cantidadEnCola++
}
}
if(salida3==minuto){
cantAte3++
estado3=0
if(!cola3.vacia()){
estado3=1
intm=cola3.extraer()
salida3=minuto+7+(int)(Math.random()*5)
tiempoEnCola=tiempoEnCola+(minutom)
cantidadEnCola++
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=118&inicio=40
10/11
2/25/2016
Estructurasdinmicas:ListastipoColaProblemasdeaplicacin
}
}
l1.setText("Clientesatendidosporcaja:caja1="+cantAte1+"caja2
l2.setText("Semarchansinhacercompras:"+marchan)
if(cantidadEnCola>0){
inttiempoPromedio=tiempoEnCola/cantidadEnCola
l3.setText("Tiempopromedioencola:"+tiempoPromedio)
}
}
publicstaticvoidmain(String[]ar){
Supermercadosuper1=newSupermercado()
super1.setBounds(0,0,390,250)
super1.setVisible(true)
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=118&inicio=40
11/11
2/25/2016
Estructurasdinmicas:Listasgenricas
Estructurasdinmicas:Listasgenricas
Continuandoconeltemadelistastrabajaremosconlaslistasgenricas.Unalistase
comporta como genrica cuando las inserciones y extracciones se realizan en
cualquierpartedelalista.
Codificaremosunaseriedemtodosparaadministrarlistasgenricas.
Mtodosadesarrollar:
Insertaunnodoenlaposicin(pos)yconlainformacinquehayenelparmetrox.
voidinsertar(intpos,intx)
Borraelnododelaposicin(pos).
voidborrar(intpos)
Intercambialasinformacionesdelosnodosdelasposicionespos1ypos2.
voidintercambiar(intpos1,intpos2)
Retornaelvalordelnodoconmayorinformacin.
intmayor()
Retornalaposicindelnodoconmayorinformacin.
intposMayor()
Retornalacantidaddenodosdelalista.
http://www.javaya.com.ar/detalleconcepto.php?codigo=119&inicio=40
1/17
2/25/2016
Estructurasdinmicas:Listasgenricas
intcantidad()
Debe retornar true si la lista est ordenada de menor a mayor, false en caso
contrario.
booleanordenada()
Deberetornartruesiexistelainformacinquellegaenelparmetro,falseencaso
contrario.
booleanexiste(intinfo)
Elmtodovacadeberetornartruesiestvacayfalsesinoloest.
booleanvacia()
Programa:
publicclassListaGenerica{
classNodo{
intinfo
Nodosig
}
privateNodoraiz
publicListaGenerica(){
raiz=null
}
voidinsertar(intpos,intx)
{
if(pos<=cantidad()+1){
Nodonuevo=newNodo()
nuevo.info=x
if(pos==1){
nuevo.sig=raiz
raiz=nuevo
}else
if(pos==cantidad()+1){
http://www.javaya.com.ar/detalleconcepto.php?codigo=119&inicio=40
2/17
2/25/2016
Estructurasdinmicas:Listasgenricas
Nodoreco=raiz
while(reco.sig!=null){
reco=reco.sig
}
reco.sig=nuevo
nuevo.sig=null
}else{
Nodoreco=raiz
for(intf=1f<=pos2f++)
reco=reco.sig
Nodosiguiente=reco.sig
reco.sig=nuevo
nuevo.sig=siguiente
}
}
}
publicintextraer(intpos){
if(pos<=cantidad()){
intinformacion
if(pos==1){
informacion=raiz.info
raiz=raiz.sig
}else{
Nodoreco
reco=raiz
for(intf=1f<=pos2f++)
reco=reco.sig
Nodoprox=reco.sig
reco.sig=prox.sig
informacion=prox.info
}
returninformacion
}
else
returnInteger.MAX_VALUE
}
publicvoidborrar(intpos)
{
if(pos<=cantidad()){
if(pos==1){
raiz=raiz.sig
http://www.javaya.com.ar/detalleconcepto.php?codigo=119&inicio=40
3/17
2/25/2016
Estructurasdinmicas:Listasgenricas
}else{
Nodoreco
reco=raiz
for(intf=1f<=pos2f++)
reco=reco.sig
Nodoprox=reco.sig
reco.sig=prox.sig
}
}
}
publicvoidintercambiar(intpos1,intpos2){
if(pos1<=cantidad()&&pos2<=cantidad()){
Nodoreco1=raiz
for(intf=1f<pos1f++)
reco1=reco1.sig
Nodoreco2=raiz
for(intf=1f<pos2f++)
reco2=reco2.sig
intaux=reco1.info
reco1.info=reco2.info
reco2.info=aux
}
}
publicintmayor(){
if(!vacia()){
intmay=raiz.info
Nodoreco=raiz.sig
while(reco!=null){
if(reco.info>may)
may=reco.info
reco=reco.sig
}
returnmay
}
else
returnInteger.MAX_VALUE
}
publicintposMayor(){
if(!vacia()){
intmay=raiz.info
http://www.javaya.com.ar/detalleconcepto.php?codigo=119&inicio=40
4/17
2/25/2016
Estructurasdinmicas:Listasgenricas
intx=1
intpos=x
Nodoreco=raiz.sig
while(reco!=null){
if(reco.info>may){
may=reco.info
pos=x
}
reco=reco.sig
x++
}
returnpos
}
else
returnInteger.MAX_VALUE
}
publicintcantidad()
{
intcant=0
Nodoreco=raiz
while(reco!=null){
reco=reco.sig
cant++
}
returncant
}
publicbooleanordenada(){
if(cantidad()>1){
Nodoreco1=raiz
Nodoreco2=raiz.sig
while(reco2!=null){
if(reco2.info<reco1.info){
returnfalse
}
reco2=reco2.sig
reco1=reco1.sig
}
}
returntrue
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=119&inicio=40
5/17
2/25/2016
Estructurasdinmicas:Listasgenricas
publicbooleanexiste(intx){
Nodoreco=raiz
while(reco!=null){
if(reco.info==x)
returntrue
reco=reco.sig
}
returnfalse
}
publicbooleanvacia()
{
if(raiz==null)
returntrue
else
returnfalse
}
publicvoidimprimir()
{
Nodoreco=raiz
while(reco!=null){
System.out.print(reco.info+"")
reco=reco.sig
}
System.out.println()
}
publicstaticvoidmain(String[]ar){
ListaGenericalg=newListaGenerica()
lg.insertar(1,10)
lg.insertar(2,20)
lg.insertar(3,30)
lg.insertar(2,15)
lg.insertar(1,115)
lg.imprimir()
System.out.println("LuegodeBorrarelprimero")
lg.borrar(1)
lg.imprimir()
System.out.println("LuegodeExtraerelsegundo")
lg.extraer(2)
lg.imprimir()
System.out.println("LuegodeIntercambiarelprimero
http://www.javaya.com.ar/detalleconcepto.php?codigo=119&inicio=40
6/17
2/25/2016
Estructurasdinmicas:Listasgenricas
lg.intercambiar(1,3)
lg.imprimir()
if(lg.existe(20))
System.out.println("Seencuentrael20enlalist
else
System.out.println("Noseencuentrael20enlal
System.out.println("Laposicindelmayores:"+lg.pos
if(lg.ordenada())
System.out.println("Lalistaestordenadademen
else
System.out.println("Lalistanoestordenadade
}
}
Parainsertarenunadeterminadaposicindentrodelalista:
voidinsertar(intpos,intx)
Primero con un if verificamos que exista esa posicin en la lista (por ejemplo si la
listatiene4nodospodemosinsertarhastalaposicin5,esdecirunomsalldel
ltimo):
if(pos<=cantidad()+1){
Siingresaalifyapodemoscrearelnodo:
Nodonuevo=newNodo();
nuevo.info=x;
Ahoradebemosanalizarsilainsercinesalprincipiodelalista,alfinaloenmedio
yaquelosenlacesvaransegndondeseloinserta.
Parasabersiseinsertaalprincipiodelalistapreguntamossienposllegaun1:
if(pos==1){
Sillegaun1luegoenlazamoselpunterosigdelnodoquecreamosconladireccin
del primer nodo de la lista (raiz apunta siempre al primer nodo de la lista) y luego
desplazamosraizalnodoqueacabamosdecrear:
http://www.javaya.com.ar/detalleconcepto.php?codigo=119&inicio=40
7/17
2/25/2016
Estructurasdinmicas:Listasgenricas
nuevo.sig=raiz;
raiz=nuevo;
Sinoseinsertaalprincipiodelalistapreguntamossiseinsertaalfinal:
if(pos==cantidad()+1){
Encasodeinsertarsealfinalrecorremoslalistahastaelltimonodo:
Nodoreco=raiz;
while(reco.sig!=null){
reco=reco.sig;
}
yenlazamoselpunterosigdelltimonododelalistaconladireccindelnodoque
acabamosdecrear(disponemosensigdelnodocreadoelvalornullyaquenohay
otronodomsadelante)
reco.sig=nuevo;
nuevo.sig=null;
Sinoseinsertaalprincipiooalfinalsignificaquetenemosqueinsertarenmediode
lalista.
Disponemos un for donde avanzamos un puntero auxiliar y nos detenemos una
posicinantesadondetenemosqueinsertarlo:
for(intf=1;f<=pos2;f++)
reco=reco.sig;
Disponemos otro puntero auxiliar que apunte al nodo prximo a donde est
apuntandoreco.Ahoraenlazamoselpunterosigdelnodoapuntadoporrecoconla
direccindelnodocreadoyelpunterosigdelnodocreadoconladireccindelnodo
siguiente:
Nodosiguiente=reco.sig;
reco.sig=nuevo;
nuevo.sig=siguiente;
http://www.javaya.com.ar/detalleconcepto.php?codigo=119&inicio=40
8/17
2/25/2016
Estructurasdinmicas:Listasgenricas
Elmtodoextraerrecibecomoparmetrolaposicindelnodoaextraer:
publicintextraer(intpos){
Primeroverificamosquelaposicinexistaenlalista:
if(pos<=cantidad()){
Luegodefinimosotropunteroauxiliarylodisponemosenelsiguientenodoadonde
estapuntandoreco:
Nodoprox=reco.sig;
Ahora enlazamos el puntero sig del nodo apuntado por reco al nodo siguiente del
nodoapuntadoporprox(esdecirelnodoapuntadoporproxquedafueradelalista):
reco.sig=prox.sig;
9/17
2/25/2016
Estructurasdinmicas:Listasgenricas
publicvoidborrar(intpos)
{
if(pos<=cantidad()){
if(pos==1){
raiz=raiz.sig;
}else{
Nodoreco;
reco=raiz;
for(intf=1;f<=pos2;f++)
reco=reco.sig;
Nodoprox=reco.sig;
reco.sig=prox.sig;
}
}
}
El mtodo intercambiar recibe dos enteros que representan las posiciones de los
nodosquequeremosintercambiarsusinformaciones:
publicvoidintercambiar(intpos1,intpos2){
Medianteunifverificamosquelasdosposicionesexistanenlalista:
if(pos1<=cantidad()&&pos2<=cantidad()){
Porltimointercambiamoslasinformacionesquealmacenancadanodo:
http://www.javaya.com.ar/detalleconcepto.php?codigo=119&inicio=40
10/17
2/25/2016
Estructurasdinmicas:Listasgenricas
intaux=reco1.info;
reco1.info=reco2.info;
reco2.info=aux;
Elmtodoqueretornaelmayordelalista:
publicintmayor(){
Verificamosquelalistanoestvaca:
if(!vacia()){
Suponemosqueelmayoreselprimerodelalistaeinicializamosunpunteroauxiliar
conladireccindelsegundonododelalista:
intmay=raiz.info;
Nodoreco=raiz.sig;
Medianteunaestructurarepetitivarecorremostodalalista:
while(reco!=null){
Cadavezqueencontramosunnodoconinformacinmayorquelavariablemayla
actualizamos con este nuevo valor y avanzamos el puntero reco para visitar el
siguientenodo:
if(reco.info>may)
may=reco.info;
reco=reco.sig;
Fueradelaestructurarepetitivaretornamoselmayor:
returnmay;
El mtodo que retorna la posicin del mayor es similar al anterior con la salvedad
quedebemosalmacenarenotroauxiliarlaposicindondesealmacenaelmayor:
publicintposMayor(){
if(!vacia()){
http://www.javaya.com.ar/detalleconcepto.php?codigo=119&inicio=40
11/17
2/25/2016
Estructurasdinmicas:Listasgenricas
intmay=raiz.info;
intx=1;
intpos=x;
Nodoreco=raiz.sig;
while(reco!=null){
if(reco.info>may){
may=reco.info;
pos=x;
}
reco=reco.sig;
x++;
}
returnpos;
}
else
returnInteger.MAX_VALUE;
}
Elmtodoquedeberetornarsiestordenadalalistademenoramayores:
publicbooleanordenada(){
Loprimeroqueverificamossilalistatienemsdeunnodosignificaquedebemos
controlarla:
if(cantidad()>1){
Disponemosdospunterosauxiliaresconlasdireccionesdelprimerysegundonodo
delalista:
Nodoreco1=raiz;
Nodoreco2=raiz.sig;
Medianteunwhilemientrasnosefinalizalalista:
while(reco2!=null){
controlamossilainformacindelsegundonodoesmenoralnodoanteriorsignifica
quelalistanoestordenadaypodemospararelanlisisretornandounfalse
if(reco2.info<reco1.info){
returnfalse;
http://www.javaya.com.ar/detalleconcepto.php?codigo=119&inicio=40
12/17
2/25/2016
Estructurasdinmicas:Listasgenricas
Dentro del while avanzamos los dos punteros a sus nodos siguientes
respectivamente.
reco2=reco2.sig;
reco1=reco1.sig;
Fuera del while retornamos true indicando que la lista est ordenada de menor a
mayor
returntrue;
Elmtodoexiste:
publicbooleanexiste(intx){
Medianteunwhilerecorremoslalalista:
Nodoreco=raiz;
while(reco!=null){
yencadanodoquevisitamoscontrolamossielparmetroxesigualalainformacin
delnodo,encasoafirmativosalimosdelmtodoretornandotrue:
if(reco.info==x)
returntrue;
reco=reco.sig;
Fuera del while retornamos false indicando que ningn nodo coincide con el
parmetrox:
returnfalse;
Problemaspropuestos
http://www.javaya.com.ar/detalleconcepto.php?codigo=119&inicio=40
13/17
2/25/2016
Estructurasdinmicas:Listasgenricas
1.
Plantear una clase para administrar una lista genrica implementando los
siguientesmtodos:
a)Insertarunnodoalprincipiodelalista.
b)Insertarunnodoalfinaldelalista.
c) Insertar un nodo en la segunda posicin. Si la lista est vaca no se
insertaelnodo.
d)Insertarunnodoenlaanteltimaposicin.
e)Borrarelprimernodo.
f)Borrarelsegundonodo.
g)Borrarelltimonodo.
h)Borrarelnodoconinformacinmayor.
publicclassListaGenerica{
classNodo{
intinfo
Nodosig
}
privateNodoraiz
publicListaGenerica(){
raiz=null
}
voidinsertarPrimero(intx)
{
Nodonuevo=newNodo()
nuevo.info=x
nuevo.sig=raiz
raiz=nuevo
}
publicvoidinsertarUtlimo(intx){
Nodonuevo=newNodo()
nuevo.info=x
if(raiz==null)
raiz=nuevo
else{
Nodoreco=raiz
while(reco.sig!=null){
reco=reco.sig
}
reco.sig=nuevo
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=119&inicio=40
14/17
2/25/2016
Estructurasdinmicas:Listasgenricas
publicvoidinsertarSegundo(intx){
if(raiz!=null){
Nodonuevo=newNodo()
nuevo.info=x
if(raiz.sig==null){
//Hayunsolonodo.
raiz.sig=nuevo
}else{
nuevo.sig=raiz.sig
raiz.sig=nuevo
}
}
}
publicvoidinsertarAnteUltimo(intx){
if(raiz!=null){
Nodonuevo=newNodo()
nuevo.info=x
if(raiz.sig==null){
//Hayunsolonodo.
nuevo.sig=raiz
raiz=nuevo
}else{
Nodoatras=raiz
Nodoreco=raiz.sig
while(reco.sig!=null){
atras=reco
reco=reco.sig
}
nuevo.sig=atras.sig
atras.sig=nuevo
}
}
}
publicvoidborrarPrimero(){
if(raiz!=null){
raiz=raiz.sig
}
}
publicvoidborrarSegundo(){
if(raiz!=null){
if(raiz.sig!=null){
Nodotercero=raiz.sig
tercero=tercero.sig
raiz.sig=tercero
}
}
}
publicvoidborrarUltimo(){
if(raiz!=null){
http://www.javaya.com.ar/detalleconcepto.php?codigo=119&inicio=40
15/17
2/25/2016
Estructurasdinmicas:Listasgenricas
if(raiz.sig==null){
raiz=null
}else{
Nodoreco=raiz.sig
Nodoatras=reco
while(reco.sig!=null){
atras=reco
reco=reco.sig
}
atras.sig=null
}
}
}
publicvoidimprimir(){
Nodoreco=raiz
while(reco!=null){
System.out.print(reco.info+"")
reco=reco.sig
}
System.out.println()
}
publicvoidborrarMayor(){
if(raiz!=null){
Nodoreco=raiz
intmay=raiz.info
while(reco!=null){
if(reco.info>may){
may=reco.info
}
reco=reco.sig
}
reco=raiz
Nodoatras=raiz
while(reco!=null){
if(reco.info==may){
if(reco==raiz){
raiz=raiz.sig
atras=raiz
reco=raiz
}else{
atras.sig=reco.sig
reco=reco.sig
}
}else{
atras=reco
reco=reco.sig
}
}
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=119&inicio=40
16/17
2/25/2016
Estructurasdinmicas:Listasgenricas
publicstaticvoidmain(String[]ar){
ListaGenericalg=newListaGenerica()
lg.insertarPrimero(10)
lg.insertarPrimero(45)
lg.insertarPrimero(23)
lg.insertarPrimero(89)
lg.imprimir()
System.out.println("Insertamosunnodoalfinal:")
lg.insertarUtlimo(160)
lg.imprimir()
System.out.println("Insertamosunnodoenlasegundaposicin:")
lg.insertarSegundo(13)
lg.imprimir()
System.out.println("Insertamosunnodoenlaanteultimaposicin:"
lg.insertarAnteUltimo(600)
lg.imprimir()
System.out.println("Borramoselprimernododelalista:")
lg.borrarPrimero()
lg.imprimir()
System.out.println("Borramoselsegundonododelalista:")
lg.borrarSegundo()
lg.imprimir()
System.out.println("Borramoselultimonododelalista:")
lg.borrarUltimo()
lg.imprimir()
System.out.println("Borramoselmayordelalista:")
lg.borrarMayor()
lg.imprimir()
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=119&inicio=40
17/17
2/25/2016
Estructurasdinmicas:Listasgenricasordenadas
Estructurasdinmicas:Listasgenricas
ordenadas
Unalistagenricaesordenadasicuandoinsertamosinformacinenlalistaqueda
ordenadarespectoalcampoinfo(seademenoramayoroalainversa)
Ejemplo:
listaOrdenada.insertar(10)
listaOrdenada.insertar(5)
listaOrdenada.insertar(7)
listaOrdenada.insertar(50)
http://www.javaya.com.ar/detalleconcepto.php?codigo=120&inicio=40
1/4
2/25/2016
Estructurasdinmicas:Listasgenricasordenadas
Podemosobservarquesirecorremoslalistapodemosaccederalainformacinde
menoramayor.
No se requiere un mtodo para ordenar la lista, sino que siempre permanece
ordenada,yaqueseinsertaordenada.
Programa:
publicclassListaOrdenada{
classNodo{
intinfo
Nodosig
}
privateNodoraiz
publicListaOrdenada(){
raiz=null
}
voidinsertar(intx)
{
Nodonuevo=newNodo()
nuevo.info=x
if(raiz==null){
raiz=nuevo
}else{
if(x<raiz.info){
nuevo.sig=raiz
raiz=nuevo
}else{
Nodoreco=raiz
Nodoatras=raiz
while(x>=reco.info&&reco.sig!=null){
atras=reco
reco=reco.sig
http://www.javaya.com.ar/detalleconcepto.php?codigo=120&inicio=40
2/4
2/25/2016
Estructurasdinmicas:Listasgenricasordenadas
}
if(x>=reco.info){
reco.sig=nuevo
}else{
nuevo.sig=reco
atras.sig=nuevo
}
}
}
}
publicvoidimprimir(){
Nodoreco=raiz
while(reco!=null){
System.out.print(reco.info+"")
reco=reco.sig
}
System.out.println()
}
publicstaticvoidmain(String[]ar){
ListaOrdenadalo=newListaOrdenada()
lo.insertar(10)
lo.insertar(5)
lo.insertar(7)
lo.insertar(50)
lo.imprimir()
}
}
Elmtodoinsertarloresolvemosdelasiguienteforma:
Creamos primeramente el nodo, ya que siempre se insertar la informacin en la
lista:
Nodonuevo=newNodo();
nuevo.info=x;
3/4
2/25/2016
Estructurasdinmicas:Listasgenricasordenadas
if(raiz==null){
raiz=nuevo;
}else{
Sinoestvacalalista,verificamossilodebemosinsertarenlaprimeraposicinde
lalista(analizamossilainformacinainsertaresmenoraloapuntadoporraizenel
campoinfo):
if(x<raiz.info){
nuevo.sig=raiz;
raiz=nuevo;
}else{
Sinoanalizamossilodebemosinsertarenmediooalfinaldelalista.
Mientraslainformacinainsertarseamayoroigualalainformacindelnodoque
visitamos ( x>=reco.info) y no lleguemos al final de la lista (reco.sig!=null)
avanzamosrecoalsiguientenodoyfijamosunpunteroenelnodoanterior(atras)
Nodoreco=raiz;
Nodoatras=raiz;
while(x>=reco.info&&reco.sig!=null){
atras=reco;
reco=reco.sig;
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=120&inicio=40
4/4
2/25/2016
Estructurasdinmicas:Listasgenricasdoblementeencadenadas
Estructurasdinmicas:Listasgenricas
doblementeencadenadas
A las listas vistas hasta el momento podemos recorrerlas solamente en una
direccin (Listas simplemente encadenadas). Hay problemas donde se requiere
recorrer la lista en ambas direcciones, en estos casos el empleo de listas
doblementeencadenadasesrecomendable.
Como ejemplo pensemos que debemos almacenar un men de opciones en una
lista, la opcin a seleccionar puede ser la siguiente o la anterior, podemos
desplazarnosenambasdirecciones.
Representacingrficadeunalistadoblementeencadenada:
Observemos que una lista doblemente encadenada tiene dos punteros por cada
nodo,unoapuntaalnodosiguienteyotroalnodoanterior.
Seguimosteniendounpuntero(raiz)quetieneladireccindelprimernodo.
Elpunterosigdelltimonodoigualquelaslistassimplementeencadenadasapunta
anull,yelpunteroantdelprimernodoapuntaanull.
SepuedenplantearListastipopila,colaygenricasconenlacedoble.
Hay que tener en cuenta que el requerimiento de memoria es mayor en las listas
doblementeencadenadasyaquetenemosdospunterospornodo.
Laestructuradelnodoes:
classNodo{
intinfo;
Nodosig,ant;
}
1/18
2/25/2016
Estructurasdinmicas:Listasgenricasdoblementeencadenadas
publicclassListaGenerica{
classNodo{
intinfo
Nodoant,sig
}
privateNodoraiz
publicListaGenerica(){
raiz=null
}
voidinsertar(intpos,intx)
{
if(pos<=cantidad()+1){
Nodonuevo=newNodo()
nuevo.info=x
if(pos==1){
nuevo.sig=raiz
if(raiz!=null)
raiz.ant=nuevo
raiz=nuevo
}else
if(pos==cantidad()+1){
Nodoreco=raiz
while(reco.sig!=null){
reco=reco.sig
}
reco.sig=nuevo
nuevo.ant=reco
nuevo.sig=null
}else{
Nodoreco=raiz
for(intf=1f<=pos2f++)
reco=reco.sig
Nodosiguiente=reco.sig
http://www.javaya.com.ar/detalleconcepto.php?codigo=121&inicio=40
2/18
2/25/2016
Estructurasdinmicas:Listasgenricasdoblementeencadenadas
reco.sig=nuevo
nuevo.ant=reco
nuevo.sig=siguiente
siguiente.ant=nuevo
}
}
}
publicintextraer(intpos){
if(pos<=cantidad()){
intinformacion
if(pos==1){
informacion=raiz.info
raiz=raiz.sig
if(raiz!=null)
raiz.ant=null
}else{
Nodoreco
reco=raiz
for(intf=1f<=pos2f++)
reco=reco.sig
Nodoprox=reco.sig
reco.sig=prox.sig
Nodosiguiente=prox.sig
if(siguiente!=null)
siguiente.ant=reco
informacion=prox.info
}
returninformacion
}
else
returnInteger.MAX_VALUE
}
publicvoidborrar(intpos)
{
if(pos<=cantidad()){
if(pos==1){
raiz=raiz.sig
if(raiz!=null)
raiz.ant=null
}else{
Nodoreco
http://www.javaya.com.ar/detalleconcepto.php?codigo=121&inicio=40
3/18
2/25/2016
Estructurasdinmicas:Listasgenricasdoblementeencadenadas
reco=raiz
for(intf=1f<=pos2f++)
reco=reco.sig
Nodoprox=reco.sig
prox=prox.sig
reco.sig=prox
if(prox!=null)
prox.ant=reco
}
}
}
publicvoidintercambiar(intpos1,intpos2){
if(pos1<=cantidad()&&pos2<=cantidad()){
Nodoreco1=raiz
for(intf=1f<pos1f++)
reco1=reco1.sig
Nodoreco2=raiz
for(intf=1f<pos2f++)
reco2=reco2.sig
intaux=reco1.info
reco1.info=reco2.info
reco2.info=aux
}
}
publicintmayor(){
if(!vacia()){
intmay=raiz.info
Nodoreco=raiz.sig
while(reco!=null){
if(reco.info>may)
may=reco.info
reco=reco.sig
}
returnmay
}
else
returnInteger.MAX_VALUE
}
publicintposMayor(){
if(!vacia()){
http://www.javaya.com.ar/detalleconcepto.php?codigo=121&inicio=40
4/18
2/25/2016
Estructurasdinmicas:Listasgenricasdoblementeencadenadas
intmay=raiz.info
intx=1
intpos=x
Nodoreco=raiz.sig
while(reco!=null){
if(reco.info>may){
may=reco.info
pos=x
}
reco=reco.sig
x++
}
returnpos
}
else
returnInteger.MAX_VALUE
}
publicintcantidad()
{
intcant=0
Nodoreco=raiz
while(reco!=null){
reco=reco.sig
cant++
}
returncant
}
publicbooleanordenada(){
if(cantidad()>1){
Nodoreco1=raiz
Nodoreco2=raiz.sig
while(reco2!=null){
if(reco2.info<reco1.info){
returnfalse
}
reco2=reco2.sig
reco1=reco1.sig
}
}
returntrue
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=121&inicio=40
5/18
2/25/2016
Estructurasdinmicas:Listasgenricasdoblementeencadenadas
publicbooleanexiste(intx){
Nodoreco=raiz
while(reco!=null){
if(reco.info==x)
returntrue
reco=reco.sig
}
returnfalse
}
publicbooleanvacia()
{
if(raiz==null)
returntrue
else
returnfalse
}
publicvoidimprimir()
{
Nodoreco=raiz
while(reco!=null){
System.out.print(reco.info+"")
reco=reco.sig
}
System.out.println()
}
publicstaticvoidmain(String[]ar){
ListaGenericalg=newListaGenerica()
lg.insertar(1,10)
lg.insertar(2,20)
lg.insertar(3,30)
lg.insertar(2,15)
lg.insertar(1,115)
lg.imprimir()
System.out.println("LuegodeBorrarelprimero")
lg.borrar(1)
lg.imprimir()
System.out.println("LuegodeExtraerelsegundo")
lg.extraer(2)
lg.imprimir()
http://www.javaya.com.ar/detalleconcepto.php?codigo=121&inicio=40
6/18
2/25/2016
Estructurasdinmicas:Listasgenricasdoblementeencadenadas
System.out.println("LuegodeIntercambiarelprimero
lg.intercambiar(1,3)
lg.imprimir()
if(lg.existe(10))
System.out.println("Seencuentrael20enlalist
else
System.out.println("Noseencuentrael20enlal
System.out.println("Laposicindelmayores:"+lg.pos
if(lg.ordenada())
System.out.println("Lalistaestordenadademen
else
System.out.println("Lalistanoestordenadade
}
}
Parainsertarenunadeterminadaposicindentrodelalista:
voidinsertar(intpos,intx)
Primero con un if verificamos que exista esa posicin en la lista (por ejemplo si la
listatiene4nodospodemosinsertarhastalaposicin5,esdecirunomsalldel
ltimo):
if(pos<=cantidad()+1){
Siingresaalifyapodemoscrearelnodo:
Nodonuevo=newNodo();
nuevo.info=x;
Ahoradebemosanalizarsilainsercinesalprincipiodelalista,alfinaloenmedio
yaquelosenlacesvaransegndondeseloinserta.
Parasabersiseinsertaalprincipiodelalistapreguntamossienposllegaun1:
if(pos==1){
Sillegaun1luegoenlazamoselpunterosigdelnodoquecreamosconladireccin
delprimernododelalista(raizapuntasiemprealprimernododelalista)
Verificamos si raiz est apuntando actualmente a un nodo, en caso afirmativo
http://www.javaya.com.ar/detalleconcepto.php?codigo=121&inicio=40
7/18
2/25/2016
Estructurasdinmicas:Listasgenricasdoblementeencadenadas
enlazamoselpunteroantconelnodoqueacabamosdecrearyluegodesplazamos
raizalnodocreado:
nuevo.sig=raiz;
if(raiz!=null)
raiz.ant=nuevo;
raiz=nuevo;
Sinoseinsertaalprincipiodelalistapreguntamossiseinsertaalfinal:
if(pos==cantidad()+1){
Encasodeinsertarsealfinalrecorremoslalistahastaelltimonodo:
Nodoreco=raiz;
while(reco.sig!=null){
reco=reco.sig;
}
yenlazamoselpunterosigdelltimonododelalistaconladireccindelnodoque
acabamosdecrear(disponemosensigdelnodocreadoelvalornullyaquenohay
otronodomsadelante)Elpunteroantdelnodoquecreamosloenlazamosconel
nodoqueeraltimohastaestemomentoyestsiendoapuntadoporreco:
reco.sig=nuevo;
nuevo.ant=reco;
nuevo.sig=null;
Sinoseinsertaalprincipiooalfinalsignificaquetenemosqueinsertarenmediode
lalista.
Disponemos un for donde avanzamos un puntero auxiliar y nos detenemos una
posicinantesadondetenemosqueinsertarlo:
for(intf=1;f<=pos2;f++)
reco=reco.sig;
Disponemos otro puntero auxiliar que apunte al nodo prximo a donde est
apuntandoreco.Ahoraenlazamoselpunterosigdelnodoapuntadoporrecoconla
direccindelnodocreadoyelpunterosigdelnodocreadoconladireccindelnodo
siguiente. El puntero ant del nodo apuntado por nuevo lo enlazamos con el nodo
http://www.javaya.com.ar/detalleconcepto.php?codigo=121&inicio=40
8/18
2/25/2016
Estructurasdinmicas:Listasgenricasdoblementeencadenadas
apuntadoporraizyelpunteroantdelnodoapuntadoporsiguienteloapuntamosa
nuevo(conestotenemosactualizadosloscuatropunterosinternosalalista):
Nodosiguiente=reco.sig;
reco.sig=nuevo;
nuevo.ant=reco;
nuevo.sig=siguiente;
siguiente.ant=nuevo;
Elmtodoextraerrecibecomoparmetrolaposicindelnodoaextraer:
publicintextraer(intpos){
Primeroverificamosquelaposicinexistaenlalista:
if(pos<=cantidad()){
Luegodefinimosotropunteroauxiliarylodisponemosenelsiguientenodoadonde
http://www.javaya.com.ar/detalleconcepto.php?codigo=121&inicio=40
9/18
2/25/2016
Estructurasdinmicas:Listasgenricasdoblementeencadenadas
estapuntandoreco:
Nodoprox=reco.sig;
Ahora enlazamos el puntero sig del nodo apuntado por reco al nodo siguiente del
nodoapuntadoporprox(esdecirelnodoapuntadoporproxquedafueradelalista)
disponemos finalmente otro puntero llamado siguiente que apunte al nodo que se
encuentraunaposicinmsadelantedelnodoapuntadoporprox,sidichopuntero
apunta a un nodo actualizamos el puntero ant de dicho nodo con la direccin del
nodoapuntadoporreco:
reco.sig=prox.sig;
Nodosiguiente=prox.sig;
if(siguiente!=null)
siguiente.ant=reco;
informacion=prox.info;
http://www.javaya.com.ar/detalleconcepto.php?codigo=121&inicio=40
10/18
2/25/2016
Estructurasdinmicas:Listasgenricasdoblementeencadenadas
El mtodo intercambiar recibe dos enteros que representan las posiciones de los
nodosquequeremosintercambiarsusinformaciones:
publicvoidintercambiar(intpos1,intpos2){
Medianteunifverificamosquelasdosposicionesexistanenlalista:
if(pos1<=cantidad()&&pos2<=cantidad()){
Porltimointercambiamoslasinformacionesquealmacenancadanodo:
intaux=reco1.info;
reco1.info=reco2.info;
reco2.info=aux;
Elmtodoqueretornaelmayordelalista:
publicintmayor(){
Verificamosquelalistanoestvaca:
if(!vacia()){
Suponemosqueelmayoreselprimerodelalistaeinicializamosunpunteroauxiliar
http://www.javaya.com.ar/detalleconcepto.php?codigo=121&inicio=40
11/18
2/25/2016
Estructurasdinmicas:Listasgenricasdoblementeencadenadas
conladireccindelsegundonododelalista:
intmay=raiz.info;
Nodoreco=raiz.sig;
Medianteunaestructurarepetitivarecorremostodalalista:
while(reco!=null){
Cadavezqueencontramosunnodoconinformacinmayorquelavariablemayla
actualizamos con este nuevo valor y avanzamos el puntero reco para visitar el
siguientenodo:
if(reco.info>may)
may=reco.info;
reco=reco.sig;
Fueradelaestructurarepetitivaretornamoselmayor:
returnmay;
El mtodo que retorna la posicin del mayor es similar al anterior con la salvedad
quedebemosalmacenarenotroauxiliarlaposicindondesealmacenaelmayor:
publicintposMayor(){
if(!vacia()){
intmay=raiz.info;
intx=1;
intpos=x;
Nodoreco=raiz.sig;
while(reco!=null){
if(reco.info>may){
may=reco.info;
pos=x;
}
reco=reco.sig;
x++;
}
returnpos;
}
else
returnInteger.MAX_VALUE;
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=121&inicio=40
12/18
2/25/2016
Estructurasdinmicas:Listasgenricasdoblementeencadenadas
Elmtodoquedeberetornarsiestordenadalalistademenoramayores:
publicbooleanordenada(){
Loprimeroqueverificamossilalistatienemsdeunnodosignificaquedebemos
controlarla:
if(cantidad()>1){
Disponemosdospunterosauxiliaresconlasdireccionesdelprimerysegundonodo
delalista:
Nodoreco1=raiz;
Nodoreco2=raiz.sig;
Medianteunwhilemientrasnosefinalizalalista:
while(reco2!=null){
controlamossilainformacindelsegundonodoesmenoralnodoanteriorsignifica
quelalistanoestordenadaypodemospararelanlisisretornandounfalse
if(reco2.info<reco1.info){
returnfalse;
Dentro del while avanzamos los dos punteros a sus nodos siguientes
respectivamente.
reco2=reco2.sig;
reco1=reco1.sig;
Fuera del while retornamos true indicando que la lista est ordenada de menor a
mayor
returntrue;
http://www.javaya.com.ar/detalleconcepto.php?codigo=121&inicio=40
13/18
2/25/2016
Estructurasdinmicas:Listasgenricasdoblementeencadenadas
Elmtodoexiste:
publicbooleanexiste(intx){
Medianteunwhilerecorremoslalalista:
Nodoreco=raiz;
while(reco!=null){
yencadanodoquevisitamoscontrolamossielparmetroxesigualalainformacin
delnodo,encasoafirmativosalimosdelmtodoretornandotrue:
if(reco.info==x)
returntrue;
reco=reco.sig;
Fuera del while retornamos false indicando que ningn nodo coincide con el
parmetrox:
returnfalse;
Problemaspropuestos
1.
http://www.javaya.com.ar/detalleconcepto.php?codigo=121&inicio=40
14/18
2/25/2016
Estructurasdinmicas:Listasgenricasdoblementeencadenadas
publicclassListaGenericaDoble{
classNodo{
intinfo
Nodoant,sig
}
privateNodoraiz
publicListaGenericaDoble(){
raiz=null
}
voidinsertarPrimero(intx)
{
Nodonuevo=newNodo()
nuevo.info=x
nuevo.sig=raiz
if(raiz!=null)
raiz.ant=nuevo
raiz=nuevo
}
publicvoidinsertarUtlimo(intx){
Nodonuevo=newNodo()
nuevo.info=x
if(raiz==null)
raiz=nuevo
else{
Nodoreco=raiz
while(reco.sig!=null){
reco=reco.sig
}
reco.sig=nuevo
nuevo.ant=reco
}
}
publicvoidinsertarSegundo(intx){
if(raiz!=null){
Nodonuevo=newNodo()
nuevo.info=x
if(raiz.sig==null){
//Hayunsolonodo.
raiz.sig=nuevo
nuevo.ant=raiz
}else{
Nodotercero=raiz.sig
nuevo.sig=tercero
tercero.ant=nuevo
raiz.sig=nuevo
nuevo.ant=raiz
http://www.javaya.com.ar/detalleconcepto.php?codigo=121&inicio=40
15/18
2/25/2016
Estructurasdinmicas:Listasgenricasdoblementeencadenadas
}
}
}
publicvoidinsertarAnteUltimo(intx){
if(raiz!=null){
Nodonuevo=newNodo()
nuevo.info=x
if(raiz.sig==null){
//Hayunsolonodo.
nuevo.sig=raiz
raiz=nuevo
}else{
Nodoreco=raiz
while(reco.sig!=null){
reco=reco.sig
}
Nodoanterior=reco.ant
nuevo.sig=reco
nuevo.ant=anterior
anterior.sig=nuevo
reco.ant=nuevo
}
}
}
publicvoidborrarPrimero(){
if(raiz!=null){
raiz=raiz.sig
}
}
publicvoidborrarSegundo(){
if(raiz!=null){
if(raiz.sig!=null){
Nodotercero=raiz.sig
tercero=tercero.sig
raiz.sig=tercero
if(tercero!=null)
tercero.ant=raiz
}
}
}
publicvoidborrarUltimo(){
if(raiz!=null){
if(raiz.sig==null){
raiz=null
}else{
Nodoreco=raiz
while(reco.sig!=null){
reco=reco.sig
}
reco=reco.ant
http://www.javaya.com.ar/detalleconcepto.php?codigo=121&inicio=40
16/18
2/25/2016
Estructurasdinmicas:Listasgenricasdoblementeencadenadas
reco=reco.ant
reco.sig=null
}
}
}
publicvoidimprimir(){
Nodoreco=raiz
while(reco!=null){
System.out.print(reco.info+"")
reco=reco.sig
}
System.out.println()
}
publicvoidborrarMayor(){
if(raiz!=null){
Nodoreco=raiz
intmay=raiz.info
while(reco!=null){
if(reco.info>may){
may=reco.info
}
reco=reco.sig
}
reco=raiz
while(reco!=null){
if(reco.info==may){
if(reco==raiz){
raiz=raiz.sig
if(raiz!=null)
raiz.ant=null
reco=raiz
}else{
Nodoatras=reco.ant
atras.sig=reco.sig
reco=reco.sig
if(reco!=null)
reco.ant=atras
}
}else{
reco=reco.sig
}
}
}
}
publicstaticvoidmain(String[]ar){
ListaGenericaDoblelg=newListaGenericaDoble()
lg.insertarPrimero(10)
lg.insertarPrimero(45)
lg.insertarPrimero(23)
lg.insertarPrimero(89)
http://www.javaya.com.ar/detalleconcepto.php?codigo=121&inicio=40
17/18
2/25/2016
Estructurasdinmicas:Listasgenricasdoblementeencadenadas
lg.insertarPrimero(89)
lg.imprimir()
System.out.println("Insertamosunnodoalfinal:")
lg.insertarUtlimo(160)
lg.imprimir()
System.out.println("Insertamosunnodoenlasegundaposicin:")
lg.insertarSegundo(13)
lg.imprimir()
System.out.println("Insertamosunnodoenlaanteultimaposicin:"
lg.insertarAnteUltimo(600)
lg.imprimir()
System.out.println("Borramoselprimernododelalista:")
lg.borrarPrimero()
lg.imprimir()
System.out.println("Borramoselsegundonododelalista:")
lg.borrarSegundo()
lg.imprimir()
System.out.println("Borramoselultimonododelalista:")
lg.borrarUltimo()
lg.imprimir()
System.out.println("Borramoselmayordelalista:")
lg.borrarMayor()
lg.imprimir()
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=121&inicio=40
18/18
2/25/2016
Estructurasdinmicas:Listasgenricascirculares
Estructurasdinmicas:Listasgenricas
circulares
Unalistacircularsimplementeencadenadalapodemosrepresentargrficamente:
Observemosqueelpunterosigdelltimonodoapuntaalprimernodo.Enestetipo
delistassiavanzamosraiznoperdemoslareferenciaalnodoanterioryaqueesun
crculo.
Unalistacircularpuedetambinserdoblementeencadenada:
Elpunteroantdelprimernodoapuntaalltimonododelalistayelpunterosigdel
ltimonododelalistaapuntaalprimero.
Resolveremos algunos mtodos para administrar listas genricas circulares
doblementeencadenadasparaanalizarlamecnicadeenlacedenodos.
Programa:
publicclassListaCircular{
classNodo{
intinfo
Nodoant,sig
http://www.javaya.com.ar/detalleconcepto.php?codigo=122&inicio=40
1/7
2/25/2016
Estructurasdinmicas:Listasgenricascirculares
privateNodoraiz
publicListaCircular(){
raiz=null
}
publicvoidinsertarPrimero(intx){
Nodonuevo=newNodo()
nuevo.info=x
if(raiz==null){
nuevo.sig=nuevo
nuevo.ant=nuevo
raiz=nuevo
}else{
Nodoultimo=raiz.ant
nuevo.sig=raiz
nuevo.ant=ultimo
raiz.ant=nuevo
ultimo.sig=nuevo
raiz=nuevo
}
}
publicvoidinsertarUltimo(intx){
Nodonuevo=newNodo()
nuevo.info=x
if(raiz==null){
nuevo.sig=nuevo
nuevo.ant=nuevo
raiz=nuevo
}else{
Nodoultimo=raiz.ant
nuevo.sig=raiz
nuevo.ant=ultimo
raiz.ant=nuevo
ultimo.sig=nuevo
}
}
publicbooleanvacia()
{
http://www.javaya.com.ar/detalleconcepto.php?codigo=122&inicio=40
2/7
2/25/2016
Estructurasdinmicas:Listasgenricascirculares
if(raiz==null)
returntrue
else
returnfalse
}
publicvoidimprimir()
{
if(!vacia()){
Nodoreco=raiz
do{
System.out.print(reco.info+"")
reco=reco.sig
}while(reco!=raiz)
System.out.println()
}
}
publicintcantidad()
{
intcant=0
if(!vacia()){
Nodoreco=raiz
do{
cant++
reco=reco.sig
}while(reco!=raiz)
}
returncant
}
publicvoidborrar(intpos)
{
if(pos<=cantidad()){
if(pos==1){
if(cantidad()==1){
raiz=null
}else{
Nodoultimo=raiz.ant
raiz=raiz.sig
ultimo.sig=raiz
raiz.ant=ultimo
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=122&inicio=40
3/7
2/25/2016
Estructurasdinmicas:Listasgenricascirculares
}else{
Nodoreco=raiz
for(intf=1f<=pos1f++)
reco=reco.sig
Nodoanterior=reco.ant
reco=reco.sig
anterior.sig=reco
reco.ant=anterior
}
}
}
publicstaticvoidmain(String[]ar){
ListaCircularlc=newListaCircular()
lc.insertarPrimero(100)
lc.insertarPrimero(45)
lc.insertarPrimero(12)
lc.insertarPrimero(4)
System.out.println("Luegodeinsertar4nodosalprin
lc.imprimir()
lc.insertarUltimo(250)
lc.insertarUltimo(7)
System.out.println("Luegodeinsertar2nodosalfina
lc.imprimir()
System.out.println("Cantidaddenodos:"+lc.cantidad()
System.out.println("Luegodeborrareldelaprimerp
lc.borrar(1)
lc.imprimir()
System.out.println("Luegodeborrareldelacuartap
lc.borrar(4)
lc.imprimir()
}
}
Parainsertaralprincipiodeunalistacirculardoblementeencadenada:
publicvoidinsertarPrimero(intx){
Creamosunnodoyguardamoslainformacin:
http://www.javaya.com.ar/detalleconcepto.php?codigo=122&inicio=40
4/7
2/25/2016
Estructurasdinmicas:Listasgenricascirculares
Nodonuevo=newNodo();
nuevo.info=x;
Silalistaestvacaluegotantoelpunterosigyantapuntanasimismoyaquedebe
sercircular(yraizapuntaalnodocreado):
if(raiz==null){
nuevo.sig=nuevo;
nuevo.ant=nuevo;
raiz=nuevo;
En caso que la lista no est vaca disponemos un puntero al final de la lista (el
punteroantdelprimernodotienedichadireccin):
}else{
Nodoultimo=raiz.ant;
Elnodoainsertarloenlazamosprevioalnodoapuntadoporraiz:
nuevo.sig=raiz;
nuevo.ant=ultimo;
raiz.ant=nuevo;
ultimo.sig=nuevo;
Finalmentehacemosqueraizapuntealnodocreadoluegodehaberhechotodoslos
enlaces:
raiz=nuevo;
Parainsertarunnodoalfinaldelalista:
publicvoidinsertarUltimo(intx){
http://www.javaya.com.ar/detalleconcepto.php?codigo=122&inicio=40
5/7
2/25/2016
Estructurasdinmicas:Listasgenricascirculares
Nodonuevo=newNodo();
nuevo.info=x;
if(raiz==null){
nuevo.sig=nuevo;
nuevo.ant=nuevo;
raiz=nuevo;
}else{
Nodoultimo=raiz.ant;
nuevo.sig=raiz;
nuevo.ant=ultimo;
raiz.ant=nuevo;
ultimo.sig=nuevo;
}
}
Paraimprimirlalistayanopodemosdisponerunpunterorecoqueapuntealprimer
nodoyquesedetengacuandoencuentreunnodoqueelatributosigalmacenenull.
publicvoidimprimir()
Paraborrarelnododeunadeterminadaposicin:
publicvoidborrar(intpos)
6/7
2/25/2016
Estructurasdinmicas:Listasgenricascirculares
if(pos<=cantidad()){
if(pos==1){
Sieselprimeroyelnicodelalistahacemosqueraizapunteanull:
if(cantidad()==1){
raiz=null;
}else{
Nodoultimo=raiz.ant;
raiz=raiz.sig;
ultimo.sig=raiz;
raiz.ant=ultimo;
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=122&inicio=40
7/7
2/25/2016
Recursividad:Conceptosbsicos
Recursividad:Conceptosbsicos
Primerodebemosdecirquelarecursividadnoesunaestructuradedatos,sinoque
esunatcnicadeprogramacinquenospermitequeunbloquedeinstruccionesse
ejecutenveces.Remplazaenocasionesaestructurasrepetitivas.
Este concepto ser de gran utilidad para el captulo de la estructura de datos tipo
rbol.
La recursividad es un concepto difcil de entender en principio, pero luego de
analizardiferentesproblemasaparecenpuntoscomunes.
EnJavalosmtodospuedenllamarseasmismos.Sidentrodeunmtodoexistela
llamadaasmismodecimosqueelmtodoesrecursivo.
Cuando un mtodo se llama a s mismo, se asigna espacio en la pila para las
nuevasvariableslocalesyparmetros.
Alvolverdeunallamadarecursiva,serecuperandelapilalasvariableslocalesylos
parmetrosantiguosylaejecucinsereanudaenelpuntodelallamadaalmtodo.
Problema1:
Implementacindeunmtodorecursivo.
Programa:
publicclassRecursividad{
voidrepetir(){
repetir()
}
publicstaticvoidmain(String[]ar){
Recursividadre=newRecursividad()
re.repetir()
}
}
Lafuncinrepetiresrecursivaporquedentrodelafuncinsellamaasmisma.
http://www.javaya.com.ar/detalleconcepto.php?codigo=123&inicio=40
1/9
2/25/2016
Recursividad:Conceptosbsicos
Cuandoejecutaesteprogramasebloquearygenerarunaexcepcin:"Exception
inthread"main"java.lang.StackOverflowError"
Analicemoscomofunciona:
Primeroseejecutalafuncinmain,luegodecrearunobjetollamamosalafuncin
repetir.
Hay que tener en cuenta que cada vez que se llama a una funcin se reservan 4
bytesdelamemoriaqueseliberarncuandofinalicesuejecucin.
Laprimeralneadelafuncinllamaalafuncinrepetir,esdecirquesereservan4
bytesnuevamente.Seejecutanuevamenteunainstanciadelafuncinrepetiryas
sucesivamentehastaquelapilaestticasecolmeysecuelgueelprograma.
Problema2:
Implementacin de un mtodo recursivo que reciba un parmetro de tipo entero y
luegollameenformarecursivaconelvalordelparmetromenos1.
Programa:
publicclassRecursividad{
voidimprimir(intx){
System.out.println(x)
imprimir(x1)
}
publicstaticvoidmain(String[]ar){
Recursividadre=newRecursividad()
re.imprimir(5)
}
}
Desdelamainsellamaalafuncinimprimiryseleenvaelvalor5.Elparmetrox
recibe el valor 5. Se ejecuta el algoritmo de la funcin, imprime el contenido del
parmetro(5)yseguidamentesellamaaunafuncin,enestecasoasmisma(por
esodecimosqueesunafuncinrecursiva),envindoleelvalor4.
El parmetro x recibe el valor 4 y se imprime en pantalla el cuatro, llamando
nuevamentealafuncinimprimirenvindoleelvalor3.
Sicontinuamosestealgoritmopodremosobservarqueenpantallaseimprime:
http://www.javaya.com.ar/detalleconcepto.php?codigo=123&inicio=40
2/9
2/25/2016
Recursividad:Conceptosbsicos
543210?1?2?3.........
hastaquesebloqueeelprograma.
Tenerencuentaquecadallamadaaunafuncinconsume4bytesporlallamadayen
estecaso4bytesporelparmetrox.Comonuncafinalizalaejecucincompletadelas
funcionessedesbordalapilaestticaporlassucesivasllamadas.
Problema3:
Implementar un mtodo recursivo que imprima en forma descendente de 5 a 1 de
unoenuno.
Programa:
publicclassRecursividad{
voidimprimir(intx){
if(x>0){
System.out.println(x)
imprimir(x1)
}
}
publicstaticvoidmain(String[]ar){
Recursividadre=newRecursividad()
re.imprimir(5)
}
}
Ahorasipodemosejecutaresteprogramayobservarlosresultadosenpantalla.Se
imprimenlosnmeros54321ynosebloqueaelprograma.
Analicequsucedecadavezqueelif(x>0)seevalacomofalso,aqulneadel
programaretorna?
Problema4:
Imprimirlosnmerosde1a5enpantallautilizandorecursividad.
Programa:
publicclassRecursividad{
http://www.javaya.com.ar/detalleconcepto.php?codigo=123&inicio=40
3/9
2/25/2016
Recursividad:Conceptosbsicos
voidimprimir(intx){
if(x>0){
imprimir(x1)
System.out.println(x)
}
}
publicstaticvoidmain(String[]ar){
Recursividadre=newRecursividad()
re.imprimir(5)
}
}
Conesteejemplosepresentaunasituacindondedebeanalizarselneaalneala
ejecucindelprogramayelporquedeestosresultados.
Porquseimprimeenpantalla12345?
Veamoscomoseapilanlasllamadasrecursivas:
Enlaprimerallamadadesdelafuncinmainelparmetroxrecibeelvalor5.
Debemosentenderqueelparmetroxenlanuevallamadaestenotrapartedela
memoriayquealmacenaun4,nosotroslellamaremosxprima.
Comienzaaejecutarselafuncin,lacondicindelifsevalacomoverdaderoporlo
queentraalbloqueyllamarecursivamentealafuncinimprimirpasndoleelvalor3
alparmetro.
http://www.javaya.com.ar/detalleconcepto.php?codigo=123&inicio=40
4/9
2/25/2016
Recursividad:Conceptosbsicos
Nuevamentelacondicinsevalacomoverdaderoyllamaalafuncinenvindole
un2,lomismoocurrecuandoleenvaun1yun0.
voidimprimir(intx){
if(x>0){
imprimir(x1);
System.out.println(x);
}
}
Cuandoxvale0lacondicindelifsevalacomofalsaysaledelafuncinimprimir.
Qulneaahoraseejecuta?
Vuelvealafuncinmain?NO.
Recordemos que la ltima llamada de la funcin imprimir se haba hecho desde la
mismafuncinimprimirporloquevuelvealalnea:
System.out.println(x);
Ahorasianalicemosquevalortieneelparmetrox.Observemoslapiladellamadas
delgrfico:
http://www.javaya.com.ar/detalleconcepto.php?codigo=123&inicio=40
5/9
2/25/2016
Recursividad:Conceptosbsicos
xcuartatieneelvalor1.Porloqueseimprimedichovalorenpantalla.
Luego de imprimir el 1 finaliza la ejecucin de la funcin, se libera el espacio
ocupado por el parmetro x y pasa a ejecutarse la siguiente lnea donde se haba
llamadolafuncin:
System.out.println(x);
Ahoraxenestainstanciadelafuncintieneelvalor2.
Assucesivamentehastaliberartodaslasllamadasrecursivas.
Esimportantetenerencuentaquesiempreenunafuncinrecursivadebehaberun
ifparafinalizarlarecursividad(encasocontrariolafuncinrecursivaserinfinitay
provocarqueelprogramasebloquee)
Problema5:
Otroproblematpicoquesepresentaparaanalizarlarecursividadeselobtenerel
factorialdeunnmero.
Recordarqueelfactorialdeunnmeroeselresultadoqueseobtienedemultiplicar
dichonmeroporelanterioryassucesivamentehastallegarauno.
Ej.elfactorialde4es4*3*2*1esdecir24.
Programa:
publicclassRecursividad{
intfactorial(intfact){
if(fact>0){
intvalor=fact*factorial(fact1)
returnvalor
}else
return1
http://www.javaya.com.ar/detalleconcepto.php?codigo=123&inicio=40
6/9
2/25/2016
Recursividad:Conceptosbsicos
publicstaticvoidmain(String[]ar){
Recursividadre=newRecursividad()
intf=re.factorial(4)
System.out.println("Elfactorialde4es"+f)
}
}
La funcin factorial es recursiva porque desde la misma funcin llamamos a la
funcinfactorial.
Debemoshacerelseguimientodelproblemaparaanalizarcomosecalcula.
Lamemoriaenlaprimerallamada:
factrecibeelvalor4yvalorsecargarconelvalorqueseobtengaconelproducto
defactporelvalordevueltoporlafuncinfactorial(llamadarecursiva)
Nuevamentesellamarecursivamentehastaqueelparmetrofactrecibaelvalor0.
http://www.javaya.com.ar/detalleconcepto.php?codigo=123&inicio=40
7/9
2/25/2016
Recursividad:Conceptosbsicos
Cuandofactrecibeuncerolacondicindelifsevalacomofalsayejecutaelelse
retornando un 1, la variable local de la llamada anterior a la funcin queda de la
siguientemanera:
Problema6:
Implementarunmtodorecursivoparaordenarloselementosdeunvector.
Programa:
classRecursivdad{
staticint[]vec={312,614,88,22,54}
http://www.javaya.com.ar/detalleconcepto.php?codigo=123&inicio=40
8/9
2/25/2016
Recursividad:Conceptosbsicos
voidordenar(int[]v,intcant){
if(cant>1){
for(intf=0f<cant1f++)
if(v[f]>v[f+1]){
intaux=v[f]
v[f]=v[f+1]
v[f+1]=aux
}
ordenar(v,cant1)
}
}
voidimprimir(){
for(intf=0f<vec.lengthf++)
System.out.print(vec[f]+"")
System.out.println("\n")
}
publicstaticvoidmain(String[]ar){
Recursivdadr=newRecursivdad()
r.imprimir()
r.ordenar(vec,vec.length)
r.imprimir()
}
}
Hastaahorahemosvistoproblemasquesepuedenresolvertantoconrecursividad
comoconestructurasrepetitivas.
Esmuyimportantetenerencuentaquesiemprequepodamosemplearunalgoritmo
no recursivo ser mejor (ocupa menos memoria de ram y se ejecuta ms
rpidamente)
Pero hay casos donde el empleo de recursividad hace mucho ms sencillo el
algoritmo (tener en cuenta que no es el caso de los tres problemas vistos
previamente)
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=123&inicio=40
9/9
2/25/2016
Recursividad:Problemasdondeconvieneaplicarlarecursividad
Recursividad:Problemasdondeconviene
aplicarlarecursividad
Enelconceptoanteriorsevieronpequeosproblemasparaentendercomofunciona
la recursividad, pero no se desarrollaron problemas donde conviene utilizar la
recursividad.
Problema1:
Imprimir la informacin de una lista simplemente encadenada de atrs para
adelante.
El empleo de estructuras repetitivas para resolver este problema es bastante
engorrosoylento(debemosavanzarhastaelltimonodoeimprimir,luegoavanzar
desdeelprincipiohastaelanteltimonodoyassucesivamente)
Elempleodelarecursividadparaesteproblemahacemssencillosusolucin.
Programa:
publicclassRecursividad{
classNodo{
intinfo
Nodosig
}
privateNodoraiz
voidinsertarPrimero(intx)
{
Nodonuevo=newNodo()
nuevo.info=x
nuevo.sig=raiz
raiz=nuevo
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=124&inicio=40
1/12
2/25/2016
Recursividad:Problemasdondeconvieneaplicarlarecursividad
publicvoidimprimirInversa(Nodoreco){
if(reco!=null){
imprimirInversa(reco.sig)
System.out.print(reco.info+"")
}
}
publicvoidimprimirInversa(){
imprimirInversa(raiz)
}
publicstaticvoidmain(String[]ar){
Recursividadr=newRecursividad()
r.insertarPrimero(10)
r.insertarPrimero(4)
r.insertarPrimero(5)
r.imprimirInversa()
}
}
2/12
2/25/2016
Recursividad:Problemasdondeconvieneaplicarlarecursividad
Problema2:
Recorrerunrboldedirectoriosenformarecursiva.
Programa:
importjava.io.File
publicclassRecursividad{
publicvoidleer(Stringinicio,Stringaltura)
{
Filear=newFile(inicio)
String[]dir=ar.list()
for(intf=0f<dir.lengthf++){
Filear2=newFile(inicio+dir[f])
if(ar2.isFile())
System.out.println(altura+dir[f])
if(ar2.isDirectory()){
System.out.println(altura+"Directorio:"+dir[
leer(inicio+dir[f]+"\\",altura+"")
}
}
}
publicstaticvoidmain(String[]arguments)
{
Recursividadrec=newRecursividad()
rec.leer("d:\\windows\\","")
}
}
Para recorrer y visitar todos los directorios y archivos de un directorio debemos
implementar un algoritmo recursivo que reciba como parmetro el directorio inicial
dondecomenzaremosarecorrer:
publicvoidleer(Stringinicio,Stringaltura)
Creamos un objeto de la clase File con el directorio que llega como parmetro y
mediante el mtodo list obtenemos todos los archivos y directorios de dicho
directorio:
http://www.javaya.com.ar/detalleconcepto.php?codigo=124&inicio=40
3/12
2/25/2016
Recursividad:Problemasdondeconvieneaplicarlarecursividad
Filear=newFile(inicio);
String[]dir=ar.list();
CreamosunobjetodelaclaseFileparacadadirectorioyarchivo:
Filear2=newFile(inicio+dir[f]);
Luegodecrearunobjetodelaclasefilepodemosverificarsisetratadeunarchivoo
directorio:
if(ar2.isFile())
System.out.println(altura+dir[f]);
if(ar2.isDirectory()){
System.out.println(altura+"Directorio:"+dir[f].toUpperCase());
leer(inicio+dir[f]+"\\",altura+"");
}
Siesunarchivolomostramosysiesundirectorioademsdemostrarlollamamos
recursivamentealmtodoleerconeldirectoriosnuevoaprocesar.
Problema3:
Desarrollarunprogramaquepermitarecorrerunlaberintoeindiquesitienesalidao
no.
Pararesolveresteproblemaallaberintolorepresentaremosconunamatrizde10x
10JLabel.
Elvalor:
"0"
"1"
"9"
"s"
Representapasillo
Representapared
Persona
Salida
4/12
2/25/2016
Recursividad:Problemasdondeconvieneaplicarlarecursividad
disponerlosenformaaleatoria(conlafuncinrandom)
Programa:
importjavax.swing.*
importjava.awt.*
importjava.awt.event.*
classLaberintoextendsJFrameimplementsActionListener{
JLabel[][]l
JButtonb1
JButtonb2
booleansalida
Laberinto()
{
setLayout(null)
l=newJLabel[10][10]
for(intf=0f<10f++){
for(intc=0c<10c++){
l[f][c]=newJLabel()
l[f][c].setBounds(20+c*20,50+f*20,20,20)
add(l[f][c])
}
}
b1=newJButton("Recorrer")
b1.setBounds(10,300,100,25)
add(b1)
b1.addActionListener(this)
b2=newJButton("Crear")
b2.setBounds(120,300,100,25)
add(b2)
b2.addActionListener(this)
crear()
}
publicvoidcrear()
{
for(intf=0f<10f++){
for(intc=0c<10c++){
inta=(int)(Math.random()*4)
l[f][c].setForeground(Color.black)
if(a==0)
http://www.javaya.com.ar/detalleconcepto.php?codigo=124&inicio=40
5/12
2/25/2016
Recursividad:Problemasdondeconvieneaplicarlarecursividad
l[f][c].setText("1")
else
l[f][c].setText("0")
}
}
l[9][9].setText("s")
l[0][0].setText("0")
}
publicvoidrecorrer(intfil,intcol)
{
if(fil>=0&&fil<10&&col>=0&&col<10&&salida==f
if(l[fil][col].getText().equals("s"))
salida=true
else
if(l[fil][col].getText().equals("0")){
l[fil][col].setText("9")
l[fil][col].setForeground(Color.red)
recorrer(fil,col+1)
recorrer(fil+1,col)
recorrer(fil1,col)
recorrer(fil,col1)
}
}
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==b1){
salida=false
recorrer(0,0)
if(salida)
setTitle("tienesalida")
else
setTitle("notienesalida")
}
if(e.getSource()==b2)
crear()
}
publicstaticvoidmain(String[]ar)
{
Laberintol=newLaberinto()
http://www.javaya.com.ar/detalleconcepto.php?codigo=124&inicio=40
6/12
2/25/2016
Recursividad:Problemasdondeconvieneaplicarlarecursividad
l.setBounds(0,0,300,400)
l.setVisible(true)
}
}
Elmtodomsimportanteeselrecorrer:
publicvoidrecorrer(intfil,intcol)
Sientraalifanteriorverificamossiestamosenlasalida:
if(l[fil][col].getText().equals("s"))
salida=true;
Enelcasoquenoestemosenlasalidaverificamossiestamosenpasillo:
if(l[fil][col].getText().equals("0")){
EncasodeestarenelpasilloprocedemosafijardichaJLabelconelcaracter"9"e
intentamos desplazarnos en las cuatro direcciones (arriba, abajo, derecha e
izquierda),estedesplazamientolologramosllamandorecursivamente:
l[fil][col].setText("9");
l[fil][col].setForeground(Color.red);
recorrer(fil,col+1);
recorrer(fil+1,col);
recorrer(fil1,col);
recorrer(fil,col1);
Problemaspropuestos
1. Desarrollar el juego del Buscaminas. Definir una matriz de 10*10 de JButton y
disponeruna'b'paralasbombas(10diez)unceroenlosbotonesquenotienen
bombas en su permetro, un 1 si tiene una bomba en su permetro y as
http://www.javaya.com.ar/detalleconcepto.php?codigo=124&inicio=40
7/12
2/25/2016
Recursividad:Problemasdondeconvieneaplicarlarecursividad
sucesivamente.Cuandosepresionaunbotnsihayunceroprocederenforma
recursiva a destapar los botones que se encuentran a sus lados. Disponer el
mismocolordefrenteyfondodelosbotonesparaqueeljugadornopuedaver
sihaybombasono.
importjavax.swing.*
importjava.awt.*
importjava.awt.event.*
classBuscaminasextendsJFrameimplementsActionListener
{
JButton[][]bot
JButtonb1
Buscaminas()
{
setLayout(null)
bot=newJButton[10][10]
for(intf=0f<10f++)
{
for(intc=0c<10c++)
{
bot[f][c]=newJButton("0")
bot[f][c].setBounds(20+c*41,50+f*41,41,41)
bot[f][c].setBackground(Color.lightGray)
bot[f][c].setForeground(Color.lightGray)
bot[f][c].addActionListener(this)
add(bot[f][c])
}
}
b1=newJButton("Reiniciar")
b1.setBounds(20,470,100,30)
add(b1)
b1.addActionListener(this)
disponerBombas()
contarBombasPerimetro()
}
voiddisponerBombas()
{
intcantidad=10
do
{
intfila=(int)(Math.random()*10)
intcolumna=(int)(Math.random()*10)
if(bot[fila][columna].getText().equals("b")==false)
{
bot[fila][columna].setText("b")
cantidad
}
}
while(cantidad!=0)
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=124&inicio=40
8/12
2/25/2016
Recursividad:Problemasdondeconvieneaplicarlarecursividad
voidcontarBombasPerimetro()
{
for(intf=0f<10f++)
{
for(intc=0c<10c++)
{
if(bot[f][c].getText().equals("0")==true)
{
intcant=contarCoordenada(f,c)
bot[f][c].setText(String.valueOf(cant))
}
}
}
}
intcontarCoordenada(intfila,intcolumna)
{
inttotal=0
if(fila1>=0&&columna1>=0)
{
if(bot[fila1][columna1].getText().equals("b")==tr
total++
}
if(fila1>=0)
{
if(bot[fila1][columna].getText().equals("b")==true)
total++
}
if(fila1>=0&&columna+1<10)
{
if(bot[fila1][columna+1].getText().equals("b")==tr
total++
}
if(columna+1<10)
{
if(bot[fila][columna+1].getText().equals("b")==true)
total++
}
if(fila+1<10&&columna+1<10)
{
if(bot[fila+1][columna+1].getText().equals("b")==tr
total++
}
if(fila+1<10)
{
if(bot[fila+1][columna].getText().equals("b")==true)
total++
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=124&inicio=40
9/12
2/25/2016
Recursividad:Problemasdondeconvieneaplicarlarecursividad
if(fila+1<10&&columna1>=0)
{
if(bot[fila+1][columna1].getText().equals("b")==tr
total++
}
if(columna1>=0)
{
if(bot[fila][columna1].getText().equals("b")==true)
total++
}
returntotal
}
voiddesactivarJuego()
{
for(intf=0f<10f++)
{
for(intc=0c<10c++)
{
bot[f][c].setEnabled(false)
}
}
}
voidreiniciar()
{
setTitle("")
for(intf=0f<10f++)
{
for(intc=0c<10c++)
{
bot[f][c].setText("0")
bot[f][c].setEnabled(true)
bot[f][c].setBackground(Color.lightGray)
bot[f][c].setForeground(Color.lightGray)
}
}
disponerBombas()
contarBombasPerimetro()
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==b1)
{
reiniciar()
}
for(intf=0f<10f++)
{
http://www.javaya.com.ar/detalleconcepto.php?codigo=124&inicio=40
10/12
2/25/2016
Recursividad:Problemasdondeconvieneaplicarlarecursividad
for(intc=0c<10c++)
{
if(e.getSource()==bot[f][c])
{
if(bot[f][c].getText().equals("b")==true)
{
setTitle("Boooooooooooooomm")
desactivarJuego()
}
else
if(bot[f][c].getText().equals("0")==true)
{
recorrer(f,c)
}
else
if(bot[f][c].getText().equals("1")==true||
bot[f][c].getText().equals("2")==true||
bot[f][c].getText().equals("3")==true||
bot[f][c].getText().equals("4")==true||
bot[f][c].getText().equals("5")==true||
bot[f][c].getText().equals("6")==true||
bot[f][c].getText().equals("7")==true||
bot[f][c].getText().equals("8")==true)
{
bot[f][c].setBackground(Color.yellow)
bot[f][c].setForeground(Color.black)
}
}
}
}
verificarTriunfo()
}
voidverificarTriunfo()
{
intcant=0
for(intf=0f<10f++)
{
for(intc=0c<10c++)
{
Colorcol=bot[f][c].getBackground()
if(col==Color.yellow)
cant++
}
}
if(cant==90)
{
setTitle("Ganooooooooo")
desactivarJuego()
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=124&inicio=40
11/12
2/25/2016
Recursividad:Problemasdondeconvieneaplicarlarecursividad
voidrecorrer(intfil,intcol)
{
if(fil>=0&&fil<10&&col>=0&&col<10)
{
if(bot[fil][col].getText().equals("0"))
{
bot[fil][col].setText("")
bot[fil][col].setBackground(Color.yellow)
recorrer(fil,col+1)
recorrer(fil,col1)
recorrer(fil+1,col)
recorrer(fil1,col)
recorrer(fil1,col1)
recorrer(fil1,col+1)
recorrer(fil+1,col+1)
recorrer(fil+1,col1)
}
else
if(bot[fil][col].getText().equals("1")==true||
bot[fil][col].getText().equals("2")==true||
bot[fil][col].getText().equals("3")==true||
bot[fil][col].getText().equals("4")==true||
bot[fil][col].getText().equals("5")==true||
bot[fil][col].getText().equals("6")==true||
bot[fil][col].getText().equals("7")==true||
bot[fil][col].getText().equals("8")==true)
{
bot[fil][col].setBackground(Color.yellow)
bot[fil][col].setForeground(Color.black)
}
}
}
publicstaticvoidmain(String[]ar)
{
Buscaminasm=newBuscaminas()
m.setBounds(0,0,470,600)
m.setVisible(true)
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=124&inicio=40
12/12
2/25/2016
Estructurasdinmicas:Conceptosderboles
Estructurasdinmicas:Conceptosde
rboles
Igual que la lista, el rbol es una estructura de datos. Son muy eficientes para la
bsquedadeinformacin.Losrbolessoportanestructurasnolineales.
Algunosconceptosdelaestructuradedatostiporbol:
Nodohoja:Esunnodosindescendientes(Nodoterminal)
Ej.NodosE?F?CyD.
Nodointerior:Esunnodoquenoeshoja.
Ej.NodosAyB.
Niveldeunrbol:ElnodoAestenelnivel1susdescendientesdirectosestnen
elnivel2yassucesivamente.
Elniveldelrbolestdadoporelnododemximonivel.
Ej.Esterbolesdenivel3.
Gradodeunnodo:eselnmerodenodoshijosquetienedichonodo(solosetiene
encuentalosnodosinteriores)
Ej.ElnodoAtienegrado3.
ElnodoBtienegrado2.
Losotrosnodosnotienengradoporquenotienendescendientes.
Gradodeunrbol:Eselmximodelosgradosdetodoslosnodosdeunrbol.
http://www.javaya.com.ar/detalleconcepto.php?codigo=125&inicio=40
1/5
2/25/2016
Estructurasdinmicas:Conceptosderboles
Ej.Elgradodelrboles3.
Longituddecaminodelnodox:Alnmerodearcosquedebenserrecorridospara
llegaraunnodox,partiendodelaraiz.
La raiz tiene longitud de camino 1, sus descendientes directos tienen longitud de
camino2,etc.Enformageneralunnodoenelnivelitienelongituddecaminoi.
rbol binario: Un rbol es binario si cada nodo tiene como mximo 2
descendientes.
Paracadanodoestdefinidoelsubrbolizquierdoyelderecho.
Para el nodo A el subrbol izquierdo est constituido por los nodos B, D y E. Y el
subrbolderechoestformadoporlosnodosCyF.
LomismoparaelnodoBtieneelsubrbolizquierdoconunnodo(D)yunnodoenel
subrbolderecho(E).
ElnodoDtieneambossubrbolesvacos.
ElnodoCtieneelsubrbolizquierdovacoyelsubrbolderechoconunnodo(F).
rbolbinarioperfectamenteequilibrado:Siparacadanodoelnmerodenodos
enelsubrbolizquierdoyelnmerodenodosenelsubrbolderecho,difierecomo
muchoenunaunidad.
Hayquetenerencuentatodoslosnodosdelrbol.
Elrboldemsarribaesperfectamenteequilibrado.
Ej.rbolquenoesperfectamenteequilibrado:
ElnodoAtiene3nodosenelsubrbolizquierdoysolounoenelsubrbolderecho,
http://www.javaya.com.ar/detalleconcepto.php?codigo=125&inicio=40
2/5
2/25/2016
Estructurasdinmicas:Conceptosderboles
porloquenoesperfectamenteequilibrado.
rbolbinariocompleto:Esunrbolbinarioconhojascomomximoenlosniveles
n1yn(Siendonelniveldelrbol)
Los dos rboles graficados son completos porque son rboles de nivel 3 y hay
nodoshojaenelnivel3enelprimercaso,yhaynodoshojaenlosniveles3y2en
elsegundocaso.
Ej.rbolbinarionocompleto:
http://www.javaya.com.ar/detalleconcepto.php?codigo=125&inicio=40
3/5
2/25/2016
Estructurasdinmicas:Conceptosderboles
Haynodoshojaenlosniveles4,3y2.Nodeberahabernodoshojasenelnivel2.
rbol binario ordenado: Si para cada nodo del rbol, los nodos ubicados a la
izquierda son inferiores al que consideramos raz para ese momento y los nodos
ubicadosaladerechasonmayoresquelaraz.
http://www.javaya.com.ar/detalleconcepto.php?codigo=125&inicio=40
4/5
2/25/2016
Estructurasdinmicas:Conceptosderboles
Ej.Analicemossisetratadeunrbolbinarioordenado:
Paraelnodoquetieneel50:
Losnodosdelsubrbolizquierdosontodosmenoresa50?8,25,30Si
Losnodosdelsubrbolderechosontodosmayoresa50?70Si.
Paraelnodoquetieneel25:
Losnodosdelsubrbolizquierdosontodosmenoresa25?8Si
Losnodosdelsubrbolderechosontodosmayoresa25?30Si.
No hace falta analizar los nodos hoja. Si todas las respuestas son afirmativas
podemosluegodecirquesetratadeunrbolbinarioordenado.
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=125&inicio=40
5/5
2/25/2016
Estructurasdinmicas:Insercindenodosyrecorridodeunrbolbinario
Estructurasdinmicas:Insercindenodos
yrecorridodeunrbolbinario
Para administrar un rbol binario ordenado debemos tener especial cuidado en la
insercin.
Inicialmenteelrbolestvaco,esdecirrazapuntaanull:
Insertamosel400
Insertamoselvalor100.Debemosanalizarsirazesdistintoanullverificamossi100
es mayor o menor a la informacin del nodo apuntado por raz, en este caso es
menorycomoelsubrbolizquierdoesnulldebemosinsertarloall.
Insertamos el 200. Hay que tener en cuenta que siempre comenzamos las
comparaciones a partir de raz. El 200 es menor que 400, descendemos por el
subrbolizquierdo.Luegoanalizamosyvemosqueel200esmayora100,debemos
avanzar por derecha. Como el subrbol derecho es null lo insertamos en dicha
http://www.javaya.com.ar/detalleconcepto.php?codigo=126&inicio=40
1/7
2/25/2016
Estructurasdinmicas:Insercindenodosyrecorridodeunrbolbinario
posicin.
Insertamosel700yelrbolser:
Como podemos observar si cada vez que insertamos un nodo respetamos este
algoritmo siempre estaremos en presencia de un rbol binario ordenado.
Posteriormenteveremoselalgoritmoenjavaparalainsercindeinformacinenel
rbol.
Bsquedadeinformacinenunrbolbinarioordenado.
Esteesunadelosprincipalesusosdelosrbolesbinarios.
http://www.javaya.com.ar/detalleconcepto.php?codigo=126&inicio=40
2/7
2/25/2016
Estructurasdinmicas:Insercindenodosyrecorridodeunrbolbinario
Recorridosderbolesbinarios.
Recorrer:Pasaratravsdelrbolenumerandocadaunodesusnodosunavez.
Visitar:Realizaralgnprocesamientodelnodo.
Losrbolespuedenserrecorridosenvariosrdenes:
Preorden:
Visitarlaraz.
Recorrerelsubrbolizquierdoenpreorden.
Recorrerelsubrbolderechoenpreorden.
Entreorden
Recorrerelsubrbolizquierdoenentreorden.
Visitarlaraz.
Recorrerelsubrbolderechoenentreorden.
Postorden
Recorrerelsubrbolizquierdoenpostorden.
Recorrerelsubrbolderechoenpostorden.
Visitarlaraz.
Ejemplo:
http://www.javaya.com.ar/detalleconcepto.php?codigo=126&inicio=40
3/7
2/25/2016
Estructurasdinmicas:Insercindenodosyrecorridodeunrbolbinario
Veamoscomoseimprimenlasinformacionesdelosnodossegnsurecorrido:
Recorridopreorden:
http://www.javaya.com.ar/detalleconcepto.php?codigo=126&inicio=40
4/7
2/25/2016
Estructurasdinmicas:Insercindenodosyrecorridodeunrbolbinario
Esdecirqueelordendeimpresindelainformacines:
400?100?50?75?200?700
http://www.javaya.com.ar/detalleconcepto.php?codigo=126&inicio=40
5/7
2/25/2016
Estructurasdinmicas:Insercindenodosyrecorridodeunrbolbinario
Esdecirqueelordendeimpresindelainformacines:
50?75?100?200?400?700
Siobservamospodemosverquelainformacinapareceordenada.
Estetipoderecorridoesmuytilcuandoqueremosprocesarlainformacindelrbol
enorden.
Recorridopostorden:
http://www.javaya.com.ar/detalleconcepto.php?codigo=126&inicio=40
6/7
2/25/2016
Estructurasdinmicas:Insercindenodosyrecorridodeunrbolbinario
Esdecirqueelordendeimpresindelainformacines:
75?50?200?100?700?400
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=126&inicio=40
7/7
2/25/2016
Estructurasdinmicas:ImplementacinenJavadeunrbolbinarioordenado
Estructurasdinmicas:Implementacinen
Javadeunrbolbinarioordenado
Problema1:
A continuacin desarrollamos una clase para la administracin de un rbol binario
ordenado.
Programa:
publicclassArbolBinarioOrdenado{
classNodo
{
intinfo
Nodoizq,der
}
Nodoraiz
publicArbolBinarioOrdenado(){
raiz=null
}
publicvoidinsertar(intinfo)
{
Nodonuevo
nuevo=newNodo()
nuevo.info=info
nuevo.izq=null
nuevo.der=null
if(raiz==null)
raiz=nuevo
else
{
Nodoanterior=null,reco
reco=raiz
while(reco!=null)
{
anterior=reco
http://www.javaya.com.ar/detalleconcepto.php?codigo=127&inicio=40
1/13
2/25/2016
Estructurasdinmicas:ImplementacinenJavadeunrbolbinarioordenado
if(info<reco.info)
reco=reco.izq
else
reco=reco.der
}
if(info<anterior.info)
anterior.izq=nuevo
else
anterior.der=nuevo
}
}
privatevoidimprimirPre(Nodoreco)
{
if(reco!=null)
{
System.out.print(reco.info+"")
imprimirPre(reco.izq)
imprimirPre(reco.der)
}
}
publicvoidimprimirPre()
{
imprimirPre(raiz)
System.out.println()
}
privatevoidimprimirEntre(Nodoreco)
{
if(reco!=null)
{
imprimirEntre(reco.izq)
System.out.print(reco.info+"")
imprimirEntre(reco.der)
}
}
publicvoidimprimirEntre()
{
imprimirEntre(raiz)
System.out.println()
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=127&inicio=40
2/13
2/25/2016
Estructurasdinmicas:ImplementacinenJavadeunrbolbinarioordenado
}
privatevoidimprimirPost(Nodoreco)
{
if(reco!=null)
{
imprimirPost(reco.izq)
imprimirPost(reco.der)
System.out.print(reco.info+"")
}
}
publicvoidimprimirPost()
{
imprimirPost(raiz)
System.out.println()
}
publicstaticvoidmain(String[]ar)
{
ArbolBinarioOrdenadoabo=newArbolBinarioOrdenado
abo.insertar(100)
abo.insertar(50)
abo.insertar(25)
abo.insertar(75)
abo.insertar(150)
System.out.println("Impresionpreorden:")
abo.imprimirPre()
System.out.println("Impresionentreorden:")
abo.imprimirEntre()
System.out.println("Impresionpostorden:")
abo.imprimirPost()
}
}
publicvoidinsertar(intinfo)
{
Nodonuevo;
nuevo=newNodo();
nuevo.info=info;
nuevo.izq=null;
http://www.javaya.com.ar/detalleconcepto.php?codigo=127&inicio=40
3/13
2/25/2016
Estructurasdinmicas:ImplementacinenJavadeunrbolbinarioordenado
nuevo.der=null;
if(raiz==null)
raiz=nuevo;
else
{
Nodoanterior=null,reco;
reco=raiz;
while(reco!=null)
{
anterior=reco;
if(info<reco.info)
reco=reco.izq;
else
reco=reco.der;
}
if(info<anterior.info)
anterior.izq=nuevo;
else
anterior.der=nuevo;
}
}
4/13
2/25/2016
Estructurasdinmicas:ImplementacinenJavadeunrbolbinarioordenado
Lavisitaenestecasoeslaimpresindelainformacindelnodoylosrecorridosson
las llamadas recursivas pasando las direcciones de los subrboles izquierdo y
derecho.
Los algoritmos de los recorridos en entreorden y postorden son similares. La
diferenciaesquelavisitalarealizamosentrelasllamadasrecursivasenelrecorrido
enentreorden:
privatevoidimprimirEntre(Nodoreco)
{
if(reco!=null)
{
imprimirEntre(reco.izq);
System.out.print(reco.info+"");
imprimirEntre(reco.der);
}
}
Problema2:
http://www.javaya.com.ar/detalleconcepto.php?codigo=127&inicio=40
5/13
2/25/2016
Estructurasdinmicas:ImplementacinenJavadeunrbolbinarioordenado
Confeccionarunaclasequepermitainsertarunenteroenunrbolbinarioordenado
verificandoquenoseencuentrepreviamentedichonmero.
Desarrollarlossiguientesmtodos:
1Retornarlacantidaddenodosdelrbol.
2Retornarlacantidaddenodoshojadelrbol.
3Imprimirenentreorden.
4Imprimirenentreordenjuntoalniveldondeseencuentradichonodo.
5Retornarlaalturadelrbol.
6Imprimirelmayorvalordelrbol.
7Borrarelnodomenordelrbol.
publicclassArbolBinarioOrdenado{
classNodo
{
intinfo
Nodoizq,der
}
Nodoraiz
intcant
intaltura
publicArbolBinarioOrdenado(){
raiz=null
}
publicvoidinsertar(intinfo){
if(!existe(info)){
Nodonuevo
nuevo=newNodo()
nuevo.info=info
nuevo.izq=null
nuevo.der=null
if(raiz==null)
raiz=nuevo
else{
Nodoanterior=null,reco
reco=raiz
while(reco!=null){
anterior=reco
if(info<reco.info)
reco=reco.izq
http://www.javaya.com.ar/detalleconcepto.php?codigo=127&inicio=40
6/13
2/25/2016
Estructurasdinmicas:ImplementacinenJavadeunrbolbinarioordenado
else
reco=reco.der
}
if(info<anterior.info)
anterior.izq=nuevo
else
anterior.der=nuevo
}
}
}
publicbooleanexiste(intinfo){
Nodoreco=raiz
while(reco!=null){
if(info==reco.info)
returntrue
else
if(info>reco.info)
reco=reco.der
else
reco=reco.izq
}
returnfalse
}
privatevoidimprimirEntre(Nodoreco){
if(reco!=null){
imprimirEntre(reco.izq)
System.out.print(reco.info+"")
imprimirEntre(reco.der)
}
}
publicvoidimprimirEntre(){
imprimirEntre(raiz)
System.out.println()
}
privatevoidcantidad(Nodoreco){
if(reco!=null){
cant++
cantidad(reco.izq)
cantidad(reco.der)
http://www.javaya.com.ar/detalleconcepto.php?codigo=127&inicio=40
7/13
2/25/2016
Estructurasdinmicas:ImplementacinenJavadeunrbolbinarioordenado
cantidad(reco.der)
}
}
publicintcantidad(){
cant=0
cantidad(raiz)
returncant
}
privatevoidcantidadNodosHoja(Nodoreco){
if(reco!=null){
if(reco.izq==null&&reco.der==null)
cant++
cantidadNodosHoja(reco.izq)
cantidadNodosHoja(reco.der)
}
}
publicintcantidadNodosHoja(){
cant=0
cantidadNodosHoja(raiz)
returncant
}
privatevoidimprimirEntreConNivel(Nodoreco,intnivel)
if(reco!=null){
imprimirEntreConNivel(reco.izq,nivel+1)
System.out.print(reco.info+"("+nivel+")")
imprimirEntreConNivel(reco.der,nivel+1)
}
}
publicvoidimprimirEntreConNivel(){
imprimirEntreConNivel(raiz,1)
System.out.println()
}
privatevoidretornarAltura(Nodoreco,intnivel){
if(reco!=null){
retornarAltura(reco.izq,nivel+1)
if(nivel>altura)
altura=nivel
retornarAltura(reco.der,nivel+1)
http://www.javaya.com.ar/detalleconcepto.php?codigo=127&inicio=40
8/13
2/25/2016
Estructurasdinmicas:ImplementacinenJavadeunrbolbinarioordenado
retornarAltura(reco.der,nivel+1)
}
}
publicintretornarAltura(){
altura=0
retornarAltura(raiz,1)
returnaltura
}
publicvoidmayorValorl(){
if(raiz!=null){
Nodoreco=raiz
while(reco.der!=null)
reco=reco.der
System.out.println("Mayorvalordelrbol:"+reco.
}
}
publicvoidborrarMenor(){
if(raiz!=null){
if(raiz.izq==null)
raiz=raiz.der
else{
Nodoatras=raiz
Nodoreco=raiz.izq
while(reco.izq!=null){
atras=reco
reco=reco.izq
}
atras.izq=reco.der
}
}
}
publicstaticvoidmain(String[]ar)
{
ArbolBinarioOrdenadoabo=newArbolBinarioOrdenado(
abo.insertar(100)
abo.insertar(50)
abo.insertar(25)
abo.insertar(75)
abo.insertar(150)
System.out.println("Impresionentreorden:")
http://www.javaya.com.ar/detalleconcepto.php?codigo=127&inicio=40
9/13
2/25/2016
Estructurasdinmicas:ImplementacinenJavadeunrbolbinarioordenado
System.out.println("Impresionentreorden:")
abo.imprimirEntre()
System.out.println("Cantidaddenodosdelrbol:"+ab
System.out.println("Cantidaddenodoshoja:"+abo.can
System.out.println("Impresionenentreordenjuntoa
abo.imprimirEntreConNivel()
System.out.print("Arturadelarbol:")
System.out.println(abo.retornarAltura())
abo.mayorValorl()
abo.borrarMenor()
System.out.println("Luegodeborrarelmenor:")
abo.imprimirEntre()
}
}
Para verificar si existe un elemento de informacin en el rbol disponemos un
puntero reco en el nodo apuntado por raiz. Dentro de un while verificamos si la
informacindelparmetrocoincideconlainformacindelnodoapuntadoporreco,
en caso afirmativo salimos del mtodo retornando true, en caso contrario si la
informacin a buscar es mayor a la del nodo procedemos a avanzar reco con la
direccindelsubrbolderecho:
publicbooleanexiste(intinfo){
Nodoreco=raiz;
while(reco!=null){
if(info==reco.info)
returntrue;
else
if(info>reco.info)
reco=reco.der;
else
reco=reco.izq;
}
returnfalse;
}
Pararetornarlacantidaddenodosdelrbolprocedemosainicializarunatributode
la clase llamado cant con cero. Llamamos al mtodo recursivo y en cada visita al
nodoincrementamoselatributocantenuno:
privatevoidcantidad(Nodoreco){
if(reco!=null){
http://www.javaya.com.ar/detalleconcepto.php?codigo=127&inicio=40
10/13
2/25/2016
Estructurasdinmicas:ImplementacinenJavadeunrbolbinarioordenado
cant++;
cantidad(reco.izq);
cantidad(reco.der);
}
}
publicintcantidad(){
cant=0;
cantidad(raiz);
returncant;
}
Para imprimir todos los nodos en entre orden junto al nivel donde se encuentra
planteamosunmtodorecursivoquelleguelareferenciadelnodoaimprimirjuntoal
niveldedichonodo.Desdeelmtodonorecursivopasamoslareferenciaaraizyun
uno(yaqueraizseencuentraenelprimernivel)
Cada vez que descendemos un nivel le pasamos la referencia del subrbol
respectivojuntoalnivelqueseencuentradichonodo:
privatevoidimprimirEntreConNivel(Nodoreco,intnivel){
if(reco!=null){
imprimirEntreConNivel(reco.izq,nivel+1);
System.out.print(reco.info+"("+nivel+")");
imprimirEntreConNivel(reco.der,nivel+1);
}
}
publicvoidimprimirEntreConNivel(){
imprimirEntreConNivel(raiz,1);
System.out.println();
}
Paraobtenerlaalturadelrbolprocedemosenelmtodonorecursivoainicializarel
atributo altura con el valor cero. Luego llamamos al mtodo recursivo con la
referenciaaraizqueseencuentraenelniveluno.Cadavezquevisitamosunnodo
procedemosaverificarsielparmetronivelsuperaalatributoaltura,endichocaso
actualizamoselatributoalturacondichonivel.
privatevoidretornarAltura(Nodoreco,intnivel){
if(reco!=null){
retornarAltura(reco.izq,nivel+1);
if(nivel>altura)
altura=nivel;
retornarAltura(reco.der,nivel+1);
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=127&inicio=40
11/13
2/25/2016
Estructurasdinmicas:ImplementacinenJavadeunrbolbinarioordenado
}
publicintretornarAltura(){
altura=0;
retornarAltura(raiz,1);
returnaltura;
}
Paraimprimirelmayorvalordelrboldebemosrecorrersiempreporderechahasta
encontrarunnodoquealmacenenullender:
publicvoidmayorValorl(){
if(raiz!=null){
Nodoreco=raiz;
while(reco.der!=null)
reco=reco.der;
System.out.println("Mayorvalordelrbol:"+reco.info);
}
}
Paraborrarelmenorvalordelrbolloprimeroquecomprobamosessielsubrbol
izquierdoesnuloluegoelmenordelrboleselnodoapuntadoporraiz.Luegosiel
subrbolizquierdonoestvacoprocedemosadescendersiempreporlaizquierda
llevando un puntero en el nodo anterior. Cuando llegamos al nodo que debemos
borrar procedemos a enlazar el puntero izq del nodo que se encuentra en el nivel
anteriorconlareferenciadelsubrbolderechodelnodoaborrar:
publicvoidborrarMenor(){
if(raiz!=null){
if(raiz.izq==null)
raiz=raiz.der;
else{
Nodoatras=raiz;
Nodoreco=raiz.izq;
while(reco.izq!=null){
atras=reco;
reco=reco.izq;
}
atras.izq=reco.der;
}
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=127&inicio=40
12/13
2/25/2016
PluginWindowBuilderparacrearinterfacesvisuales.
PluginWindowBuilderparacrearinterfacesvisuales.
El objetivo de este concepto es conocer el empleo del plugin WindowBuilder para el desarrollo de interfaces
visualesarrastrandocomponentes.
A partir de la versin 3.7 de Eclipse (Indigo) se incorpora por defecto el plugin WindowBuilder para la
implementacindeinterfacesvisuales.
Amedidaqueunoarrastracomponentesvisualessobreunformulariosegeneraenformaautomticaelcdigo
Java,estonospermitesermsproductivoseneldesarrollodelainterfazdenuestraaplicacinynosayudaa
concentrarnosenlalgicadenuestroproblema.
PasosparacrearunJFrameconelWindowBuilder
1Creacindeunproyecto.
2Seleccionamoselnombredenuestroproyecto(lollamaremosPruebaWindowBuilder):
http://www.javaya.com.ar/detalleconcepto.php?codigo=128&inicio=40
1/16
2/25/2016
PluginWindowBuilderparacrearinterfacesvisuales.
3AhoraseleccionamoslaopcindelmenFile>New>Other...
http://www.javaya.com.ar/detalleconcepto.php?codigo=128&inicio=40
2/16
2/25/2016
PluginWindowBuilderparacrearinterfacesvisuales.
4SeleccionamoslaopcinlaopcinJFrame:
http://www.javaya.com.ar/detalleconcepto.php?codigo=128&inicio=40
3/16
2/25/2016
PluginWindowBuilderparacrearinterfacesvisuales.
5SeguidamentepresionamoselbotnNext>ydefinimoselnombredelaclaseacrear(Ventana1):
TenemosenestemomentonuestraaplicacinmnimageneradaporelWindowBuilder.Podemosobservarque
en la parte inferior de la ventana central aparecen dos pestaas (Source y Design) estas dos pestaas nos
permitenverelcdigofuentedenuestroJFrameenvistadediseooenvistadecdigoJava:
http://www.javaya.com.ar/detalleconcepto.php?codigo=128&inicio=40
4/16
2/25/2016
PluginWindowBuilderparacrearinterfacesvisuales.
Luegoenvistade"Design":
http://www.javaya.com.ar/detalleconcepto.php?codigo=128&inicio=40
5/16
2/25/2016
PluginWindowBuilderparacrearinterfacesvisuales.
6ConfiguramoselLayoutdeJFramepresionandoelbotnderechodelmousesobreelformulariogeneradoy
seleccionamoslaopcinSetLayout>Absolutelayout(estonospermiteluegodisponercontrolesvisualescomo
JButton,JLabeletc.enposicionesfijasdentrodelJFrame):
7DelaventanaPaletteseleccionamosconelmouseunobjetodelaclaseJButton(presionamosconelmouse
dicha componente, deber aparecer seleccionada) y luego nos desplazamos con el mouse sobre el JFrame y
http://www.javaya.com.ar/detalleconcepto.php?codigo=128&inicio=40
6/16
2/25/2016
PluginWindowBuilderparacrearinterfacesvisuales.
presionamoselbotndelmousenuevamente(enestemomentoapareceelbotndentrodelJFrame):
Entodomomentopodemoscambiarlapestaade"Source"y"Design"paraverelcdigogenerado.Porejemplo
cuandoagregamoselbotnpodemosverqueseagregunobjetodelaclaseJButtonalconstructor:
importjava.awt.BorderLayout
importjava.awt.EventQueue
importjavax.swing.JFrame
importjavax.swing.JPanel
importjavax.swing.border.EmptyBorder
importjavax.swing.JButton
publicclassVentana1extendsJFrame{
privateJPanelcontentPane
/**
*Launchtheapplication.
*/
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
try{
Ventana1frame=newVentana1()
frame.setVisible(true)
}catch(Exceptione){
e.printStackTrace()
}
}
})
}
/**
*Createtheframe.
*/
publicVentana1(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
setBounds(100,100,450,300)
contentPane=newJPanel()
http://www.javaya.com.ar/detalleconcepto.php?codigo=128&inicio=40
7/16
2/25/2016
PluginWindowBuilderparacrearinterfacesvisuales.
contentPane.setBorder(newEmptyBorder(5,5,5,5))
setContentPane(contentPane)
contentPane.setLayout(null)
JButtonbtnNewButton=newJButton("Newbutton")
btnNewButton.setBounds(335,228,89,23)
contentPane.add(btnNewButton)
}
}
Inicializarpropiedadesdelosobjetos.
CrearunproyectoyluegounJFrameconlassiguientescomponentesvisuales:
DoscontrolesdetipoJLabel,dosJTextFieldydosJButton(previamentedefinirellayoutparaelpanelcontenido
enelJFramedetipoAbsoluteLayout)
Si hacemos doble clic con el mouse en la pestaa Ventana1.java podemos maximizar el espacio de nuestro
editorvisual(haciendonuevamentedobleclicvuelvealtamaoanterior)
SeleccionemoselprimerJLabeldenuestroformularioyobservemoslasdistintaspartesquecomponenelplugin
WindowBuilder. En la parte superior izquierda se encuentra la seccin "Structure" donde se muestran las
componentes visuales agregadas al formulario. Aparece resaltada la que se encuentra actualmente
seleccionada.
Enlaparteinferioraparecelaventanade"Properties"opropiedadesdelcontrolvisual
http://www.javaya.com.ar/detalleconcepto.php?codigo=128&inicio=40
8/16
2/25/2016
PluginWindowBuilderparacrearinterfacesvisuales.
Veamosalgunaspropiedadesquepodemosmodificardesdeestaventanayloscambiosqueseproducenenel
cdigofuenteenjava.
LapropiedadtextcambiaeltextoquemuestraelobjetoJLabel.Probemosdedisponereltexto"Ingresenombre
de usuario:". De forma similar hagamos los cambios en la propiedad text de los otros controles visuales de
nuestroJFrame:
http://www.javaya.com.ar/detalleconcepto.php?codigo=128&inicio=40
9/16
2/25/2016
PluginWindowBuilderparacrearinterfacesvisuales.
Si ahora seleccionamos la pestaa inferior para ver la vista de cdigo java: "Source" podemos ver que el
WindowBuilder nos gener automticamente el cdigo para inicializar los textos de los controles JLabel y
JButton:
importjava.awt.BorderLayout
importjava.awt.EventQueue
importjavax.swing.JFrame
importjavax.swing.JPanel
importjavax.swing.border.EmptyBorder
importjavax.swing.JLabel
importjavax.swing.JTextField
importjavax.swing.JButton
publicclassVentana1extendsJFrame{
privateJPanelcontentPane
privateJTextFieldtextField
privateJTextFieldtextField_1
/**
*Launchtheapplication.
*/
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
try{
http://www.javaya.com.ar/detalleconcepto.php?codigo=128&inicio=40
10/16
2/25/2016
PluginWindowBuilderparacrearinterfacesvisuales.
Ventana1frame=newVentana1()
frame.setVisible(true)
}catch(Exceptione){
e.printStackTrace()
}
}
})
}
/**
*Createtheframe.
*/
publicVentana1(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
setBounds(100,100,450,203)
contentPane=newJPanel()
contentPane.setBorder(newEmptyBorder(5,5,5,5))
setContentPane(contentPane)
contentPane.setLayout(null)
JLabellblNewLabel=newJLabel("Ingresenombredeusuario:")
lblNewLabel.setBounds(20,21,149,14)
contentPane.add(lblNewLabel)
JLabellblNewLabel_1=newJLabel("Ingreseclave:")
lblNewLabel_1.setBounds(20,61,125,14)
contentPane.add(lblNewLabel_1)
textField=newJTextField()
textField.setBounds(179,18,225,20)
contentPane.add(textField)
textField.setColumns(10)
textField_1=newJTextField()
textField_1.setBounds(179,58,225,20)
contentPane.add(textField_1)
textField_1.setColumns(10)
JButtonbtnNewButton=newJButton("Aceptar")
btnNewButton.setBounds(178,89,89,23)
contentPane.add(btnNewButton)
JButtonbtnNewButton_1=newJButton("Cancelar")
btnNewButton_1.setBounds(315,89,89,23)
contentPane.add(btnNewButton_1)
}
}
ComopodemosobservarahoracuandosecreanlosobjetosdelaclaseJLabelenelconstructorseinicializan
conlosvalorescargadosenlapropiedadtext:
JLabellblNewLabel=newJLabel("Ingresenombredeusuario:");
.....
http://www.javaya.com.ar/detalleconcepto.php?codigo=128&inicio=40
11/16
2/25/2016
PluginWindowBuilderparacrearinterfacesvisuales.
JLabellblNewLabel_1=newJLabel("Ingreseclave:");
.....
JButtonbtnNewButton=newJButton("Aceptar");
.....
JButtonbtnNewButton_1=newJButton("Cancelar");
.....
Problemapropuesto1
Crearlainterfazvisualqueapareceabajo.Inicializarlaspropiedadesquecorresponde.
Eventos
ParaasociareventoselpluginWindowBuildernosproporcionaunamecnicaparaautomatizarlageneracinde
lasinterfacesquecapturanloseventosdelosobjetosJButton,JMenuItem,JListetc.
Crearemosunainterfazvisualsimilaraesta(trescontrolesdetipoJLabel,dosJTextFieldyunJButton):
http://www.javaya.com.ar/detalleconcepto.php?codigo=128&inicio=40
12/16
2/25/2016
PluginWindowBuilderparacrearinterfacesvisuales.
Hacemos doble clic sobre la palabra performed y vemos que se abre el editor de texto y aparece el siguiente
cdigogeneradoautomticamente:
btnSumar.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
}
});
EnelparmetrodelmtodoaddActionListenerdelbotnquesumaselepasalareferenciaaunainterfaceque
secreadetipoActionListenereimplementaelmtodoactionPerformeddondeagregaremoselcdigonecesario
pararesponderelevento.
ParaesteproblemadebemosrescatarlosvaloresalmacenadosenloscontrolesdetipoJTextField,convertirlos
http://www.javaya.com.ar/detalleconcepto.php?codigo=128&inicio=40
13/16
2/25/2016
PluginWindowBuilderparacrearinterfacesvisuales.
aentero,sumarlosyenviardichoresultadoaunaJLabel.
btnSumar.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
intv1=Integer.parseInt(textField.getText());
intv2=Integer.parseInt(textField_1.getText());
intsuma=v1+v2;
lblResultado.setText(String.valueOf(suma));
}
});
Cuando compilamos vemos que no tenemos acceso al objeto lblResultado ya que est definido como una
variable local al constructor. Si queremos que se definan como atributos de la clase debemos seleccionar la
JLabelypresionar"convertLocaltoField"(convertirdevariablelocalaatributodelaclase):
DespusdeestopodemosaccederdesdeelmtodoactionPerformedalalabel.
Problema
Crear un men de opciones que permita cambiar el color de fondo. Disponer un JMenuBar, un JMenu y 3
objetosdelaclaseJMenuItem.AsociarloseventosrespectivosparacadacontroldetipoJMenuItem.
Lainterfazvisualdebequedarsimilaralasiguiente:
http://www.javaya.com.ar/detalleconcepto.php?codigo=128&inicio=40
14/16
2/25/2016
PluginWindowBuilderparacrearinterfacesvisuales.
Para crear esta interface debemos primero seleccionar la pestaa "Menu" donde se encuentran las
componentesrelacionadasalacreacindemenes.
Debemosagregar(enesteordenlassiguientescomponentes):
1UnJMenuBarenlapartesuperior.
2 Un objeto de la clase JMenu en la barra del JMenuBar (podemos disponer el texto que queremos que se
muestre)
3 Agregamos un objeto de la clase JMenuItem en el sector donde aparece el texto: "Add items here". Los
mismospasoshacemosparaagregarlosotrosdosJMenuItem.
Ahora debemos asociar el evento clic para cado JMenuItem. Seleccionamos primero el control de tipo
JMenuItem y en la ventana de "Properties" presionamos el botn "Show events" y generamos el
actionPerformedparaelJMenuItemseleccionado.
Luegocodificamos:
mntmRojo.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventarg0){
contentPane.setBackground(Color.red);
}
});
Para cambiar el color del JFrame en realidad debemos modificar el color del JPanel que cubre el JFrame. El
objetodelaclaseJPanelllamadocontentPanetieneunmtodollamadosetBackgroundquenospermitefijarel
colordefondo.
DeformasimilarasociamosloseventosparalosotrosdosobjetosdelaclaseJMenuItem:
JMenuItemmntmVerde=newJMenuItem("Verde");
mntmVerde.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
contentPane.setBackground(Color.green);
http://www.javaya.com.ar/detalleconcepto.php?codigo=128&inicio=40
15/16
2/25/2016
PluginWindowBuilderparacrearinterfacesvisuales.
}
});
mnNewMenu.add(mntmVerde);
JMenuItemmntmAzul=newJMenuItem("Azul");
mntmAzul.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
contentPane.setBackground(Color.blue);
}
});
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=128&inicio=40
16/16
2/25/2016
PluginWindowBuilderproblemasresueltos
PluginWindowBuilderproblemasresueltos
Desarrollaremosunaseriedeaplicacionesquerequierancomponentesvisualesyutilizaremosel
WindowBuilderparaagilizarsudesarrollo.
Problema1
Desarrollarunprogramaquemuestreeltablerodeunascensor:
Elfuncionamientoeselsiguiente:
Inicialmenteelascensorestenelpiso1.
Porejemplo:sisepresionaelbotn3semuestraenunJLabelelpisonmero3yenotraJLabel
la direccin. La cadena "Sube", en caso de presionar un piso superior al actual. Mostramos la
cadena "Baja" en el JLabel si se presiona un piso inferior. y si el piso donde se encuentra
actualmentecoincideconelpresionadoluegomostrarelmensaje"Pisoactual".
Algunosconsejosparacrearlainterfazvisual:
1LoprimeroquedebemoshacercadavezquecreamosunJFrameesdefinirelLayoutautilizar
(normalmenteutilizaremos"AbsoluteLayout",estolohacemospresionandoelbotnderechodel
mousedentrodelJFrameyseleccionandolaopcin"SetLayout".
El tipo de layout a utilizar tambin se lo puede fijar seleccionando el objeto "contentPane"(este
objetoesdelaclaseJPanelytodoJFramelocontienecomofondoprincipal)yluegoenlaventana
depropiedadescambiamoslapropiedad"Layot"
2 Cuando creamos el primer JButton definimos el nombre del objeto cambiando la propiedad
"Variable" y mediante la propiedad Text definimos el texto a mostrar (con el mouse
dimensionamoselJButton):
http://www.javaya.com.ar/detalleconcepto.php?codigo=129&inicio=40
1/17
2/25/2016
PluginWindowBuilderproblemasresueltos
3Losotrosbotoneslospodemoscreardelamismamaneraseleccionandounobjetodelaclase
JButtondela"Palette"ocuandotenemosquecrearotrosobjetossemejantespodemospresionar
el botn derecho del mouse sobre el objeto a duplicar y seguidamente en el men contextual
seleccionarlaopcin"Copy"yseguidamentelaopcin"Paste"conloquetendremosotroobjeto
semejante.
Luegosideberemosdefinirunnombreparaelobjeto(propiedad"Variable")ylapropiedad"text"
paralaetiquetaamostrar:
http://www.javaya.com.ar/detalleconcepto.php?codigo=129&inicio=40
2/17
2/25/2016
PluginWindowBuilderproblemasresueltos
4Losobjetosquenecesitemosconsultaromodificarentiempodeejecucindebemosdefinirlos
comoatributosdeclase(tambinllamadoscamposdeclase)
En este problema cuando se presione alguno de los cuatro botones debemos consultar el
contendidodelalabelqueindicaelpisoactualylalabelquemuestraladireccinsermodificada
porotroString.
Para definir un control visual como atributo de clase debemos seleccionarlo y presionar en la
ventana de propiedades el botn "Convert local to field" (en nuetro problema definamos a estos
dosobjetosdelaclaseJLabelconelnombrel1yl2):
5ParacapturareleventoclicdeunobjetodelaclaseJButtondebemosseleccionarloypresionar
http://www.javaya.com.ar/detalleconcepto.php?codigo=129&inicio=40
3/17
2/25/2016
PluginWindowBuilderproblemasresueltos
elbotn"ShowEvents":
yseguidamentehacerdobleclicsobreeleventoaimplementar:
http://www.javaya.com.ar/detalleconcepto.php?codigo=129&inicio=40
4/17
2/25/2016
PluginWindowBuilderproblemasresueltos
Lasolucinaesteproblemaeselsiguiente:
importjava.awt.EventQueue
importjavax.swing.JFrame
importjavax.swing.JPanel
importjavax.swing.border.EmptyBorder
importjavax.swing.JButton
importjavax.swing.JLabel
importjava.awt.event.ActionListener
importjava.awt.event.ActionEvent
publicclassAscensorextendsJFrame{
privateJPanelcontentPane
privateJLabell1
privateJLabell2
http://www.javaya.com.ar/detalleconcepto.php?codigo=129&inicio=40
5/17
2/25/2016
PluginWindowBuilderproblemasresueltos
/**
*Launchtheapplication.
*/
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
try{
Ascensorframe=newAscensor()
frame.setVisible(true)
}catch(Exceptione){
e.printStackTrace()
}
}
})
}
/**
*Createtheframe.
*/
publicAscensor(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
setBounds(100,100,450,300)
contentPane=newJPanel()
contentPane.setBorder(newEmptyBorder(5,5,5,5))
setContentPane(contentPane)
contentPane.setLayout(null)
JButtonb1=newJButton("1")
b1.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
intpisoactual=Integer.parseInt(l1.getText())
if(1<pisoactual)
l2.setText("Baja")
else
l2.setText("Pisoactual")
l1.setText("1")
}
})
b1.setBounds(38,173,53,44)
contentPane.add(b1)
JButtonb2=newJButton("2")
b2.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
intpisoactual=Integer.parseInt(l1.getText())
if(2<pisoactual)
l2.setText("Baja")
else
if(2>pisoactual)
l2.setText("Sube")
http://www.javaya.com.ar/detalleconcepto.php?codigo=129&inicio=40
6/17
2/25/2016
PluginWindowBuilderproblemasresueltos
l2.setText("Sube")
else
l2.setText("Pisoactual")
l1.setText("2")
}
})
b2.setBounds(38,118,53,44)
contentPane.add(b2)
JButtonb3=newJButton("3")
b3.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
intpisoactual=Integer.parseInt(l1.getText())
if(3<pisoactual)
l2.setText("Baja")
else
if(3>pisoactual)
l2.setText("Sube")
else
l2.setText("Pisoactual")
l1.setText("3")
}
})
b3.setBounds(38,63,53,44)
contentPane.add(b3)
JButtonb4=newJButton("4")
b4.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
intpisoactual=Integer.parseInt(l1.getText())
if(4>pisoactual)
l2.setText("Sube")
else
l2.setText("Pisoactual")
l1.setText("4")
}
})
b4.setBounds(38,11,53,44)
contentPane.add(b4)
JLabellblNewLabel=newJLabel("piso")
lblNewLabel.setBounds(186,41,46,14)
contentPane.add(lblNewLabel)
JLabellblDireccion=newJLabel("direccion")
lblDireccion.setBounds(186,93,61,14)
contentPane.add(lblDireccion)
l1=newJLabel("1")
l1.setBounds(272,41,46,14)
http://www.javaya.com.ar/detalleconcepto.php?codigo=129&inicio=40
7/17
2/25/2016
PluginWindowBuilderproblemasresueltos
l1.setBounds(272,41,46,14)
contentPane.add(l1)
l2=newJLabel("baja")
l2.setBounds(272,93,92,14)
contentPane.add(l2)
}
}
Cuandosepresionaelbotn1procedemosaextraerelcontenidodelalabel1quealmacenael
valordelpisoactual,comosepresionelprimerbotnpreguntamossi1esmenoralpisoactual,
en dicho caso mostramos en la label 2 el texto "Baja" en caso contrario significa que estamos
actualmenteenelpiso1(cuandosepresionaelbotn1nuncapuededecireltextosube)Luego
cambiamoslaetiquetadelalabel1conelvalor"1"queeselnuevopiso:
b1.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
intpisoactual=Integer.parseInt(l1.getText());
if(1<pisoactual)
l2.setText("Baja");
else
l2.setText("Pisoactual");
l1.setText("1");
}
});
Elbotn4essimilaralbotn1yaquemostraremoslaetiqueta"Sube"o"Pisoactual":
b4.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
intpisoactual=Integer.parseInt(l1.getText());
if(4>pisoactual)
l2.setText("Sube");
else
l2.setText("Pisoactual");
l1.setText("4");
}
});
Sisepresionaelbotndelsegundopisodebemosverificarsi2esmenor,mayoroigualalpiso
actual(igualparaelbotndeltercerpiso):
b2.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
intpisoactual=Integer.parseInt(l1.getText());
if(2<pisoactual)
l2.setText("Baja");
else
if(2>pisoactual)
http://www.javaya.com.ar/detalleconcepto.php?codigo=129&inicio=40
8/17
2/25/2016
PluginWindowBuilderproblemasresueltos
l2.setText("Sube");
else
l2.setText("Pisoactual");
l1.setText("2");
}
});
Problema2
Desarrollarunprogramaquemuestreunpanelparaextraccindeunabebida:
Por un lado disponer tres objetos de la clase JRadioButton (llamarlos radio1, radio2 y radio 3),
configurarelprimeroparaqueaparezcaseleccionado(propiedad"selected")
DisponerdosobjetosdelaclaseJComboBox(llamarloscomboPesosycomboCentavos)
EnelJComboBoxpesosinicializarlapropiedadmodelconlosvaloresdel0al5(hayquecargar
unvalorporcadalneaeneldilogoqueaparece)
EnformasimilarelsegundoJComboBoxcargamoslosvalores:0,10,20,30etc.hasta90.
Sesabeque:
BebidaAtieneuncostode0pesos80centavos.
BebidaBtieneuncostode1peso20centavos.
BebidaCtieneuncostode3pesos10centavos.
Cuando se presiona el botn extraer mostrar en la label de resultado el texto "Correcto" o
"Incorrecto"dependiendolabebidaseleccionadaylacantidaddepesosycentavosseleccionados.
Solucin:
Para que todos los JRadioButton estn asociados (es decir que cuando se seleccione uno se
deseleccione el actual lo debemos hacer en forma visual), primero seleccionamos con el mouse
todoslosJRadioButton(paraseleccionarvarioscontrolespresionamoslatecla"Ctrl"deltecladoy
con el boton izquierdo del mouse seleccionamos los tres JRadioButton ) y seguidamente
presionamoselbotnderechodelmouseyseleccionamos"Newstandard":
http://www.javaya.com.ar/detalleconcepto.php?codigo=129&inicio=40
9/17
2/25/2016
PluginWindowBuilderproblemasresueltos
AhorayatenemoslostrescontrolesdetipoJRadioButtonagrupados.
Elcdigofuentedelproblemaes:
importjava.awt.EventQueue
importjavax.swing.JFrame
importjavax.swing.JPanel
importjavax.swing.border.EmptyBorder
importjavax.swing.JRadioButton
importjavax.swing.JLabel
importjavax.swing.JComboBox
importjavax.swing.DefaultComboBoxModel
importjavax.swing.JButton
importjava.awt.event.ActionListener
importjava.awt.event.ActionEvent
importjavax.swing.ButtonGroup
publicclassPanelBebidasextendsJFrame{
privateJPanelcontentPane
http://www.javaya.com.ar/detalleconcepto.php?codigo=129&inicio=40
10/17
2/25/2016
PluginWindowBuilderproblemasresueltos
privateJComboBoxcomboPesos
privateJComboBoxcomboCentavos
privateJRadioButtonradio1
privateJRadioButtonradio2
privateJRadioButtonradio3
privateJLabell1
privatefinalButtonGroupbuttonGroup=newButtonGroup()
/**
*Launchtheapplication.
*/
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
try{
PanelBebidasframe=newPanelBebidas()
frame.setVisible(true)
}catch(Exceptione){
e.printStackTrace()
}
}
})
}
/**
*Createtheframe.
*/
publicPanelBebidas(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
setBounds(100,100,600,319)
contentPane=newJPanel()
contentPane.setBorder(newEmptyBorder(5,5,5,5))
setContentPane(contentPane)
contentPane.setLayout(null)
JLabellblNewLabel=newJLabel("Pesos")
lblNewLabel.setBounds(263,59,46,14)
contentPane.add(lblNewLabel)
comboPesos=newJComboBox()
comboPesos.setModel(newDefaultComboBoxModel(newString[]{"0"
comboPesos.setBounds(319,56,73,20)
contentPane.add(comboPesos)
JLabellblNewLabel_1=newJLabel("Centavos")
lblNewLabel_1.setBounds(263,102,58,14)
contentPane.add(lblNewLabel_1)
comboCentavos=newJComboBox()
comboCentavos.addActionListener(newActionListener(){
http://www.javaya.com.ar/detalleconcepto.php?codigo=129&inicio=40
11/17
2/25/2016
PluginWindowBuilderproblemasresueltos
comboCentavos.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventarg0){
}
})
comboCentavos.setModel(newDefaultComboBoxModel(newString[]{
comboCentavos.setBounds(319,96,73,20)
contentPane.add(comboCentavos)
JButtonb1=newJButton("Extraer")
b1.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventarg0){
intpesos=Integer.parseInt((String)comboPesos.getSelec
intcentavos=Integer.parseInt((String)comboCentavos.ge
if(radio1.isSelected()&&pesos==0&¢avos==80)
l1.setText("Correcto")
else
if(radio2.isSelected()&&pesos==1&¢avos==2
l1.setText("Correcto")
else
if(radio3.isSelected()&&pesos==3&¢avo
l1.setText("Correcto")
else
l1.setText("Incorrecto")
}
})
b1.setBounds(30,196,89,23)
contentPane.add(b1)
l1=newJLabel("resultado")
l1.setBounds(148,205,73,14)
contentPane.add(l1)
radio1=newJRadioButton("BebidaA")
buttonGroup.add(radio1)
radio1.setSelected(true)
radio1.setBounds(10,55,109,23)
contentPane.add(radio1)
radio2=newJRadioButton("BebidaB")
buttonGroup.add(radio2)
radio2.setBounds(10,81,109,23)
contentPane.add(radio2)
radio3=newJRadioButton("BebidaC")
buttonGroup.add(radio3)
radio3.setBounds(10,107,109,23)
contentPane.add(radio3)
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=129&inicio=40
12/17
2/25/2016
PluginWindowBuilderproblemasresueltos
Lalgicadelproblemaseencuentracuandosepresionaelbotn"Extraer":
b1.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventarg0){
intpesos=Integer.parseInt((String)comboPesos.getSelectedItem());
intcentavos=Integer.parseInt((String)comboCentavos.getSelectedItem());
if(radio1.isSelected()&&pesos==0&¢avos==80)
l1.setText("Correcto");
else
if(radio2.isSelected()&&pesos==1&¢avos==20)
l1.setText("Correcto");
else
if(radio3.isSelected()&&pesos==3&¢avos==10)
l1.setText("Correcto");
else
l1.setText("Incorrecto");
}
});
Extraemos los contenidos de los dos controles de tipo JComboBox y los convertimos a entero.
Luego mediante tres if verificamos si el primer JRadioButton est seleccionado y el dinero
seleccionado corresponde a exactamente 0 pesos y 80 centavos, en tal caso mostramos en la
labelelmensaje"Correcto".Lalgicaessimilarparalasotrasdosbebidas.
Problema3
Unembalsedebemanejarlacantidaddemts3deaguaquepasaporcadacompuerta.Porcada
compuertapuedepasaruncaudalde100mts3xseg.
Cuando presionamos el botn "Actualizar caudal" mostramos el nivel de caudal actual y un
mensajequeindicasielcaudalesBajo(0a100mts3xseg.),Medio(>100200mts3.xseg.)o
Alto(>200mts3xseg.)
ParalaseleccindelcaudaldecadacompuertautilizarcomponentesdetipoJSpinner.
http://www.javaya.com.ar/detalleconcepto.php?codigo=129&inicio=40
13/17
2/25/2016
PluginWindowBuilderproblemasresueltos
Elcdigofuentees:
importjava.awt.EventQueue
importjavax.swing.JFrame
importjavax.swing.JPanel
importjavax.swing.border.EmptyBorder
importjavax.swing.JSpinner
importjavax.swing.JLabel
importjavax.swing.JButton
importjavax.swing.SpinnerNumberModel
importjava.awt.event.ActionListener
importjava.awt.event.ActionEvent
publicclassEmbalseextendsJFrame{
privateJPanelcontentPane
privateJSpinnerspinner1
privateJSpinnerspinner2
privateJSpinnerspinner3
privateJLabell1
/**
*Launchtheapplication.
*/
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
try{
Embalseframe=newEmbalse()
frame.setVisible(true)
}catch(Exceptione){
e.printStackTrace()
http://www.javaya.com.ar/detalleconcepto.php?codigo=129&inicio=40
14/17
2/25/2016
PluginWindowBuilderproblemasresueltos
}
}
})
}
/**
*Createtheframe.
*/
publicEmbalse(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
setBounds(100,100,450,300)
contentPane=newJPanel()
contentPane.setBorder(newEmptyBorder(5,5,5,5))
setContentPane(contentPane)
contentPane.setLayout(null)
spinner1=newJSpinner()
spinner1.setModel(newSpinnerNumberModel(0,0,100,1))
spinner1.setBounds(31,35,62,20)
contentPane.add(spinner1)
spinner2=newJSpinner()
spinner2.setModel(newSpinnerNumberModel(0,0,100,1))
spinner2.setBounds(31,85,62,20)
contentPane.add(spinner2)
spinner3=newJSpinner()
spinner3.setModel(newSpinnerNumberModel(0,0,100,1))
spinner3.setBounds(31,134,62,20)
contentPane.add(spinner3)
JLabellblCompuerta=newJLabel("compuerta1")
lblCompuerta.setBounds(106,38,82,14)
contentPane.add(lblCompuerta)
JLabellblCompuerta_1=newJLabel("compuerta2")
lblCompuerta_1.setBounds(106,88,82,14)
contentPane.add(lblCompuerta_1)
JLabellblCompuerta_2=newJLabel("compuerta3")
lblCompuerta_2.setBounds(106,137,82,14)
contentPane.add(lblCompuerta_2)
JButtonbtnNewButton=newJButton("Actualizarcaudal")
btnNewButton.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventarg0){
intv1=Integer.parseInt(spinner1.getValue().toString()
intv2=Integer.parseInt(spinner2.getValue().toString()
intv3=Integer.parseInt(spinner3.getValue().toString()
intsuma=v1+v2+v3
http://www.javaya.com.ar/detalleconcepto.php?codigo=129&inicio=40
15/17
2/25/2016
PluginWindowBuilderproblemasresueltos
intsuma=v1+v2+v3
if(suma<=100)
l1.setText("Bajo")
else
if(suma<=200)
l1.setText("Medio")
else
l1.setText("Alto")
}
})
btnNewButton.setBounds(31,198,157,23)
contentPane.add(btnNewButton)
l1=newJLabel("resultado")
l1.setBounds(218,203,149,14)
contentPane.add(l1)
}
}
EneleventoclicdelJButtonextraemoslostresvaloresalmacenadosenlosJSPinner:
intv1=Integer.parseInt(spinner1.getValue().toString());
intv2=Integer.parseInt(spinner2.getValue().toString());
intv3=Integer.parseInt(spinner3.getValue().toString());
y mediante tres if valuamos si la suma es menor o igual a 100 o menor o igual a 200 o en su
defectoesmayora200:
intsuma=v1+v2+v3;
if(suma<=100)
l1.setText("Bajo");
else
if(suma<=200)
l1.setText("Medio");
else
l1.setText("Alto");
Problemapropuesto
1.
Implementarunprogramaparalaextraccindedinerodeuncajeroautomtico.
Sedebepoderfijarlacantidaddedineroaextraer:
DisponeruncontroldetipoJComboBox(disponerlosvalores:0,50,150etc.hasta500)
Por otro lado poder seleccionar el tipo de cuenta (almacenar en otro JComboBox los
textos"CajadeAhorro"y"CuentaCorriente".
Sedebetenerencuentaque:
DeCajadeAhorrosepuedeextraerhasta200.
DeCuentaCorrientesepuedeextraerhasta400.
http://www.javaya.com.ar/detalleconcepto.php?codigo=129&inicio=40
16/17
2/25/2016
PluginWindowBuilderproblemasresueltos
Al presionar el botn extraer mostrar en una label el texto "correcto" si para el tipo de
cuentaelimporteestpermitido.
Inicialmente el cajero tiene almacenado un monto de 3000 pesos. Restar en cada
extraccinelmontorespectivoymostrarelmensaje?fueradeservicio?cuandoseintenta
extraermsdeldineroquehayenelcajero.
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=129&inicio=40
17/17
2/25/2016
ClaseGraphicsysusmtodos
ClaseGraphicsysusmtodos
JavaproporcionalaclaseGraphics,quepermitedibujarelipses,cuadrados,lneas,
mostrar texto y tambin tiene muchos otros mtodos de dibujo. Para cualquier
programador,esesencialelentendimientodelaclaseGraphics,antesdeadentrarse
eneldibujoenJava.
LaclaseGraphicsproporcionaelentornodetrabajoparacualquieroperacingrfica
queserealicedentrodelAWT.
Para poder pintar, un programa necesita un contexto grfico vlido, representado
por una instancia de la clase Graphics. Pero esta clase no se puede instanciar
directamente as que debemos crear un componente y pasarlo al programa como
unargumentoalmtodopaint().
Elnicoargumentodelmtodopaint()esunobjetodeestaclase.LaclaseGraphics
disponedemtodosparasoportartrescategorasdeoperacionesgrficas:
1)Dibujodeprimitivasgrficas,
2)Dibujodetexto,
3)Presentacindeimgenesenformatos*.gify*.jpeg.
Adems,laclaseGraphicsmantieneuncontextogrfico:unreadedibujoactual,
un color de dibujo del Background y otro del Foreground, un Font con todas sus
propiedades, etc.Los ejes estn situados en la esquina superior izquierda. Las
coordenadassemidensiempreenpixels.
Problema1
Crear una aplicacin que utilice las primitivas grficas principales que provee la
claseGraphics:
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
1/23
2/25/2016
ClaseGraphicsysusmtodos
importjava.awt.BorderLayout
importjava.awt.Color
importjava.awt.EventQueue
importjava.awt.Graphics
importjavax.swing.JFrame
importjavax.swing.JPanel
importjavax.swing.border.EmptyBorder
publicclassGrafico1extendsJFrame{
privateJPanelcontentPane
/**
*Launchtheapplication.
*/
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
try{
Grafico1frame=newGrafico1()
frame.setVisible(true)
}catch(Exceptione){
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
2/23
2/25/2016
ClaseGraphicsysusmtodos
e.printStackTrace()
}
}
})
}
/**
*Createtheframe.
*/
publicGrafico1(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
setBounds(100,100,450,300)
contentPane=newJPanel()
contentPane.setBorder(newEmptyBorder(5,5,5,5))
setContentPane(contentPane)
contentPane.setLayout(null)
setBounds(0,0,800,600)
}
publicvoidpaint(Graphicsg)
{
super.paint(g)
g.setColor(Color.blue)
g.drawLine(0,70,100,70)
g.drawRect(150,70,50,70)
g.drawRoundRect(250,70,50,70,6,6)
g.drawOval(350,70,50,70)
int[]vx1={500,550,450}
int[]vy1={70,120,120}
g.drawPolygon(vx1,vy1,3)
g.setColor(Color.red)
g.fillRect(150,270,50,70)
g.fillRoundRect(250,270,50,70,6,6)
g.fillOval(350,270,50,70)
int[]vx2={500,550,450}
int[]vy2={270,320,320}
g.fillPolygon(vx2,vy2,3)
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
3/23
2/25/2016
ClaseGraphicsysusmtodos
SobreescribimoselmtodopaintheredadodelaclaseJFrame:
publicvoidpaint(Graphicsg)
{
El mtodo paint se ejecuta cada vez que el JFrame debe ser redibujado y llega
comoparmetrounobjetodelaclaseGraphics.Esteobjetonospermiteaccederal
fondo del JFrame y utilizando las primitivas grficas dibujar lneas, rectngulos,
elipsesetc.
Lo primero que hacemos dentro de este mtodo es llamar al mtodo paint de la
clase superior para que se pinte el fondo del JFrame y otras componentes
contenidas dentro (para llamar al mtodo paint de la clase JFrame debemos
antecederlapalabraclavesuperypasarelparmetrorespectivo):
super.paint(g);
MedianteelmtodosetColoractivamosuncolor:
g.setColor(Color.blue);
Dibujaunalneadesdelacoordenada(0,70)esdecircolumna0yfila70enpxeles,
hastalacoordenada(100,70).Lalneaesdecolorazul:
g.drawLine(0,70,100,70);
Dibujamosunrectngulodesdelacoordenada(150,70)conunanchode50pxeles
yunaltode70,solosepintaelpermetrodelrectngulodecolorazul):
g.drawRect(150,70,50,70);
SimilaradrawRectmsunvalorderedondeodelosverticesqueleindicamosenel
quintoysextoparmetro:
g.drawRoundRect(250,70,50,70,6,6);
Dibujamosunvalo:
g.drawOval(350,70,50,70);
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
4/23
2/25/2016
ClaseGraphicsysusmtodos
Dibujamosuntringulo(debemosindicarmediantedosvectoreslosvrticesdecada
puntodeltringulo),elprimerpuntoesel(500,70)elsegundopuntoesel(550,120)
yporltimoelpunto(450,120):
int[]vx1={500,550,450};
int[]vy1={70,120,120};
g.drawPolygon(vx1,vy1,3);
Dibujartexto
LaclaseGraphicspermite?dibujar?texto,comoalternativaaltextomostradoenlos
componentesJLabel,JTextFieldyJTextArea.Elmtodoquepermitegraficartexto
sobreelJFramees:
drawString(Stringstr,intx,inty);
Problema2
CrearunaaplicacinqueutilicelasprimitivadrawStringdeJava:
importjava.awt.BorderLayout
importjava.awt.Color
importjava.awt.EventQueue
importjava.awt.Graphics
importjavax.swing.JFrame
importjavax.swing.JPanel
importjavax.swing.border.EmptyBorder
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
5/23
2/25/2016
ClaseGraphicsysusmtodos
publicclassGrafico1extendsJFrame{
privateJPanelcontentPane
/**
*Launchtheapplication.
*/
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
try{
Grafico1frame=newGrafico1()
frame.setVisible(true)
}catch(Exceptione){
e.printStackTrace()
}
}
})
}
/**
*Createtheframe.
*/
publicGrafico1(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
setBounds(100,100,450,300)
contentPane=newJPanel()
contentPane.setBorder(newEmptyBorder(5,5,5,5))
contentPane.setLayout(newBorderLayout(0,0))
setContentPane(contentPane)
setBounds(0,0,800,600)
}
publicvoidpaint(Graphicsg)
{
super.paint(g)
g.setColor(Color.blue)
g.drawString("Primerlinea",10,200)
g.drawString("Segundalinea",10,300)
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
6/23
2/25/2016
ClaseGraphicsysusmtodos
}
ClaseColor
La clase java.awt.Color encapsula colores utilizando el formato RGB (Red, Green,
Blue). Las componentes de cada color primario en el color resultante se expresan
con nmeros enteros entre 0 y 255, siendo 0 la intensidad mnima de ese color y
255lamxima.EnlaclaseColorexistenconstantesparacolorespredeterminados
deusofrecuente:black,white,green,blue,red,yellow,magenta,cyan,orange,pink,
gray,darkGray,lightGray.
Problema3
Crearunaaplicacinquedibuje255lneascreandouncolordistintoparacadauna
deellas:
importjava.awt.BorderLayout
importjava.awt.Color
importjava.awt.EventQueue
importjava.awt.Graphics
importjavax.swing.JFrame
importjavax.swing.JPanel
importjavax.swing.border.EmptyBorder
publicclassGrafico1extendsJFrame{
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
7/23
2/25/2016
ClaseGraphicsysusmtodos
privateJPanelcontentPane
/**
*Launchtheapplication.
*/
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
try{
Grafico1frame=newGrafico1()
frame.setVisible(true)
}catch(Exceptione){
e.printStackTrace()
}
}
})
}
/**
*Createtheframe.
*/
publicGrafico1(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
setBounds(100,100,450,300)
contentPane=newJPanel()
contentPane.setBorder(newEmptyBorder(5,5,5,5))
contentPane.setLayout(newBorderLayout(0,0))
setContentPane(contentPane)
setBounds(0,0,800,255)
}
publicvoidpaint(Graphicsg)
{
super.paint(g)
intfila=0
for(introjo=0rojo<=255rojo++)
{
Colorcol=newColor(rojo,0,0)
g.setColor(col)
g.drawLine(0,fila,800,fila)
fila++
}
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
8/23
2/25/2016
ClaseGraphicsysusmtodos
}
Dentro de un for creamos objetos de la clase Color y fijamos el color de la lnea
seguidamente(conestologramosundegraddelnegroalrojo):
intfila=0;
for(introjo=0;rojo<=255;rojo++)
{
Colorcol=newColor(rojo,0,0);
g.setColor(col);
g.drawLine(0,fila,800,fila);
fila++;
}
Presentacindeimgenes
Java permite incorporar imgenes de tipo GIF y JPEG definidas en ficheros. Se
dispone para ello de la clase java.awt.Image. Para cargar una imagen hay que
indicar la localizacin del archivo y cargarlo mediante el mtodo getImage(). Este
mtodoexisteenlasclasesjava.awt.Toolkit.
Entonces, para cargar una imagen hay que comenzar creando un objeto (o una
referencia) Image y llamar al mtodo getImage() (de Toolkit) Una vez cargada la
imagen,hayquerepresentarla,paralocualseredefineelmtodopaint()parallamar
almtododrawImage()delaclaseGraphics.LosobjetosGraphicspuedenmostrar
imgenes a travs del mtodo: drawImage(). Dicho mtodo admite varias formas,
aunquecasisiemprehayqueincluirelnombredelobjetoimagencreado.
ClaseImage
Unaimagenesunobjetogrficorectangularcompuestoporpixelscoloreados.Cada
pixelenunaimagendescribeuncolordeunaparticularlocalizacindelaimagen.
Acontinuacin,algunosmtodosdelaclaseImage:
La clase Graphics provee el mtodo drawImage() para dibujar imagenes este
mtodoadmitevariasformas:
drawImage(Imagei,intx,inty,ImageObservero)
drawImage(Imagei,intx,inty,intwidth,intheight,ImageObservero)
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
9/23
2/25/2016
ClaseGraphicsysusmtodos
Problema4
CrearunaaplicacinquemuestreunarchivojpgdentrodeunJFrame.
importjava.awt.BorderLayout
importjava.awt.EventQueue
importjava.awt.Graphics
importjava.awt.Image
importjava.awt.Toolkit
importjavax.swing.JFrame
importjavax.swing.JPanel
importjavax.swing.border.EmptyBorder
publicclassGrafico1extendsJFrame{
privateJPanelcontentPane
/**
*Launchtheapplication.
*/
publicstaticvoidmain(String[]args){
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
10/23
2/25/2016
ClaseGraphicsysusmtodos
EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
try{
Grafico1frame=newGrafico1()
frame.setVisible(true)
}catch(Exceptione){
e.printStackTrace()
}
}
})
}
/**
*Createtheframe.
*/
publicGrafico1(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
setBounds(100,100,450,300)
contentPane=newJPanel()
contentPane.setBorder(newEmptyBorder(5,5,5,5))
contentPane.setLayout(newBorderLayout(0,0))
setContentPane(contentPane)
setBounds(0,0,800,600)
}
publicvoidpaint(Graphicsg)
{
super.paint(g)
Toolkitt=Toolkit.getDefaultToolkit()
Imageimagen=t.getImage("imagen1.jpg")
g.drawImage(imagen,0,0,this)
}
}
Creamos un objeto de la clase Toolkit llamando al mtodo esttico de la misma
clase:
Toolkitt=Toolkit.getDefaultToolkit();
11/23
2/25/2016
ClaseGraphicsysusmtodos
Toolkitpasandocomoparmetroelarchivoconlaimagen:
Imageimagen=t.getImage("imagen1.jpg");
PorltimollamamosalmtododrawImageconlareferenciaalobjetodetipoImage,
lacolumna,lafilaylareferenciaalJFramedondedebedibujarse:
g.drawImage(imagen,0,0,this);
Mtodorepaint()
Este es el mtodo que con ms frecuencia es llamado por el programador. El
mtodorepaint()llama?loantesposible?almtodopaint()delcomponente.
Elmtodorepaint()puedeser:
repaint()
repaint(intx,inty,intw,inth)
Las segunda forma permiten definir una zona rectangular de la ventana a la que
aplicarelmtodo.
Problema5
Crearunaaplicacinquemuestreuncrculoenmediodelapantallaymediantedos
botonespermitirquesedesplaceaizquierdaoderecha.
importjava.awt.Color
importjava.awt.EventQueue
importjava.awt.Graphics
importjavax.swing.JFrame
importjavax.swing.JPanel
importjavax.swing.border.EmptyBorder
importjavax.swing.JButton
importjava.awt.event.ActionListener
importjava.awt.event.ActionEvent
publicclassGrafico1extendsJFrame{
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
12/23
2/25/2016
ClaseGraphicsysusmtodos
privateJPanelcontentPane
/**
*Launchtheapplication.
*/
privateintcolumna
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
try{
Grafico1frame=newGrafico1()
frame.setVisible(true)
}catch(Exceptione){
e.printStackTrace()
}
}
})
}
/**
*Createtheframe.
*/
publicGrafico1(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
setBounds(100,100,450,300)
contentPane=newJPanel()
contentPane.setBorder(newEmptyBorder(5,5,5,5))
setContentPane(contentPane)
contentPane.setLayout(null)
JButtonbi=newJButton("Izquierda")
bi.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventarg0){
columna=columna10
repaint()
}
})
bi.setBounds(105,482,89,23)
contentPane.add(bi)
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
13/23
2/25/2016
ClaseGraphicsysusmtodos
JButtonbd=newJButton("Derecha")
bd.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
columna=columna+10
repaint()
}
})
bd.setBounds(556,482,89,23)
contentPane.add(bd)
setBounds(0,0,800,600)
columna=400
}
publicvoidpaint(Graphicsg)
{
super.paint(g)
g.setColor(Color.red)
g.fillOval(columna,300,100,100)
}
Definimosunatributocolumna:
privateintcolumna;
Cuandosepresionaelbotn(bi)restamos10alatributocolumnaypedimosquese
ejecuteelmtodopaint(estoltimollamandoalmtodorepaint()),elmtodorepaint
borratodolodibujadodentrodelJFrameyllamaalpaint:
bi.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventarg0){
columna=columna10;
repaint();
});
El mtodo paint dibuja un crculo utilizando como posicin el valor del atributo
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
14/23
2/25/2016
ClaseGraphicsysusmtodos
columna:
publicvoidpaint(Graphicsg)
{
super.paint(g);
g.setColor(Color.red);
g.fillOval(columna,300,100,100);
}
Problema6
Se debe desarrollar una pantalla para configurar ciertas caractersticas de un
procesadordetexto.
Debeaparecerypoderseleccionarselosmrgenessuperioreinferiordelapgina.
Losmrgenespuedenirenelrangode0a10.Desplazarlaslneasamedidaque
modificamoslosmrgenes.
Porotroladotenemoslaorientacindepgina.Lamismaseadministraatravsde
unJComboBoxquetienedosvaloresposibles(HorizontalyVertical).Cuandoest
seleccionadoenelJComboBoxelStringHorizontaldibujarunrectnguloconbase
mayoralaaltura,ycuandoestseleccionadoelStringVerticaldibujarunrectngulo
conunabasemenor.
Cuando se presiona el botn inicializar la configuracin de mrgenes se inicializan
con0yseseleccionaorientacinhorizontal.
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
15/23
2/25/2016
ClaseGraphicsysusmtodos
importjava.awt.Color
importjava.awt.EventQueue
importjava.awt.Graphics
importjavax.swing.JFrame
importjavax.swing.JPanel
importjavax.swing.border.EmptyBorder
importjavax.swing.JSpinner
importjavax.swing.JLabel
importjavax.swing.JComboBox
importjavax.swing.DefaultComboBoxModel
importjavax.swing.JButton
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
16/23
2/25/2016
ClaseGraphicsysusmtodos
importjavax.swing.SpinnerNumberModel
importjavax.swing.event.ChangeListener
importjavax.swing.event.ChangeEvent
importjava.awt.event.ItemListener
importjava.awt.event.ItemEvent
importjava.awt.event.ActionListener
importjava.awt.event.ActionEvent
publicclassProcesadorTextoextendsJFrame{
privateJPanelcontentPane
privateJSpinnersp1
privateJSpinnersp2
privateJComboBoxcomboBox
/**
*Launchtheapplication.
*/
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
try{
ProcesadorTextoframe=newProcesadorTex
frame.setVisible(true)
}catch(Exceptione){
e.printStackTrace()
}
}
})
}
/**
*Createtheframe.
*/
publicProcesadorTexto(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
setBounds(100,100,573,481)
contentPane=newJPanel()
contentPane.setBorder(newEmptyBorder(5,5,5,5))
setContentPane(contentPane)
contentPane.setLayout(null)
sp1=newJSpinner()
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
17/23
2/25/2016
ClaseGraphicsysusmtodos
sp1=newJSpinner()
sp1.addChangeListener(newChangeListener(){
publicvoidstateChanged(ChangeEventarg0){
repaint()
}
})
sp1.setModel(newSpinnerNumberModel(0,0,10,1))
sp1.setBounds(162,51,55,28)
contentPane.add(sp1)
sp2=newJSpinner()
sp2.addChangeListener(newChangeListener(){
publicvoidstateChanged(ChangeEvente){
repaint()
}
})
sp2.setModel(newSpinnerNumberModel(0,0,10,1))
sp2.setBounds(162,150,55,28)
contentPane.add(sp2)
JLabellblMargenInferior=newJLabel("Margeninferio
lblMargenInferior.setBounds(162,26,109,14)
contentPane.add(lblMargenInferior)
JLabellblMargenSuperior=newJLabel("Margensuperio
lblMargenSuperior.setBounds(162,127,109,14)
contentPane.add(lblMargenSuperior)
JLabellblHoja=newJLabel("Hoja")
lblHoja.setBounds(46,26,46,14)
contentPane.add(lblHoja)
comboBox=newJComboBox()
comboBox.addItemListener(newItemListener(){
publicvoiditemStateChanged(ItemEventarg0){
repaint()
}
})
comboBox.setModel(newDefaultComboBoxModel(newString
comboBox.setBounds(321,55,196,20)
contentPane.add(comboBox)
JLabellblHorientacinDePgina=newJLabel("Horientaci
18/23
lblHorientacinDePgina.setBounds(321,26,203,14)
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
2/25/2016
ClaseGraphicsysusmtodos
lblHorientacinDePgina.setBounds(321,26,203,14)
contentPane.add(lblHorientacinDePgina)
JButtonbtnInicializar=newJButton("Inicializar")
btnInicializar.addActionListener(newActionListener()
publicvoidactionPerformed(ActionEventarg0){
sp1.setValue(0)
sp2.setValue(0)
comboBox.setSelectedIndex(0)
repaint()
}
})
btnInicializar.setBounds(45,247,165,23)
contentPane.add(btnInicializar)
}
publicvoidpaint(Graphicsg)
{
super.paint(g)
g.setColor(Color.blue)
g.drawRect(30,80,100,140)
intms=Integer.parseInt(sp1.getValue().toString())
intmi=Integer.parseInt(sp2.getValue().toString())
g.setColor(Color.red)
g.drawLine(30,80+ms,130,80+ms)
g.drawLine(30,220mi,130,220mi)
Stringdireccion=(String)comboBox.getSelectedItem()
if(direccion.equals("Horizontal"))
g.drawRect(320,120,200,100)
else
g.drawRect(320,120,100,200)
}
}
Explicacindelcdigo.
Para el evento stateChanged de los controles JSpinner se debe llamar al mtodo
repaint()paraquesegrafiquenuevamentelaslneasdemrgenes:
sp1.addChangeListener(newChangeListener(){
publicvoidstateChanged(ChangeEventarg0){
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
19/23
2/25/2016
ClaseGraphicsysusmtodos
repaint();
}
});
sp2.addChangeListener(newChangeListener(){
publicvoidstateChanged(ChangeEvente){
repaint();
}
});
Enelmtodopaintdibujamosprimerounrectngulodecolorazulquerepresentala
hoja:
g.setColor(Color.blue);
g.drawRect(30,80,100,140);
ExtraemoslosvaloresseleccionadosdecadacontrolJSpinnerylosconvertimosa
tipoentero:
intms=Integer.parseInt(sp1.getValue().toString());
intmi=Integer.parseInt(sp2.getValue().toString());
Activamos el color rojo y dibujamos las dos lneas, la superior coincide con el
comienzodelrectngulo(sumamostantospixelesenlafilacomoloindicaelprimer
JSpinner):
g.setColor(Color.red);
g.drawLine(30,80+ms,130,80+ms);
LasegundalnealerestamoselvalordelJSpinner:
g.drawLine(30,220mi,130,220mi);
20/23
2/25/2016
ClaseGraphicsysusmtodos
g.drawRect(320,120,100,200 );
Porltimocuandosepresionaelbotninicializarprocedemosafijarnuevosvalores
alosJSpinneryalJComboBox(luegoredibujamos):
btnInicializar.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventarg0){
sp1.setValue(0);
sp2.setValue(0);
comboBox.setSelectedIndex(0);
repaint();
}
});
Problemaspropuestos
1.
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
21/23
2/25/2016
ClaseGraphicsysusmtodos
2.
En una aduana hay una mquina que sortea las personas cuyo equipaje
sernrevisados.
LapersonaseleccionasivienedelInteriordelpasodelExterior(atravs
de un JComboBox), y por otro lado selecciona la cantidad de bultos
(JSpinner).
Luegopresionaelbotnsortearyaparecealladodeestebotnuncrculo
rojo o verde. (En caso de ser rojo se revisa su equipaje, en caso de ser
verde,noserevisa)
Paraelsorteogenerarunvaloraleatorioentre1y3.Sisegeneraun1se
revisa,sisegeneraun2o3noserevisa.
Validarquetambinesteseleccionadounvalordistintoaceroenbultos(los
valorespuedenirde0a10).
Si la cantidad de bultos supera a 5 se revisa siempre sus bultos (es decir
queapareceuncrculorojo).
Luegodesortearfijarencerocantidaddebultos.
Mostrar en el ttulo del JFrame la cantidad de bultos revisados y no
revisadoshastaelmomento.
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
22/23
2/25/2016
ClaseGraphicsysusmtodos
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40
23/23
2/25/2016
Grficosestadsticos
Grficosestadsticos
El objetivo de este concepto es la implementacin de algoritmos para mostrar
grficosestadsticos.
Problema1
Crear una aplicacin que solicite el ingreso de tres valores por teclado que
representan las cantidades de votos obtenidas por tres partidos polticos. Luego
mostrarungrficodetartas:
Elalgortmoes:
importjava.awt.Color
importjava.awt.EventQueue
importjava.awt.Graphics
http://www.javaya.com.ar/detalleconcepto.php?codigo=131&inicio=40
1/15
2/25/2016
Grficosestadsticos
importjavax.swing.JFrame
importjavax.swing.JPanel
importjavax.swing.border.EmptyBorder
importjavax.swing.JLabel
importjavax.swing.JTextField
importjavax.swing.JButton
importjava.awt.event.ActionListener
importjava.awt.event.ActionEvent
publicclassGraficoTartaextendsJFrame{
privateJPanelcontentPane
privateJTextFieldtf1
privateJTextFieldtf2
privateJTextFieldtf3
privatebooleanbandera=false
/**
*Launchtheapplication.
*/
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
try{
GraficoTartaframe=newGraficoTarta()
frame.setVisible(true)
}catch(Exceptione){
e.printStackTrace()
}
}
})
}
/**
*Createtheframe.
*/
publicGraficoTarta(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
setBounds(100,100,800,600)
contentPane=newJPanel()
contentPane.setBorder(newEmptyBorder(5,5,5,5))
setContentPane(contentPane)
contentPane.setLayout(null)
http://www.javaya.com.ar/detalleconcepto.php?codigo=131&inicio=40
2/15
2/25/2016
Grficosestadsticos
contentPane.setLayout(null)
JLabellblPartido=newJLabel("Partido1:")
lblPartido.setBounds(46,39,61,14)
contentPane.add(lblPartido)
JLabellblPartido_1=newJLabel("Partido2:")
lblPartido_1.setBounds(46,69,61,14)
contentPane.add(lblPartido_1)
JLabellblPartido_2=newJLabel("Partido3:")
lblPartido_2.setBounds(46,103,61,14)
contentPane.add(lblPartido_2)
tf1=newJTextField()
tf1.setBounds(117,36,86,20)
contentPane.add(tf1)
tf1.setColumns(10)
tf2=newJTextField()
tf2.setBounds(117,66,86,20)
contentPane.add(tf2)
tf2.setColumns(10)
tf3=newJTextField()
tf3.setBounds(117,97,86,20)
contentPane.add(tf3)
tf3.setColumns(10)
JButtonbtnGraficar=newJButton("Graficar")
btnGraficar.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventarg0){
bandera=true
repaint()
}
})
btnGraficar.setBounds(45,138,107,37)
contentPane.add(btnGraficar)
}
publicvoidpaint(Graphicsg)
{
super.paint(g)
http://www.javaya.com.ar/detalleconcepto.php?codigo=131&inicio=40
3/15
2/25/2016
Grficosestadsticos
super.paint(g)
if(bandera==true)
{
Strings1=tf1.getText()
Strings2=tf2.getText()
Strings3=tf3.getText()
intv1=Integer.parseInt(s1)
intv2=Integer.parseInt(s2)
intv3=Integer.parseInt(s3)
intsuma=v1+v2+v3
intgrados1=v1*360/suma
intgrados2=v2*360/suma
intgrados3=v3*360/suma
g.setColor(newColor(255,0,0))
g.fillArc(50,250,200,200,0,grados1)
g.fillRect(370,250,20,20)
g.drawString("Partido1",400,270)
g.setColor(newColor(0,128,0))
g.fillArc(50,250,200,200,grados1,grados2)
g.fillRect(370,280,20,20)
g.drawString("Partido2",400,300)
g.setColor(newColor(0,0,255))
g.fillArc(50,250,200,200,grados1+grados2,grados3)
g.fillRect(370,310,20,20)
g.drawString("Partido1",400,330)
}
}
}
Disponemosunifenelmtodopaintparacontrolarquesehayapresionadoelbotn
graficar:
publicvoidpaint(Graphicsg)
{
super.paint(g);
if(bandera==true)
{
http://www.javaya.com.ar/detalleconcepto.php?codigo=131&inicio=40
4/15
2/25/2016
Grficosestadsticos
Elatributobanderaseinicializacuandosedefineconelvalorfalse,estohaceque
cuandoseejecuteporprimeravezelmtodopaintnoingresealif:
privatebooleanbandera=false;
Se definen tres objetos de la clase JTextField para ingresar los tres valores por
teclado:
privateJTextFieldtf1;
privateJTextFieldtf2;
privateJTextFieldtf3;
Cuandosepresionaelbotnsecambiaelestadodelatributobanderaporelvalor
true y se llama al mtodo repaint (recordemos que este mtodo borra el JFrame y
llamaalmtodopaintparaqueahoradibujeelgrficodetarta):
btnGraficar.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventarg0){
bandera=true;
repaint();
}
});
Loprimeroquehacemosparagraficarlatartaesrescatarlostresvaloresingresados
enloscontrolesJTextField:
if(bandera==true)
{
Strings1=tf1.getText();
Strings2=tf2.getText();
Strings3=tf3.getText();
Losconvertimosatipodedatoentero:
intv1=Integer.parseInt(s1);
intv2=Integer.parseInt(s2);
intv3=Integer.parseInt(s3);
Sumamoslostresvalores:
intsuma=v1+v2+v3;
http://www.javaya.com.ar/detalleconcepto.php?codigo=131&inicio=40
5/15
2/25/2016
Grficosestadsticos
http://www.javaya.com.ar/detalleconcepto.php?codigo=131&inicio=40
6/15
2/25/2016
Grficosestadsticos
Elltimotrozolograficamosapartirdelasumadegrados1+grados2yavanzamos
tantosgradoscomoloindicalavariablegrados3:
g.setColor(newColor(0,0,255));
g.fillArc(50,250,200,200,grados1+grados2,grados3);
g.fillRect(370,310,20,20);
g.drawString("Partido1",400,330);
Problema2
Crear una aplicacin que solicite el ingreso de tres valores por teclado que
representan las cantidades de votos obtenidas por tres partidos polticos. Luego
mostrarungrficodebarrashorizontales:
http://www.javaya.com.ar/detalleconcepto.php?codigo=131&inicio=40
7/15
2/25/2016
Grficosestadsticos
Elalgortmoes:
importjava.awt.Color
importjava.awt.EventQueue
importjava.awt.Graphics
importjavax.swing.JFrame
importjavax.swing.JPanel
importjavax.swing.border.EmptyBorder
importjavax.swing.JLabel
importjavax.swing.JTextField
importjavax.swing.JButton
importjava.awt.event.ActionListener
importjava.awt.event.ActionEvent
publicclassGraficoBarraHorizontalextendsJFrame{
privateJPanelcontentPane
privateJTextFieldtf3
privateJTextFieldtf1
privateJTextFieldtf2
privatebooleanbandera=false
/**
*Launchtheapplication.
*/
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
try{
GraficoBarraHorizontalframe=newGrafic
frame.setVisible(true)
}catch(Exceptione){
e.printStackTrace()
}
}
})
}
/**
*Createtheframe.
http://www.javaya.com.ar/detalleconcepto.php?codigo=131&inicio=40
8/15
2/25/2016
Grficosestadsticos
*/
publicGraficoBarraHorizontal(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
setBounds(100,100,800,600)
contentPane=newJPanel()
contentPane.setBorder(newEmptyBorder(5,5,5,5))
setContentPane(contentPane)
contentPane.setLayout(null)
JLabellblPartido=newJLabel("Partido1:")
lblPartido.setBounds(46,39,61,14)
contentPane.add(lblPartido)
JLabellblPartido_1=newJLabel("Partido2:")
lblPartido_1.setBounds(46,69,61,14)
contentPane.add(lblPartido_1)
JLabellblPartido_2=newJLabel("Partido3:")
lblPartido_2.setBounds(46,103,61,14)
contentPane.add(lblPartido_2)
tf1=newJTextField()
tf1.setBounds(117,36,86,20)
contentPane.add(tf1)
tf1.setColumns(10)
tf2=newJTextField()
tf2.setBounds(117,66,86,20)
contentPane.add(tf2)
tf2.setColumns(10)
tf3=newJTextField()
tf3.setBounds(117,97,86,20)
contentPane.add(tf3)
tf3.setColumns(10)
JButtonbtnGraficar=newJButton("Graficar")
btnGraficar.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventarg0){
bandera=true
repaint()
}
})
btnGraficar.setBounds(45,138,107,37)
http://www.javaya.com.ar/detalleconcepto.php?codigo=131&inicio=40
9/15
2/25/2016
Grficosestadsticos
btnGraficar.setBounds(45,138,107,37)
contentPane.add(btnGraficar)
}
publicvoidpaint(Graphicsg)
{
super.paint(g)
if(bandera==true)
{
Strings1=tf1.getText()
Strings2=tf2.getText()
Strings3=tf3.getText()
intv1=Integer.parseInt(s1)
intv2=Integer.parseInt(s2)
intv3=Integer.parseInt(s3)
intmayor=retornarMayor(v1,v2,v3)
intlargo1=v1*400/mayor
intlargo2=v2*400/mayor
intlargo3=v3*400/mayor
g.setColor(newColor(255,0,0))
g.fillRect(100,250,largo1,40)
g.drawString("Partido1",10,270)
g.setColor(newColor(0,128,0))
g.fillRect(100,300,largo2,40)
g.drawString("Partido2",10,320)
g.setColor(newColor(0,0,255))
g.fillRect(100,350,largo3,40)
g.drawString("Partido3",10,370)
}
}
privateintretornarMayor(intv1,intv2,intv3)
{
if(v1>v2&&v1>v3)
returnv1
else
if(v2>v3)
returnv2
http://www.javaya.com.ar/detalleconcepto.php?codigo=131&inicio=40
10/15
2/25/2016
Grficosestadsticos
returnv2
else
returnv3
}
}
La metodologa es similar al problema anterior. Ahora no tenemos grados para
repartir,porloqueimplementaremoselsiguientealgoritmo:
Consideraremosqueelpartidoqueobtuvomsvotoslecorrespondeunabarrade
400pxelesdelargoylosotrosdospartidosselesentregarenformaproporcional.
Lo primero que hacemos es obtener el mayor de los tres valores ingresados por
teclado,paraestoimplementamosunmtodoprivadoqueretorneelmayordetres
valoresenteros:
privateintretornarMayor(intv1,intv2,intv3)
{
if(v1>v2&&v1>v3)
returnv1;
else
if(v2>v3)
returnv2;
else
returnv3;
}
ElelmtodopaintllamamosalmtodoretornarMayor:
intmayor=retornarMayor(v1,v2,v3);
Laecuacinparaobtenerellargodelabarraser:
largo=votosdelpartido/votosdelpartidoconmasvotos*400pxeles.
Como podemos ver esta divisin generar un valor menor a uno salvo para el
partido que tiene ms votos (en este caso la divisin genera el valor 1) luego
multiplicamospor400.
Comenzamosacalcularellargodecadarectngulo:
intlargo1=v1*400/mayor;
Comopodemosverprimeromultiplicamospor400ylodividimosporelmayordelos
http://www.javaya.com.ar/detalleconcepto.php?codigo=131&inicio=40
11/15
2/25/2016
Grficosestadsticos
tresvaloresingresados.
Nuevamenteprimeromultiplicamosyluegodividimosconelobjetivoqueelresultado
deladivisinnonosredondeeacero.
El primer trozo lo graficamos a partir de la columna 100, fila 250 y con un ancho
indicadoenlavariablelargo1(elaltodelabarraesde40pxeles):
g.setColor(newColor(255,0,0));
g.fillRect(100,250,largo1,40);
g.drawString("Partido1",10,270);
Enformasimilargraficamoslosotrosdostrozosdebarra:
g.setColor(newColor(0,128,0));
g.fillRect(100,300,largo2,40);
g.drawString("Partido2",10,320);
g.setColor(newColor(0,0,255));
g.fillRect(100,350,largo3,40);
g.drawString("Partido3",10,370);
Problemapropuesto
1.
Implementarungrficoestadsticodetipo"BarraPorcentual":
http://www.javaya.com.ar/detalleconcepto.php?codigo=131&inicio=40
12/15
2/25/2016
Grficosestadsticos
importjava.awt.Color
publicclassBarraPorcentualextendsJFrame{
privateJPanelcontentPane
privateJTextFieldtf1
privateJTextFieldtf2
privateJTextFieldtf3
privatebooleanbandera=false
/**
*Launchtheapplication.
*/
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
try{
BarraPorcentualframe=newBarraPorcentual()
frame.setVisible(true)
}catch(Exceptione){
e.printStackTrace()
}
}
})
}
/**
*Createtheframe.
*/
publicBarraPorcentual()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
setBounds(100,100,800,600)
contentPane=newJPanel()
contentPane.setBorder(newEmptyBorder(5,5,5,5))
setContentPane(contentPane)
contentPane.setLayout(null)
JLabellblPartido=newJLabel("Partido1:")
lblPartido.setBounds(46,39,61,14)
contentPane.add(lblPartido)
JLabellblPartido_1=newJLabel("Partido2:")
lblPartido_1.setBounds(46,69,61,14)
contentPane.add(lblPartido_1)
JLabellblPartido_2=newJLabel("Partido3:")
lblPartido_2.setBounds(46,103,61,14)
contentPane.add(lblPartido_2)
tf1=newJTextField()
http://www.javaya.com.ar/detalleconcepto.php?codigo=131&inicio=40
13/15
2/25/2016
Grficosestadsticos
tf1.setBounds(117,36,86,20)
contentPane.add(tf1)
tf1.setColumns(10)
tf2=newJTextField()
tf2.setBounds(117,66,86,20)
contentPane.add(tf2)
tf2.setColumns(10)
tf3=newJTextField()
tf3.setBounds(117,97,86,20)
contentPane.add(tf3)
tf3.setColumns(10)
JButtonbtnGraficar=newJButton("Graficar")
btnGraficar.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventarg0){
bandera=true
repaint()
}
})
btnGraficar.setBounds(45,138,107,37)
contentPane.add(btnGraficar)
}
publicvoidpaint(Graphicsg)
{
super.paint(g)
if(bandera==true)
{
Strings1=tf1.getText()
Strings2=tf2.getText()
Strings3=tf3.getText()
intv1=Integer.parseInt(s1)
intv2=Integer.parseInt(s2)
intv3=Integer.parseInt(s3)
intsuma=v1+v2+v3
intlargo1=v1*400/suma
intlargo2=v2*400/suma
intlargo3=v3*400/suma
intporc1=v1*100/suma
intporc2=v2*100/suma
intporc3=v3*100/suma
g.setColor(newColor(255,0,0))
g.fillRect(50,250,largo1,50)
g.setColor(newColor(255,255,255))
g.drawString(porc1+"%",55,270)
g.setColor(newColor(0,128,0))
g.fillRect(50+largo1,250,largo2,50)
g.setColor(newColor(255,255,255))
http://www.javaya.com.ar/detalleconcepto.php?codigo=131&inicio=40
14/15
2/25/2016
Grficosestadsticos
g.drawString(porc2+"%",55+largo1,270)
g.setColor(newColor(0,0,255))
g.fillRect(50+largo1+largo2,250,largo3,50)
g.setColor(newColor(255,255,255))
g.drawString(porc3+"%",55+largo1+largo2,270)
}
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=131&inicio=40
15/15
2/25/2016
JDBCconMySQL
JDBCconMySQL
JDBC son las siglas en ingles de Java Database Connectivity. Es un conjunto de clases que nos permite acceder a
diversosgestoresdebasesdedatosenformatransparente.
VeremoscomoconectarnosconelmotordebasededatosMySQL.
InstalacindeMySQLintegradoenelWampServer
Utilizaremos esta herramienta en lugar de descargar solo el MySQL con la finalizar de facilitar la instalacin y
configuracin del motor de base de datos (la instalacin de esta herramienta es sumamente sencilla), adems
utilizaremosotrasoftwarequeproveeelWampServerqueeselPhpMyAdminquenosfacilitarlacreacindelabase
dedatos.
ProcedemosadescargarelWampServerdelasiguientepgina:aqu.
Luegodedescargarloprocedemosaejecutarelinstalador:
Aceptamoslostrminosycondiciones:
http://www.javaya.com.ar/detalleconcepto.php?codigo=132&inicio=40
1/11
2/25/2016
JDBCconMySQL
Elegimoseldirectoriodondeseinstalar":
Indicamossiqueremosquesecreeunconoenelescritorio:
http://www.javaya.com.ar/detalleconcepto.php?codigo=132&inicio=40
2/11
2/25/2016
JDBCconMySQL
Procedemosapresionarelbotn"Install":
LuegodeinstalarsenossolicitaquenavegadorabrirpordefectocuandoejecutemoselPhpMyAdmin(paralacreacin
delabasededatosdeMySQL):
http://www.javaya.com.ar/detalleconcepto.php?codigo=132&inicio=40
3/11
2/25/2016
JDBCconMySQL
Enelsiguientedilogodejamoslosdatospordefecto:
FinalmenteapareceeldilogofinaldondesenosinformaqueseiniciarelWampServer(esdecirquesecargaren
memoriaentreotrascosaselMySQL):
http://www.javaya.com.ar/detalleconcepto.php?codigo=132&inicio=40
4/11
2/25/2016
JDBCconMySQL
AhorapodemosvereliconosdelWampServerenlabandejadelsistemadeWindows(siseencuentraencolorverde
significaqueelMySQLestejecutndosecorrectamente):
EjecucindelPhpMyAdminparalacreacindelabasededatos.
HaciendoclicsobreelconodelabandejadelsistemaapareceunmenquenospermitelanzarelPhpMyAdminpara
crearlabasededatosdeMySQL:
ElPhpMyAdminesunprogramawebquenospermiteadministrarlasbasesdedatosdelMySQL:
http://www.javaya.com.ar/detalleconcepto.php?codigo=132&inicio=40
5/11
2/25/2016
JDBCconMySQL
Seleccionamoslapestaa"Basededatos"ydondedice"Crearnuevabasededatos"especificamosquenuestrabase
dedatossellamar"bd1":
http://www.javaya.com.ar/detalleconcepto.php?codigo=132&inicio=40
6/11
2/25/2016
JDBCconMySQL
Presionamoselbotn"crear"yconestoyatenemosnuestrabasededatoscreada:
http://www.javaya.com.ar/detalleconcepto.php?codigo=132&inicio=40
7/11
2/25/2016
JDBCconMySQL
Luego de seleccionar la base de datos "bd1" que figura a la izquierda procedemos a crear la primer tabla que
contendr(crearemosunatablallamada"articulos"yquetendrtrescampos):
http://www.javaya.com.ar/detalleconcepto.php?codigo=132&inicio=40
8/11
2/25/2016
JDBCconMySQL
En la tabla "articulos" definimos el campo "codigo" de tipo int (este campo ser el "primary key" y auto_increment lo
tildamosparaqueelcdigosegenereautomticamente),elsegundocampoesladescripcinqueesdetipovarchar
conunmximode50caracteresyporltimoelcampoprecioqueesdetipofloat.
Luegodeespecificarlostrescamposenlaparteinferiordelamismaventanaapareceununbotnllamada"Guardar"
paraconfirmarlaestructuradelatabla:
http://www.javaya.com.ar/detalleconcepto.php?codigo=132&inicio=40
9/11
2/25/2016
JDBCconMySQL
Enelladoizquierdodelnavegadorpodemosverahoraquelabasededatos"bd1"tieneunatablallamada"articulos"
HastaacloquenosayudaelPhpMyAdmin(esdecircreacindelabasededatosylatabla),deahoraenmstodas
las otras actividades las desarrollaremos desde nuestro programa en java (poblar o insertar datos, listar registros,
consultar,modificaryborrardatos)
DescargadelDriverparapermitirconectarnuestroprogramaJavaconelMySQL
http://www.javaya.com.ar/detalleconcepto.php?codigo=132&inicio=40
10/11
2/25/2016
JDBCconMySQL
Como ltima actividad de configuracin previo a implementar los programas en Java para acceder a MySQL es la
descargadelDriverquenospermitaconectarnosconlabasededatos.
ElDriverlopodemosdescargardelapgina:aqu
Podemos descomprimir el archivo mysqlconnectorjava5.1.18.zip que acabamos de descargar. Luego veremos que
en nuestro programa en java haremos referencias al archivo mysqlconnectorjava5.1.18bin.jar (que es el Driver
propiamentedicho)
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=132&inicio=40
11/11
2/25/2016
AltayConsultadeunatabladeMySQL
AltayConsultadeunatabladeMySQL
Problema1
Ya creamos en el concepto anterior una base de datos llamada bd1 y en la misma creamos
unatablallamadaarticulos.
ProcederemosaimplementarenJavaunprogramaquenospermitacomunicarnosconlabase
dedatos"bd1"einsertarfilasenlatabla"articulos"yposteriormenteconsultarsucontenido.
1 Creamos desde Eclipse un proyecto llamado "basededatos01" y seguidamente con el
WindowBuildercreamosunaclasellamada"Formulario".
2 Primero debemos aadir el driver que descargamos (mysqlconnectorjava5.1.18bin.jar)
presionamos el botn derecho del mouse sobre nuestro proyecto y seleccionamos la opcin
"Properties",apareceelsiguientedilogo:
1/8
2/25/2016
AltayConsultadeunatabladeMySQL
http://www.javaya.com.ar/detalleconcepto.php?codigo=133&inicio=40
2/8
2/25/2016
AltayConsultadeunatabladeMySQL
Expliquemosahoraelcdigofuentedelaaplicacin:
Primero debemos cargar en memoria el Driver, esto lo hacemos mediante el mtodo
cargarDriverqueesllamadoluegodesdeelconstructordelaclase:
privatevoidcargarDriver(){
try{
Class.forName("com.mysql.jdbc.Driver");
}catch(Exceptionex){
setTitle(ex.toString());
}
}
Tenemosunaclasellamada"Class"quetieneunmtodoestticollamadoforName,almismo
hayquepasarelnombredelaclaseaimportar:
Class.forName("com.mysql.jdbc.Driver");
com.mysql.jdbceselnombredelpaquetedondeseencuentralaclaseDriver.Estaellaforma
queimportamoslosdriverenJava.
El mtodo forName de la clase Class genera excepciones de tipo Excepcion que deben ser
capturadasobligatoriamente(luegoporesoencerramoselcdigoenunbloquetry/catch.
Si no importamos el driver desde el dilogo Properties del proyecto o indicamos en forma
incorrectaelnombredelpaqueteoclaseluegoapareceenelttulodelJFrameunmensajedel
errorsucedido.
http://www.javaya.com.ar/detalleconcepto.php?codigo=133&inicio=40
3/8
2/25/2016
AltayConsultadeunatabladeMySQL
LuegodesdeelconstructorllamamospornicavezalmtodocargarDriver:
...........
tf3=newJTextField();
tf3.setBounds(247,176,86,20);
contentPane.add(tf3);
tf3.setColumns(10);
cargarDriver();
Veamosahoracualeselcdigoaimplementarcuandosepresionaelbotn"Alta":
JButtonbtnAlta=newJButton("Alta");
btnAlta.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventarg0){
labelResultado.setText("");
try{
Connectionconexion=DriverManager.getConnection("jdbc:mysql://localhost/bd1","r
Statementcomando=conexion.createStatement();
comando.executeUpdate("insertintoarticulos(descripcion,precio)values('"+tf1
conexion.close();
labelResultado.setText("seregistraronlosdatos");
tf1.setText("");
tf2.setText("");
}catch(SQLExceptionex){
setTitle(ex.toString());
}
}
});
EnelactionPerformedprocedemosprimeroalimpiarlalabelquepuedetenerunmensajede
ejecucionesanteriores:
labelResultado.setText("");
Todas las clases orientadas al acceso a base de datos generan excepciones de tipo
SQLExceptionydebensercapturadasobligatoriamente.Loprimeroquehacemosescrearun
objeto de la clase Connection, para esto la clase DriverManager tiene un mtodo llamado
getConnectionqueretornaunobjetodelaclaseConnection:
Connectionconexion=DriverManager.getConnection("jdbc:mysql://localhost/bd1","r
ElmtodogetConnectiondebemospasarletresString,elprimeroindicaelnombredelabase
dedatosquequeremosacceder(enestecaso"bd1"),elsegundoparmetroeselnombrede
usuario(recordemosquecuandoinstalamoselMySQLsecreaunusuariopordefectollamado
http://www.javaya.com.ar/detalleconcepto.php?codigo=133&inicio=40
4/8
2/25/2016
AltayConsultadeunatabladeMySQL
"root")yelltimoparmetroellaclavedelusuario"root",pordefectoestaclaveesunString
vaco.
Como podemos ver tambin previo a la base de datos tenemos en la cadena de conexin el
nombredenuestroservidor(localhost)
Sinosequivocamosporejemploconelnombredebasededatosacomunicarnos(porejemplo
cambiar"bd1"por"bdx")veremosenelttulodelJFrameelmensajedeerrorquenosdevuelve
elMySQL:
LuegocreamosunobjetodelaclaseStatementapartirdelobjetodelaclaseConnectionque
acabamosdecrear:
Statementcomando=conexion.createStatement();
LaclaseStatementtieneunmtodollamadoexecuteUpdatequelepasamoselcomandoSQL
insertparaagregarunafilaalatablaarticulos:
comando.executeUpdate("insertintoarticulos(descripcion,precio)values('"+tf1
ComopodemosvergeneramoselStringconelcomandoinsertrescatandolosdatosdelosdos
controlesdetipoJTextField.EsimportantenotarqueenJavalosStringestnencerradosentre
comillas dobles y los contatenamos con el operador +. Las comillas simples son necesarias
paraloscamposdetipovarchardeMySql(comopodemosnotarellugardondesedispondrel
textodeladescripcindelartculodebenirobligatoriamentelascomillassimples):
http://www.javaya.com.ar/detalleconcepto.php?codigo=133&inicio=40
5/8
2/25/2016
AltayConsultadeunatabladeMySQL
...'"+tf1.getText()+"'...
SinosolvidamoslascomillassimplesalgenerarelStringconelcomandoInsertelMySQLnos
devolver un error que ser capturado por el try/catch, por ejemplo si lo ejecutamos con la
siguientesintaxis(sinlascomillassimplesenvolviendoelvalordeladescripcin):
comando.executeUpdate("insertintoarticulos(descripcion,precio)values("+tf1.
LuegodesolicitarlaejecucindelcomandoInsertalMySQLprocedemosallamaralmtodo
closedelaclaseConnection:
conexion.close();
Conlovistoyapodemosagregarfilasalatablaarticulos.Veamosahoracomoconsultardatos.
Elcdigoaimplementarcuandosepresionaelbotn"Consultaporcdigo"eselsiguiente:
http://www.javaya.com.ar/detalleconcepto.php?codigo=133&inicio=40
6/8
2/25/2016
AltayConsultadeunatabladeMySQL
btnConsultaPorCdigo=newJButton("Consultaporcdigo");
btnConsultaPorCdigo.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventarg0){
labelResultado.setText("");
tf1.setText("");
tf2.setText("");
try{
Connectionconexion=DriverManager.getConnection("
Statementcomando=conexion.createStatement();
ResultSetregistro=comando.executeQuery("select
if(registro.next()==true){
tf1.setText(registro.getString("descripci
tf2.setText(registro.getString("precio"))
}else{
labelResultado.setText("Noexisteunart
conexion.close();
}catch(SQLExceptionex){
setTitle(ex.toString());
}
});
DeformasimilaralInsertprocedemosacrearunobjetodelaclaseConnectionyotroobjetode
laclaseStatement:
Connectionconexion=DriverManager.getConnection("
Statementcomando=conexion.createStatement();
ResultSetregistro=comando.executeQuery("select
LaclaseResultSetlopodemosimaginarcomounatablacontodoslosdatosrecuperadosdel
comandoSQLselectqueacabadeejecutarelMySQL.Enesteejemplopuederetornarunafila
o ninguna ya que estamos utilizando la clusula where y preguntando por el campo clave
codigo.
Paraaccederalregistrodevueltodebemosllamaralmtodonext(),siretornatrueesquesise
recuper una fila de la tabla articulos (es decir si existe el codigo de articulo ingresado), en
caso que retorne false el mtodo next() significa que no hay un artculo con el cdigo que
ingresamosenelcontrolJTextField:
http://www.javaya.com.ar/detalleconcepto.php?codigo=133&inicio=40
7/8
2/25/2016
AltayConsultadeunatabladeMySQL
if(registro.next()==true){
tf1.setText(registro.getString("descripci
tf2.setText(registro.getString("precio"))
}else{
labelResultado.setText("Noexisteunart
}
Esteproyectolopuededescargarenunzipdesdeesteenlace:basededatos01.zip
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=133&inicio=40
8/8
2/25/2016
BajaymodificacindedatosdeunatabladeMySQL
Bajaymodificacindedatosdeunatablade
MySQL
Problema1
Yacreamosanteriormenteunabasededatosllamadabd1yenlamismacreamosunatabla
llamadaarticulos.
ProcederemosaimplementarenJavaunprogramaquenospermitacomunicarnosconlabase
dedatos"bd1"yconsultar,borrarymodificarfilasenlatabla"articulos".
1 Creamos desde Eclipse un proyecto llamado "basededatos02" y seguidamente con el
WindowBuildercreamosunaclasellamada"Formulario".
2 Primero debemos aadir el driver que descargamos (mysqlconnectorjava5.1.18bin.jar)
presionamos el botn derecho del mouse sobre nuestro proyecto y seleccionamos la opcin
"Properties",apareceelsiguientedilogo:
http://www.javaya.com.ar/detalleconcepto.php?codigo=134&inicio=60
1/4
2/25/2016
BajaymodificacindedatosdeunatabladeMySQL
importjava.awt.EventQueue;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjavax.swing.border.EmptyBorder;
importjavax.swing.JLabel;
importjavax.swing.JTextField;
importjavax.swing.JButton;
importjava.awt.event.ActionListener;
importjava.awt.event.ActionEvent;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement;
publicclassFormularioextendsJFrame{
privateJPanelcontentPane;
privateJTextFieldtf1;
privateJTextFieldtf2;
privateJLabellabelResultado;
privateJButtonbtnConsultaPorCdigo;
privateJTextFieldtf3;
/**
http://www.javaya.com.ar/detalleconcepto.php?codigo=134&inicio=60
2/4
2/25/2016
BajaymodificacindedatosdeunatabladeMySQL
btnConsultaPorCdigo=newJButton("Consultaporcdigo");
btnConsultaPorCdigo.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventarg0){
labelResultado.setText("");
tf1.setText("");
tf2.setText("");
try{
Connectionconexion=DriverManager.getConnection("
Statementcomando=conexion.createStatement();
ResultSetregistro=comando.executeQuery("select
if(registro.next()==true){
tf1.setText(registro.getString("descripci
tf2.setText(registro.getString("precio"))
}else{
labelResultado.setText("Noexisteunart
conexion.close();
}catch(SQLExceptionex){
setTitle(ex.toString());
}
});
Veamoselcdigoparaefectuarunabajaenlatablaarticulos:
btnNewButton.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventarg0){
labelResultado.setText("");
try{
Connectionconexion=DriverManager.getConnection("jdbc:mysql://localhost/bd1","r
Statementcomando=conexion.createStatement();
intcantidad=comando.executeUpdate("deletefromarticuloswherecodigo="+tf3.
if(cantidad==1){
tf1.setText("");
tf2.setText("");
labelResultado.setText("Seborroelartculocondichocdigo");
}else{
labelResultado.setText("Noexisteunartculocondichocdigo");
}
conexion.close();
}catch(SQLExceptionex){
setTitle(ex.toString());
}
}
});
LuegodecrearunobjetodelaclaseStatementprocedemosallamaralmtodoexecuteUpdate
conuncomandoSQLvlido(deletefromarticuloswherecodigo=cdigodeartculo)Elcdigo
deartculoloextraemosdeltercerJTextField.
http://www.javaya.com.ar/detalleconcepto.php?codigo=134&inicio=60
3/4
2/25/2016
BajaymodificacindedatosdeunatabladeMySQL
ElmtodoexecuteUpdateretornaunenteroquerepresentalacantidadderegistrosborrados
delatablaarticulos.LuegoencasoqueretorneununoprocedemosamostrarenunJLabelel
mensaje"Seborroelartculocondichocdigo",encasocontrariomostramoselmensaje"No
existeunartculocondichocdigo".
Paralamodificacinprocedemosdeformamuysimilaralborrado:
btnNewButton_1.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
labelResultado.setText("");
try{
Connectionconexion=DriverManager.getConnection("jdbc:mysql://localhost/bd1","r
Statementcomando=conexion.createStatement();
intcantidad=comando.executeUpdate("updatearticulossetdescripcion='"+tf1
"precio="+tf2.getText()+"wherecodigo="+t
if(cantidad==1){
labelResultado.setText("Semodificoladescripcionyelpreciodelartculoc
}else{
labelResultado.setText("Noexisteunartculocondichocdigo");
}
conexion.close();
}catch(SQLExceptionex){
setTitle(ex.toString());
}
}
});
AlmtodoexecuteUpdatelepasamosuncomandoSQLdetipoupdate.Debemosconcatenar
losdatosfijosdelcomandoupdateconlosvaloresqueextraemosdelosJTextField:
intcantidad=comando.executeUpdate("updatearticulossetdescripcion='"+tf1
"precio="+tf2.getText()+"wherecodigo="+t
Esimportantenotarlascomillassimplesluegodelcaracter=,estodebidoaquesetratadeun
campodetipovarchar.
Nuevamente el mtodo executeUpdate retorna la cantidad de registros modificados. En caso
queretorneun1significaquesemodificaronlosdatoscorrectamente.
Esteproyectolopuededescargarenunzipdesdeesteenlace:basededatos02.zip
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=134&inicio=60
4/4
2/25/2016
Instalacindel"EclipseIDEforJavaEEDevelopers"yelservidor"ApacheTomcat"
Instalacindel"EclipseIDEforJavaEEDevelopers"y
elservidor"ApacheTomcat"
"EclipseIDEforJavaEEDevelopers"
ParadesarrollaraplicacionesqueseejecutenenunservidorwebdebemosutilizarlaversindeEclipseque
vienecontodosloscomplementosquefacilitaneldesarrollo.
LaversinquedebemosdescargaresEclipseIDEforJavaEEDevelopers,comopodemosvereltamaos
esmayorquelaversinquehemosutilizadohastaestemomento(EclipseIDEforJavaDevelopers)
PodemoscrearotracarpetaconotronombreparanoperderlaversindeEclipsequehemosutilizadopara
eldesarrollodeaplicacionesdeescritorio(swing)
Creemoslacarpetaeclipsej2eeydentrodelamismadescomprimamoselentornodeEclipsequeacabamos
dedescargar"EclipseIDEforJavaEEDevelopers".
Cuando ejecutamos el Eclipse nos pide seleccionar la carpeta donde se almacenarn los proyectos que
crearemos y aparece el siguiente entorno (como podemos ver prcticamente igual que la versin "Java
Developers"conunttulodistinto):
PerosiingresamosalmendeopcionesFile>Newveremosquenospermitecrearunaseriedeproyectos
muydistintosalaotraversindeEclipse:
http://www.javaya.com.ar/detalleconcepto.php?codigo=135&inicio=60
1/8
2/25/2016
Instalacindel"EclipseIDEforJavaEEDevelopers"yelservidor"ApacheTomcat"
"ApacheTomcat"
Ahorapasaremosainstalarunservidorweb"ApacheTomcat"quenospermitirejecutarservletypginas
dinmicas.
Podemos descargar el "Apache Tomcat" de aqu (descargar el archivo Binary Distributions Core 32bit
Windowszip)ydescomprimirloenunacarpeta.
Una vez descomprimido procedemos a registrarlo en Eclipse. Desde el men de opciones seleccionamos
Window>PreferencesyeneldilogoqueaparecedebemosseleccionarServer>RuntimesEnvironments
ypresionarelbotn"Add...":
http://www.javaya.com.ar/detalleconcepto.php?codigo=135&inicio=60
2/8
2/25/2016
Instalacindel"EclipseIDEforJavaEEDevelopers"yelservidor"ApacheTomcat"
En el nuevo dilogo que aparece seleccionamos de la carpeta "Apache" la versin 7 que es la que
acabamosdedescargarydescomprimirenunacarpetadenuestrodiscoduro:
http://www.javaya.com.ar/detalleconcepto.php?codigo=135&inicio=60
3/8
2/25/2016
Instalacindel"EclipseIDEforJavaEEDevelopers"yelservidor"ApacheTomcat"
Enelltimodilogoqueaparecedebemosseleccionarlacarpetadondehemosdescomprimidoel"Apache
Tomcat"ypresionarelbotn"Finish:
http://www.javaya.com.ar/detalleconcepto.php?codigo=135&inicio=60
4/8
2/25/2016
Instalacindel"EclipseIDEforJavaEEDevelopers"yelservidor"ApacheTomcat"
Ahoradebemosiniciarlosserviciosdelservidos"ApacheTomcat"parapodeshaceraplicacionesquehagan
peticiones.
Para arrancar el Tomcat debemos presionar el botn derecho del mouse sobre la ventana "Server", si no
pareceestaventanapodemosactivarladesdeelmen(Window>ShowView>Servers)yseguidamente
seleccionardelmencontextuallaopcinNew>Server:
http://www.javaya.com.ar/detalleconcepto.php?codigo=135&inicio=60
5/8
2/25/2016
Instalacindel"EclipseIDEforJavaEEDevelopers"yelservidor"ApacheTomcat"
Enestedilogoseleccionamos"Apache"TomcatV7.0ypresionamoselbotn"Finish":
http://www.javaya.com.ar/detalleconcepto.php?codigo=135&inicio=60
6/8
2/25/2016
Instalacindel"EclipseIDEforJavaEEDevelopers"yelservidor"ApacheTomcat"
Como podemos ver ya tenemos el "Tomcat" listo para poderlo utilizar en los distintos proyectos que
implementaremos:
http://www.javaya.com.ar/detalleconcepto.php?codigo=135&inicio=60
7/8
2/25/2016
Instalacindel"EclipseIDEforJavaEEDevelopers"yelservidor"ApacheTomcat"
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=135&inicio=60
8/8
2/25/2016
Servlet
Servlet
Un servlet es una clase que se ejecuta en el contexto de un servidor web (en nuestro caso el Apache
Tomcat)
Unservletseejecutaenunservidorwebyelresultadodeejecucinviajaporinternetparaservisualizadoen
unnavegadorweb(normalmenteunservletgeneraHTML,peropuedegenerarotrosformatosdearchivos)
VeremoslospasosenEclipseparacrearunservletmnimoquenosmuestreunmensajeylosnmerosdel1
al10000.
DesdeelmendeopcionesseleccionamosFile>New>DynamicWebProject:
En el dilogo siguiente especificamos el nombre del proyecto (en nuestro caso le llamaremos
proyectoservlet1)ypresionamoselbotn"Finish":
http://www.javaya.com.ar/detalleconcepto.php?codigo=136&inicio=60
1/9
2/25/2016
Servlet
ElEclipsenoscreaunaseriedecarpetasyarchivosdondealojaremoslosservlet:
Ahora presionamos el botn derecho sobre el nombre del proyecto y seleccionamos la opcin New >
Servlet:
http://www.javaya.com.ar/detalleconcepto.php?codigo=136&inicio=60
2/9
2/25/2016
Servlet
En el dilogo siguiente especificamos el nombre de nuestro servlet (en nuestro ejemplo le llamaremos
HolaMundo),presionamoselbotn"Finish"yyatenemoselesqueletobsicodeunservlet:
Elcdigofuentegeneradoeselsiguiente:
http://www.javaya.com.ar/detalleconcepto.php?codigo=136&inicio=60
3/9
2/25/2016
Servlet
importjava.io.IOException;
importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
/**
*ServletimplementationclassHolaMundo
*/
@WebServlet("/HolaMundo")
publicclassHolaMundoextendsHttpServlet{
privatestaticfinallongserialVersionUID=1L;
/**
*@seeHttpServlet#HttpServlet()
*/
publicHolaMundo(){
super();
//TODOAutogeneratedconstructorstub
}
/**
*@seeHttpServlet#doGet(HttpServletRequestrequest,HttpServletResponseresponse)
*/
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServlet
//TODOAutogeneratedmethodstub
}
TodoservletdebeheredardelaclaseHttpServletqueseencuentraenelpaquetejavax.servlet.http
Esta clase debe sobreescribir el mtodo doGet o doPost (o ambos) En el protocolo HTTP las peticiones
puedenserdetipopost(cuandollamamosaunapginadesdeunformularioHTML)ydetipoget(pginas
sinformulario)
Nuestroproblemaesmostrarunmensajeeimprimirlosnmerosdel1al10000,estaactividadlaharemosen
elmtododoGet.
ElalgoritmoaimplementarenelmtododoGetparadichasalidaes:
http://www.javaya.com.ar/detalleconcepto.php?codigo=136&inicio=60
4/9
2/25/2016
Servlet
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
/**
*ServletimplementationclassHolaMundo
*/
@WebServlet("/HolaMundo")
publicclassHolaMundoextendsHttpServlet{
privatestaticfinallongserialVersionUID=1L;
/**
*@seeHttpServlet#HttpServlet()
*/
publicHolaMundo(){
super();
//TODOAutogeneratedconstructorstub
}
/**
*@seeHttpServlet#doGet(HttpServletRequestrequest,HttpServletResponseresponse)
*/
Una parte importante de la declaracin del servlet que nos genera automticamente el Eclipse es la
anotacin @WebServlet (esta lnea registra el servlet para todas las peticiones al servidor con la sintaxis
http://localhost:8080/proyectoservlet1/HolaMundo):
@WebServlet("/HolaMundo")
Obtenemos una referencia de un objeto de la clase PrintWriter (debemos importar la clase PrintWriter)
mediantelallamadaalmtodogetWriterdelobjetoresponsequellegacomoparmetroalmtododoGet:
PrintWriterout=response.getWriter();
Todas las salidas son llamando al mtodo println del objeto out de la clase PrintWriter. Como vemos
generamos como salida HTML, para mostrar los nmeros del 1 al 10000 es ms conveniente utilizar una
estructurarepetitivaquehacerunasalidasecuencial.
Para probar el servlet que acabamos de codificar debemos presionar el botn derecho del mouse sobre el
nombredelaclaseyseleccionar"RunonServer":
http://www.javaya.com.ar/detalleconcepto.php?codigo=136&inicio=60
5/9
2/25/2016
Servlet
Apareceundilogoquedebemosseleccionarelbotn"Finish"yaqueestseleccionadoelservidor"Tomcat"
paraejecutarelservlet:
http://www.javaya.com.ar/detalleconcepto.php?codigo=136&inicio=60
6/9
2/25/2016
Servlet
ElresultadodelaejecucindelservletlopodemosverdentrodeunaventanadentrodelmismoEclipse:
http://www.javaya.com.ar/detalleconcepto.php?codigo=136&inicio=60
7/9
2/25/2016
Servlet
SiqueremosqueelresultadoaparezcaenotronavegadorpodemosconfigurardesdeelmendeEclipseel
navegadorquemuestraelresultadoquedevuelveTomcat:
http://www.javaya.com.ar/detalleconcepto.php?codigo=136&inicio=60
8/9
2/25/2016
RecuperacindelosdatosdeunformularioHTMLenunservlet
RecuperacindelosdatosdeunformularioHTMLen
unservlet
VeremosahoraqueunservletpuederecibirdatosdeunformualrioHTML.
Implementaremos un formulario HTML que solicite el ingrese del nombre y clave de un usuario y
posteriormenterecuperaremoslosdosdatosenunservletylosmostraremosenotrapginagenerada
porelservlet.
Primerocrearemosunproyectollamadoproyectoservlet2.
Paracrearelarchivohtmlconelformulariopresionamoselbotnderechodelmousesobrelacarpeta
WebContent:
En el dilogo siguiente especificamos el nombre del archivo html, en nuestro caso lo llamaremos
formulario1.html:
http://www.javaya.com.ar/detalleconcepto.php?codigo=137&inicio=60
1/6
2/25/2016
RecuperacindelosdatosdeunformularioHTMLenunservlet
Codificamoslapginahtmlconelformulariowebquesolicitaelingresodelnombredeusuarioysu
clave:
<!DOCTYPEhtmlPUBLIC"//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loos
<html>
<head>
<metahttpequiv="ContentType"content="text/html;charset=ISO88591">
<title>Inserttitlehere</title>
</head>
<body>
<formmethod="post"action="RecuperacionUsuario">
Ingresenombredeusuario:
<inputtype="text"name="usuario"size="20"><br>
Ingreseclave:
<inputtype="password"name="clave"size="20"><br>
<inputtype="submit"value="confirmar">
</form>
</body>
</html>
Lomsimportantecuandocreamoselformulariowebeslaespecificacindelapropiedadactiondela
marcaformconelnombreelservletquerecuperarlosdatosdelformulario:
http://www.javaya.com.ar/detalleconcepto.php?codigo=137&inicio=60
2/6
2/25/2016
RecuperacindelosdatosdeunformularioHTMLenunservlet
<formmethod="post"action="RecuperacionUsuario">
Ahoracreamoselservletquecomovemosdeberllamarse"RecuperacionUsuario".Elcdigofuente
delservleteselsiguiente:
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
/**
*ServletimplementationclassRecuperacionUsuario
*/
@WebServlet("/RecuperacionUsuario")
publicclassRecuperacionUsuarioextendsHttpServlet{
privatestaticfinallongserialVersionUID=1L;
/**
*@seeHttpServlet#HttpServlet()
*/
publicRecuperacionUsuario(){
super();
//TODOAutogeneratedconstructorstub
}
/**
*@seeHttpServlet#doGet(HttpServletRequestrequest,HttpServletResponseresponse)
*/
ComopodemosverenelcdigofuentedelaclaseRecuperacionUsuariodebemosimplementartodo
el cdigo en el mtodo doPost, ya que este se ejecuta cuando se tiene un formulario HTML y se
especificenelHTMLenlapropiedadmethodelvalorpost:
<formmethod="post"action="RecuperacionUsuario">
PararecuperarlosdatosdeloscontrolestextypassworddelformularioHTMLelobjetorequestdela
claseHttpServletRequestdisponedeunmtodollamadogetParamenterqueleindicamoselnombre
delcontrolarecuperar:
Stringusu=request.getParameter("usuario");
Luegoderecuperarloprocedemosamostrarlodentrodelapginagenerada:
out.println(usu);
Para probar nuestra aplicacin debemos presionar el botn derecho sobre el formulari1.html y
http://www.javaya.com.ar/detalleconcepto.php?codigo=137&inicio=60
3/6
2/25/2016
RecuperacindelosdatosdeunformularioHTMLenunservlet
seleccionar"RunAs">"RunonServer",luegoelresultadodelaejecucinenelnavegador:
Problemapropuesto
1. Crear un proyecto llamado proyectoservlet3. Confeccionar un formulario HTML que solicite la
carga de 2 valores por teclado. Cuando se presione el botn submit llamar a un servlet que
recuperelosdosvaloresingresadosymuestresusuma.
formulario1.html
http://www.javaya.com.ar/detalleconcepto.php?codigo=137&inicio=60
4/6
2/25/2016
RecuperacindelosdatosdeunformularioHTMLenunservlet
<!DOCTYPEhtmlPUBLIC"//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loo
<html>
<head>
<metahttpequiv="ContentType"content="text/html;charset=ISO88591">
<title>Inserttitlehere</title>
</head>
<body>
<formmethod="post"action="SumaValores">
Ingreseelprimervalor:
<inputtype="text"name="valor1"size="10">
<br>
Ingreseelsegundovalor:
<inputtype="text"name="valor2"size="10">
<br>
<inputtype="submit"value="sumar">
</form>
</body>
</html>
SumaValores.java
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
/**
*ServletimplementationclassSumaValores
*/
@WebServlet("/SumaValores")
publicclassSumaValoresextendsHttpServlet{
privatestaticfinallongserialVersionUID=1L;
/**
*@seeHttpServlet#HttpServlet()
*/
publicSumaValores(){
super();
//TODOAutogeneratedconstructorstub
}
/**
*@seeHttpServlet#doGet(HttpServletRequestrequest,HttpServletResponseresponse)
*/
http://www.javaya.com.ar/detalleconcepto.php?codigo=137&inicio=60
5/6
2/25/2016
Llamadaaservletdesdeunhipervnculo(conysinparmetros)
Llamadaaservletdesdeunhipervnculo
(conysinparmetros)
Problema:
Confeccionaremos una pgina HTML con dos hipervnculos a dos servlet. El
primero tiene por objetivo mostrar la tabla de multiplicar del 2, el segundo servlet
llegacomoparmetroelnmerodelcualqueremosmostrarlatablademultiplicar.
Primerocreamosunproyectollamadoproyectoservlet4.Seguidamentecreamosel
archivo HTML (presionamos el botn derecho del mouse sobre la carpeta
WebContent y creamos un archivo HTML llamado menu.html) y codificamos lo
siguiente:
<!DOCTYPEhtmlPUBLIC"//W3C//DTDHTML4.01Transitional//EN""http://www.w3.o
<html>
<head>
<metahttpequiv="ContentType"content="text/html;charset=ISO88591">
<title>Inserttitlehere</title>
</head>
<body>
<ahref="TablaDel2">Mostrartabladel2</a><br>
<ahref="Tabla?num=5">Mostrartabladel5</a>
</body>
</html>
Elprimerhipervnculoenlapropiedadhrefindicamoselnombredelservletaejecutar:
<ahref="TablaDel2">Mostrartabladel2</a><br>
ElsegundohipervnculollamaalservletTablaypasaunparmetronumconelvalor5(estevalorse
rescatarposteriormentedesdeelservlet):
<ahref="Tabla?num=5">Mostrartabladel5</a>
AhoracrearemosunservletllamadoTablaDel2:
http://www.javaya.com.ar/detalleconcepto.php?codigo=138&inicio=60
1/4
2/25/2016
Llamadaaservletdesdeunhipervnculo(conysinparmetros)
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
/**
*ServletimplementationclassTablaDel2
*/
@WebServlet("/TablaDel2")
publicclassTablaDel2extendsHttpServlet{
privatestaticfinallongserialVersionUID=1L;
/**
*@seeHttpServlet#HttpServlet()
*/
publicTablaDel2(){
super();
//TODOAutogeneratedconstructorstub
}
/**
*@seeHttpServlet#doGet(HttpServletRequestrequest,HttpServletResponseresp
*/
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
Esimportantehacernotarquelaanotacindelservletcoincideconlapropiedadhrefdel
hipervnculodelapginaHTML:
@WebServlet("/TablaDel2")
publicclassTablaDel2extendsHttpServlet{
EnelmtododoGetprocesamoslapeticinmediantelageneracindelapginadinmica:
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
//TODOAutogeneratedmethodstub
PrintWriterout=response.getWriter();
out.println("<html>");
out.println("<head></head>");
out.println("<body>");
out.println("<h1>Tabladel2</h1>");
for(intf=2;f<=20;f=f+2){
http://www.javaya.com.ar/detalleconcepto.php?codigo=138&inicio=60
2/4
2/25/2016
Llamadaaservletdesdeunhipervnculo(conysinparmetros)
out.println(f);
out.println("");
}
out.println("</body>");
out.println("</html>");
}
AhoracrearemoselsegundoservletllamadoTabla:
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
/**
*ServletimplementationclassTabla
*/
@WebServlet("/Tabla")
publicclassTablaextendsHttpServlet{
privatestaticfinallongserialVersionUID=1L;
/**
*@seeHttpServlet#HttpServlet()
*/
publicTabla(){
super();
//TODOAutogeneratedconstructorstub
}
/**
*@seeHttpServlet#doGet(HttpServletRequestrequest,HttpServletResponseresp
*/
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
PararecuperarelparmetrodelhipervnculollamamosalmtodogetParameterdelobjetorequest.
DebemospasarunStringconelnombredelparmetroyelmismonosretornaelvalordel
parmetro:
Stringcad=request.getParameter("num");
http://www.javaya.com.ar/detalleconcepto.php?codigo=138&inicio=60
3/4
2/25/2016
Redireccionamientoaotrositioopginadesdeunservlet
Redireccionamientoaotrositioopgina
desdeunservlet
Problema:
Confeccionarunformulariohtmlquesoliciteelingresodeunsitioweb.Cuandose
presioneunbotnredireccioneadichaweb.
Crearemos un proyecto llamado proyectoservlet5 y dentro del mismo un archivo
HTML:
<!DOCTYPEhtmlPUBLIC"//W3C//DTDHTML4.01Transitional//EN""http://www.w3.or
<html>
<head>
<metahttpequiv="ContentType"content="text/html;charset=ISO88591">
<title>Inserttitlehere</title>
</head>
<body>
<formmethod="get"action="Redireccionamiento">
Ingreseladireccindelapginaquequierevisitar(Ej.www.google.com):
<inputtype="text"name="direccion"size="60">
<br>
<inputtype="submit"value="Ir">
</form>
</body>
</html>
Comovemoscuandosepresionaelbotnsubmitseenvanlosdatosalservletllamado
Redireccionamiento:
<formmethod="get"action="Redireccionamiento">
CreamosahoraunservletllamadoRedireccionamiento:
http://www.javaya.com.ar/detalleconcepto.php?codigo=139&inicio=60
1/3
2/25/2016
Redireccionamientoaotrositioopginadesdeunservlet
importjava.io.IOException;
importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
/**
*ServletimplementationclassRedireccionamiento
*/
@WebServlet("/Redireccionamiento")
publicclassRedireccionamientoextendsHttpServlet{
privatestaticfinallongserialVersionUID=1L;
/**
*@seeHttpServlet#HttpServlet()
*/
publicRedireccionamiento(){
super();
//TODOAutogeneratedconstructorstub
}
/**
*@seeHttpServlet#doGet(HttpServletRequestrequest,HttpServletResponsere
*/
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponserespons
//TODOAutogeneratedmethodstub
Stringdire=request.getParameter("direccion");
PararedireccionarelobjetorequestdelaclaseHttpServletRequesttieneunmtodo
llamadosendRedirectquelepasamoscomoparmetrounStringconladireccindel
sitioquedebedevolverelservlet(enlugardelservletpropiamentedicho)
LadireccindelsitioaredireccionarlaextraemosconelmtodogetParametercomo
hemosvisto:
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponserespons
//TODOAutogeneratedmethodstub
Stringdire=request.getParameter("direccion");
response.sendRedirect("http://"+dire);
}
Retornar
http://www.javaya.com.ar/detalleconcepto.php?codigo=139&inicio=60
2/3