Está en la página 1de 524

2/25/2016

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

correctas), dos operaciones: realizacin de la suma y del producto de los valores


ingresados y dos salidas, que son los resultados de la suma y el producto de los
valoresingresados.Enelsmbolodeimpresinpodemosindicarunaomssalidas,
esoquedaacriteriodelprogramador,lomismoparaindicarlasentradasporteclado.
Programa:

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;

Si llamamos a la funcin println en lugar de print, la impresin siguiente se


efectuarenlaprximalnea:

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:

Podemos observar: El rombo representa la condicin. Hay dos opciones que se


puedentomar.Silacondicindaverdaderasesigueelcaminodelverdadero,osea
eldeladerecha,silacondicindafalsasesigueelcaminodelaizquierda.
Se trata de una estructura CONDICIONAL SIMPLE porque por el camino del
verdaderohayactividadesyporelcaminodelfalsonohayactividades.
Por el camino del verdadero pueden existir varias operaciones, entradas y salidas,
http://www.javaya.com.ar/detalleconcepto.php?codigo=80&inicio=0

1/9

2/25/2016

Estructurascondicionalessimplesycompuestas

inclusiveyaveremosquepuedehaberotrasestructurascondicionales.

Problema:
Ingresarelsueldodeunapersona,sisuperalos3000pesosmostrarunmensajeen
pantallaindicandoquedebeabonarimpuestos.
Diagramadeflujo:

Podemos observar lo siguiente: Siempre se hace la carga del sueldo, pero si el


sueldo que ingresamos supera 3000 pesos se mostrar por pantalla el mensaje
"Estapersonadebeabonarimpuestos",encasoquelapersonacobre3000omenos
noaparecenadaporpantalla.
Programa:

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

En una estructura condicional compuesta tenemos entradas, salidas, operaciones,


tantoporlaramadelverdaderocomoporlaramadelfalso.

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

Si ingresamos los valores 10 y 4 la condicin del if retorna verdadero y ejecuta el


primerbloque.
Unprogramasecontrolaycorrigeprobandotodossusposiblesresultados.
Ejecutemosnuevamenteelprogramaeingresemos:
Ingreseelprimervalor:10
Ingreseelsegundovalor:54
54

Cuando a un programa le corregimos todos los errores sintcticos y lgicos ha


terminado nuestra tarea y podemos entregar el mismo al USUARIO que nos lo
solicit.

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.

El diagrama de flujo que se presenta contiene dos estructuras condicionales. La


principal se trata de una estructura condicional compuesta y la segunda es una
estructura condicional simple y est contenida por la rama del falso de la primer
estructura.
Escomnquesepresentenestructurascondicionalesanidadasanmscomplejas.

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

Analicemos el siguiente diagrama. Se ingresan tres valores por teclado que


representan las notas de un alumno, se obtiene el promedio sumando los tres
valoresydividiendopor3dichoresultado(Tenerencuentaquesielresultadoesun
valorrealsolosealmacenalaparteentera).
Primeramentepreguntamossielpromedioessuperioroiguala7,encasoafirmativo
va por la rama del verdadero de la estructura condicional mostramos un mensaje
queindica"Promocionado"(concomillasindicamosuntextoquedebeimprimirseen
pantalla).
Encasoquelacondicinnosdefalso,porlaramadelfalsoapareceotraestructura
condicional, porque todava debemos averiguar si el promedio del alumno es
superioroigualacuatrooinferioracuatro.
http://www.javaya.com.ar/detalleconcepto.php?codigo=81&inicio=0

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(&&,||).

Estos dos operadores se emplean fundamentalmente en las estructuras


condicionalesparaagruparvariascondicionessimples.

Operador&&

Traducido se lo lee como ?Y?. Si la Condicin 1 es verdadera Y la condicin 2 es


verdaderaluegoejecutarlaramadelverdadero.
Cuando vinculamos dos o ms condiciones con el operador ?&&?, las dos
condicionesdebenserverdaderasparaqueelresultadodelacondicincompuesta
deVerdaderoycontineporlaramadelverdaderodelaestructuracondicional.
Lautilizacindeoperadoreslgicospermitenenmuchoscasosplantearalgoritmos
mscortosycomprensibles.

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.

Es decir que se mostrar el contenido de num1 si y slo si num1>num2 y


num1>num3.

En caso de ser Falsa la condicin, analizamos el contenido de num2 y num3 para


vercualtieneunvalormayor.

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:

No debemos confundir la representacin grfica de la estructura repetitiva while


(Mientras)conlaestructuracondicionalif(Si)
Funcionamiento: En primer lugar se verifica la condicin, si la misma resulta
verdaderaseejecutanlasoperacionesqueindicamosporlaramadelVerdadero.
Alaramadelverdaderolagraficamosenlaparteinferiordelacondicin.Unalnea
al final del bloque de repeticin la conecta con la parte superior de la estructura
repetitiva.
En caso que la condicin sea Falsa contina por la rama del Falso y sale de la
estructurarepetitivaparacontinuarconlaejecucindelalgoritmo.
http://www.javaya.com.ar/detalleconcepto.php?codigo=83&inicio=0

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:

Si continuamos con el diagrama no nos alcanzaran las prximas 5 pginas para


finalizarlo.Emplearunaestructurasecuencialpararesolveresteproblemaproduce
undiagramadeflujoyunprogramaenJavamuylargo.
http://www.javaya.com.ar/detalleconcepto.php?codigo=83&inicio=0

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

Mientras la condicin retorne verdadero se ejecuta el bloque de instrucciones al


retornar falso la verificacin de la condicin se sale de la estructura repetitiva y
continuaelalgoritmo,enestecasofinalizaelprograma.
Lomsdifcilesladefinicindelacondicindelaestructurawhileyqubloquede
instrucciones se van a repetir. Observar que si, por ejemplo, disponemos la
condicinx>=100(sixesmayoroiguala100)noprovocaningnerrorsintctico
peroestamosenpresenciadeunerrorlgicoporquealevaluarseporprimeravezla
condicin retorna falso y no se ejecuta el bloque de instrucciones que queramos
repetir100veces.
NoexisteunaRECETAparadefinirunacondicindeunaestructurarepetitiva,sino
queselograconunaprcticacontinuasolucionandoproblemas.
Unavezplanteadoeldiagramadebemosverificarsielmismoesunasolucinvlida
al problema (en este caso se debe imprimir los nmeros del 1 al 100 en pantalla),
para ello podemos hacer un seguimiento del flujo del diagrama y los valores que
tomanlasvariablesalolargodelaejecucin:

.
100
101Cuandoxvale101lacondicindelaestructurarepetitivaretorna
enestecasofinalizaeldiagrama.

Importante: Podemos observar que el bloque repetitivo puede no ejecutarse


ningunavezsilacondicinretornafalsolaprimeravez.
La variable x debe estar inicializada con algn valor antes que se ejecute la
operacinx=x+1encasodenoestarinicializadaapareceunerrordecompilacin.
Programa:

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:

Podemos observar que se ingresa por teclado la variable n. El operador puede


cargarcualquiervalor.
Si el operador carga 10 el bloque repetitivo se ejecutar 10 veces, ya que la
condicines?Mientrasx<=n?,esdecir?mientrasxseamenoroiguala10?puesx
comienza en uno y se incrementa en uno cada vez que se ejecuta el bloque
repetitivo.
A la prueba del diagrama la podemos realizar dndole valores a las variables por
ejemplo,siingresamos5elseguimientoeselsiguiente:
n
x
5
1(Seimprimeelcontenidodex)
2
"

"
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

El tiempo a dedicar a esta seccin EJERCICIOS PROPUESTOS debe ser mucho


mayorqueelempleadoalaseccindeEJERCICIOSRESUELTOS.
La experiencia dice que debemos dedicar el 80% del tiempo a la resolucin
individual de problemas y el otro 20% al anlisis y codificacin de problemas ya
resueltosporotraspersonas.
Es de vital importancia para llegar a ser un buen PROGRAMADOR poder resolver
problemasenformaindividual.

1. Escribir un programa que solicite ingresar 10 notas de alumnos y nos informe


cuntostienennotasmayoresoigualesa7ycuntosmenores.
2. Seingresanunconjuntodenalturasdepersonasporteclado.Mostrarlaaltura
promediodelaspersonas.
3. En una empresa trabajan n empleados cuyos sueldos oscilan entre $100 y
$500, realizar un programa que lea los sueldos que cobra cada empleado e
informecuntosempleadoscobranentre$100y$300ycuntoscobranmsde
$300.Ademselprogramadeberinformarelimportequegastalaempresaen
sueldosalpersonal.
4. Realizarunprogramaqueimprima25trminosdelaserie11223344,etc.
(Noseingresanvaloresporteclado)
5. Mostrarlosmltiplosde8hastaelvalor500.Debeaparecerenpantalla816
24,etc.
6. Realizar un programa que permita cargar dos listas de 15 valores cada una.
Informarconunmensajecualdelasdoslistastieneunvaloracumuladomayor
(mensajes"Lista1mayor","Lista2mayor","Listasiguales")
Tener en cuenta que puede haber dos o ms estructuras repetitivas en un
algoritmo.
7. Desarrollar un programa que permita cargar n nmeros enteros y luego nos
informecuntosvaloresfueronparesycuntosimpares.
Empleareloperador?%?enlacondicindelaestructuracondicional:

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

Seguidamente, se vuelve a controlar el valor de la condicin, y as prosigue hasta


quedichacondicinentregueunfalso.
Siconocemoslacantidaddevecesqueserepiteelbloqueesmuysencilloemplear
un for, por ejemplo si queremo que se repita 50 veces el bloque de instrucciones
puedehacerseas:

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:

Podemos observar y comparar con el problema realizado con el while. Con la


estructura while el CONTADOR x sirve para contar las vueltas. Con el for el
CONTADORfcumpledichafuncin.
Inicialmentefvale1ycomonoessuperiora100seejecutaelbloque,imprimimosel
contenidodef,alfinalizarelbloquerepetitivoseincrementalavariablefen1,como
2noessuperiora100serepiteelbloquedeinstrucciones.
Cuando la variable del for llega a 101 sale de la estructura repetitiva y contina la
ejecucindelalgoritmoqueseindicadespusdelcrculo.
La variable f (o como sea que se decida llamarla) debe estar definida como una
variablems.
Programa:

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

Tengamos en cuenta que el operador matemtico % retorna el resto de dividir un


valor por otro, en este caso: valor%3 retorna el resto de dividir el valor que
ingresamosporteclado,portres.
Veamos:siingresamos6elrestodedividirlopor3es0,siingresamos12elrestode
dividirlo por 3 es 0. Generalizando: cuando el resto de dividir por 3 al valor que
http://www.javaya.com.ar/detalleconcepto.php?codigo=84&inicio=0

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.

Fuera de la estructura repetitiva imprimimos el contador cantidad que tiene


almacenadolacantidaddevaloresingresadosmayoresoigualesa1000.
Programa:

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.

La estructura repetitiva do while se repite hasta que ingresamos el valor 0. Con


dichovalorlacondicindelcicloretornafalsoycontinaconelflujodeldiagrama.

Disponemos por ltimo una estructura condicional para el caso que el operador
carguenicamenteun0yporlotantonopodemoscalcularelpromedioyaqueno
existeladivisinpor0.

En caso que el contador cant tenga un valor distinto a 0 el promedio se obtiene


dividiendoelacumuladorsumaporelcontadorcantquetienelacantidaddevalores
ingresadosantesdeintroducirel0.
Programa:

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

Los tres contadores cont1, cont2, y cont3 se inicializan en 0 antes de entrar a la


estructurarepetitiva.
A la variable suma no se la inicializa en 0 porque no es un acumulador, sino que
guardalasumadelcontenidodelasvariablescont1,cont2ycont3.
Laestructuraserepitehastaqueseingresaelvalor0enlavariablepeso.Estevalor
no se lo considera un peso menor a 9.8 Kg., sino que indica que ha finalizado la
cargadevaloresporteclado.
http://www.javaya.com.ar/detalleconcepto.php?codigo=85&inicio=0

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.

Veremos ms adelante que un atributo es normalmente definido con la clusula


private(conestonopermitimoselaccesoalatributodesdeotrasclases)
Alosatributossetieneaccesodesdecualquierfuncinomtododelaclase(salvo
lamain)
Luegodedefinirlosatributosdelaclasedebemosdeclararlosmtodosofunciones
delaclase.Lasintaxisesparecidaalamain(sinlaclusulastatic):
publicvoidinicializar(){
teclado=newScanner(System.in);
System.out.print("Ingresenombre:");
nombre=teclado.next();
System.out.print("Ingreseedad:");
edad=teclado.nextInt();
}

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.");
}
}

Por ltimo en la main declaramos un objeto de la clase Persona y llamamos a los


mtodosenunordenadecuado:
http://www.javaya.com.ar/detalleconcepto.php?codigo=87&inicio=0

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

En la main creamos un objeto de la clase Triangulo y llamamos los mtodos


respectivos:
publicstaticvoidmain(String[]ar){
Triangulotriangulo1=newTriangulo();
triangulo1.inicializar();
triangulo1.ladoMayor();
triangulo1.esEquilatero();
}

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;

El mtodo inicializar crea el objeto de la clase Scanner y pide cargar las


coordenadasxey:
publicvoidinicializar(){
teclado=newScanner(System.in);
System.out.print("Ingresecoordenadax:");
x=teclado.nextInt();
System.out.print("Ingresecoordenaday:");
y=teclado.nextInt();
}

El segundo mtodo mediante un conjunto de if verificamos en que cuadrante se


encuentraelpuntoingresado:

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.

}
}

La main no tiene grandes diferencias con los problemas realizados anteriormente,


declaramos un objeto de la clase Punto, creamos el objeto mediante el operador
newyseguidamentellamamosalosmtodosinicializareimprimirCuadranteenese
orden:
publicstaticvoidmain(String[]ar){
Puntopunto1;
punto1=newPunto();
punto1.inicializar();
punto1.imprimirCuadrante();
}

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

Esto significa que la variable perimetro es una variable local al mtodo


imprimirPerimetro.Estavariableeslocaladichomtodoysoloselapuedeacceder
dentrodelmtodo.Ladiferenciafundamentalentreunavariablelocalyunatributo
de la clase es que al atributo se lo puede acceder desde cualquier mtodo de la
claseylavariablelocalsoloexistemientrasseestejecutandoelmtodo.

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.

La estructura de programacin que ms se adapta para cargar en forma completa


lascomponentesdeunvectoresunfor,yaquesabemosdeantemanolacantidad
devaloresacargar.
Cuando f vale cero estamos accediendo a la primer componente del vector (en
nuestrocasosera):
sueldos[0]=teclado.nextInt();

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.

El promedio lo almacenamos en un atributo de la clase ya que lo necesitamos en


otromtodo:
publicvoidcalcularPromedio(){
floatsuma;
suma=0;
for(intf=0;f<5;f++){
suma=suma+alturas[f];
}
promedio=suma/5;
System.out.println("Promediodealturas:"+promedio);
}

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

En otro mtodo procedemos a sumar las componentes de cada vector y mostrar


dichosacumuladores:
floatman=0;
floattar=0;
for(intf=0;f<4;f++){
man=man+turnoMan[f];
tar=tar+turnoTar[f];
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=89&inicio=0

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.

Si tenemos dos vectores de 5 elementos cada uno. En uno se almacenan los


nombresdepersonasenelotrolasedadesdedichaspersonas.
Decimosqueelvectornombresesparaleloalvectoredadessienlacomponente0
decadavectorsealmacenainformacinrelacionadaaunapersona(Juan12aos)
Esdecirhayunarelacinentrecadacomponentedelosdosvectores.
Esta relacin la conoce nicamente el programador y se hace para facilitar el
desarrollodealgoritmosqueprocesenlosdatosalmacenadosenlasestructurasde
datos.

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

Accedemos a cada componente para controlar si supera lo que tiene la variable


mayor:
if(sueldos[f]>mayor){

En caso de ser verdadera la condicin asignamos a la variable mayor este nuevo


valorsueldos[f]
mayor=sueldos[f];

yalavariableposlecargamoslavariablefqueindicalacomponentequeestamos
analizando:
pos=f

Cuando salimos de la estructura repetitiva imprimimos la variable mayor que


contiene el mayor sueldo y para imprimir el nombre del operario conociendo la
posicindelmayorsueldoimprimimoselelementoqueocupalaposicinqueindica
lavariableposenelvectorparalelo:
System.out.println("Elempleadoconsueldomayores"+nombres[pos]);
System.out.println("Tieneunsueldo:"+mayor);

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

En este ejemplo: es 1200 mayor a 750? La respuesta es verdadera, por lo tanto


intercambiamoselcontenidodelacomponente0coneldelacomponente1.
Luego comparamos el contenido de la componente 1 con el de la componente 2:
Es1200mayora820?
Larespuestaesverdaderaentoncesintercambiamos.
Si hay 5 componentes hay que hacer 4 comparaciones, por eso el for se repite 4
veces.
Generalizando:sielvectortieneNcomponenteshayquehacerN1comparaciones.
Cuando

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

Podemos ver cmo el valor ms grande del vector desciende a la ltima


componente.Empleamosunavariableauxiliar(aux)paraelprocesodeintercambio:
aux=sueldos[f];
sueldos[f]=sueldos[f+1];
sueldos[f+1]=aux;

Alsalirdelforenesteejemploelcontenidodelvectoreselsiguiente:
750
820
550
490
http://www.javaya.com.ar/detalleconcepto.php?codigo=93&inicio=0

2/9

2/25/2016

Vectores(ordenamiento)

1200

Analizando el algoritmo podemos comprobar que el elemento mayor del vector se


ubicaahoraenelltimolugar.
Podemos definir otros vectores con distintos valores y comprobar que siempre el
elementomayorquedaalfinal.
Perotodavaconestealgoritmonoseordenaunvector.Solamenteestordenadoel
ltimoelementodelvector.
Ahorabien,conlos4elementosquenosquedanpodemoshacerelmismoproceso
visto anteriormente, con lo cual quedar ordenado otro elemento del vector. Este
procesolorepetiremoshastaquequedeordenadoporcompletoelvector.
Comodebemosrepetirelmismoalgoritmopodemosenglobartodoelbloqueenotra
estructurarepetitiva.

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

El mtodo compareTo retorna un valor mayor a cero si cad1 es mayor


alfabticamente.Enesteejemplocad1tieneunvaloralfabticamentemayoracad2,
luegoelcompareToretornaunvalormayoracero.
SilosdosStringsonexactamenteigualeselmtodocompareToretornauncero,y
finalmentesicad1esmenoralfabeticamenteretornaunvalormenoracero.

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

En el proceso de ordenamiento dentro de los dos for verificamos si debemos


intercambiarloselementosdelvectornotas:
for(intk=0;k<notas.length;k++){
http://www.javaya.com.ar/detalleconcepto.php?codigo=94&inicio=20

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;

y simultnemamente procedemos a intercambiar los elementos del vector paralelo


(conestologramosquelosdosvectorescontinuensiendovectoresparalelos):
Stringauxnombre;
auxnombre=nombres[f];
nombres[f]=nombres[f+1];
nombres[f+1]=auxnombre;

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

Luego debemos pasar a cargar sus 15 componentes (cada fila almacena 5


http://www.javaya.com.ar/detalleconcepto.php?codigo=95&inicio=20

2/7

2/25/2016

Estructuradedatostipomatriz

componentesytenemos3filas)

Lomscmodoesutilizarunforanidado,elprimerforqueincrementaelcontadorf
loutilizamospararecorrerlasfilasyelcontadorinternollamadocloutilizamospara
recorrerlascolumnas.

Cadavezqueserepiteenformacompletaelforinternosecargaunafilacompleta,
primerosecargalafilaceroenformacompleta,luegolafilaunoyfinalmentelafila
2.

Siempre que accedemos a una posicin de la matriz debemos disponer dos


subndicesquehaganreferenciaalafilaycolumnamat[f][c]):
for(intf=0;f<3;f++){
for(intc=0;c<5;c++){
System.out.print("Ingresecomponente:");
mat[f][c]=teclado.nextInt();
}
}

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

Ahora las estructuras repetitivas las acotamos preguntando a la misma matriz la


cantidad de filas y la cantidad de elementos de cada fila(mat.length almacena la
cantidad de filas de la matriz y mat[f].length cuando f vale cero accedemos a la
cantidaddeelementosdelafilaceroyassucesivamenteparacadavalordef):
for(intf=0;f<mat.length;f++){
for(intc=0;c<mat[f].length;c++){
System.out.print("Ingresecomponente:");
mat[f][c]=teclado.nextInt();
}
}

El algoritmo de impresin es idntico al visto anteriormente con la modificacin de


lascondicionesdelosfor:
publicvoidimprimir(){
for(intf=0;f<mat.length;f++){
for(intc=0;c<mat[f].length;c++){
System.out.print(mat[f][c]+"");
}
System.out.println();
}
}

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;

En el mtodo de cargar inicializamos el vector con los nombres de los empleados y la


matriz paralela donde se almacenan los ltimos tres sueldos (previo a cargar
procedemosacrearelvectorylamatriz):
empleados=newString[4];
sueldos=newint[4][3];
for(intf=0;f<empleados.length;f++){
System.out.print("Ingreseelnombredelempleado:");
empleados[f]=teclado.next();
for(intc=0;c<sueldos[f].length;c++){
System.out.print("Ingresesueldo:");
sueldos[f][c]=teclado.nextInt();
}
}

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

Luego imprimimos la matriz en forma completa teniendo cuidado las condiciones


quedisponemosencadafor.
Elprimerforserepitetantasvecescomofilastienelamatriz:f<mat.lengthy
el for interno se repite tantas veces como elementos tiene la fila que estamos
procesandoc<mat[f].length:
for(intf=0;f<mat.length;f++){
for(intc=0;c<mat[f].length;c++){
System.out.print(mat[f][c]+"");
}
System.out.println();
}

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

Como la clase se llama Operarios el constructor tiene el mismo nombre, no


disponemoslapalabraclavevoidyaqueelconstructornopuederetornardatos.
La ventaja de plantear un constructor en lugar de definir un mtodo con cualquier
nombre es que se llamar en forma automtica cuando se crea un objeto de esta
clase:
publicstaticvoidmain(String[]ar){
Operariosop=newOperarios();

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

Declaramos la clase Persona, sus tres atributos y definimos el constructor con el


mismonombredelaclase:
publicclassAlumno{
privateScannerteclado;
privateStringnombre;
privateintedad;

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)

Como vimos el mtodo equals retorna true si el contenido de caracteres del


parmetro s1 es exactamente igual a la cadena de caracteres del objeto que
llamaalmtodoequals.

booleanequalsIgnoreCase(Strings1)

El funcionamiento es casi exactamente igual que el mtodo equals con la


diferencia que no tiene en cuenta maysculas y minsculas (si comparamos
'Ana'y'ana'luegoelmtodoequalsIgnoreCaseretornatrue)

intcompareTo(Strings1)

Este mtodo retorna un 0 si el contenido de s1 es exactamente igual al String


contenidoporelobjetoquellamaalmtodocompareTo.Retornaunvalor>0si
el contenido del String que llama al mtodo compareTo es mayor
alfabticamentealparmetros1.

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;

El constructor recibe como parmetro el nombre del cliente y lo almacena en el


atributorespectivoeinicializaelatributomontoencero:
publicCliente(Stringnom){
nombre=nom;
monto=0;
}

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

El mtodo depositosTotales obtiene el monto depositado de cada uno de los tres


clientes,procedeamostrarlosyllamaalmtodoimprimirdecadaclienteparapoder
mostrarelnombreydepsito:

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;

El mtodo tirar almacena el valor aleatorio (para generar un valor aleatorio


utilizamos el mtodo random de la clase Math, el mismo genera un valor real
comprendidoentre0y1,peronunca0o1.Puedeserunvalortanpequeocomo
0.0001 o tan grando como 0.9999. Luego este valor generado multiplicado por 6 y
antecediendo(int)obtenemoslaparteenteradedichoproducto):
publicvoidtirar(){
http://www.javaya.com.ar/detalleconcepto.php?codigo=101&inicio=20

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

El primer tipo de relacin que habamos visto entre dos clases, es la de


colaboracin. Recordemos que es cuando una clase contiene un objeto de otra
clasecomoatributo.
Cuandolarelacinentredosclasesesdeltipo"...tieneun..."o"...espartede...",no
debemos implementar herencia. Estamos frente a una relacin de colaboracin de
clasesnodeherencia.
SitenemosunaClaseAyotraClaseBynotamosqueentreellasexisteunarelacion
de tipo "... tiene un...", no debe implementarse herencia sino declarar en la clase
ClaseAunatributodelaclaseClaseB.
Porejemplo:tenemosunaclaseAuto,unaclaseRuedayunaclaseVolante.Vemos
que la relacin entre ellas es: Auto "...tiene 4..." Rueda, Volante "...es parte de..."
Auto pero la clase Auto no debe derivar de Rueda ni Volante de Auto porque la
relacin no es de tiposubtipo sino de colaboracin. Debemos declarar en la clase
Auto4atributosdetipoRueday1detipoVolante.
LuegosivemosquedosclaserespondenalapreguntaClaseA"..esun.."ClaseBes
posiblequehayaunarelacindeherencia.
Porejemplo:
Auto"esun"Vehiculo
Circulo"esuna"Figura
Mouse"esun"DispositivoEntrada
Suma"esuna"Operacion

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{

Utilizamos la palabra clave extends y seguidamente el nombre de la clase padre


(con esto estamos indicando que todos los mtodos y atributos de la clase
OperacinsontambinmtodosdelaclaseSuma.
LuegolacaractersticaqueaadelaclaseSumaeselsiguientemtodo:
voidoperar(){
resultado=valor1+valor2;
}

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

mismos se declaren protected, en caso que sean private si bien lo hereda de la


clasepadresololospuedenmodificarmtodosdedichaclasepadre.
Ahora podemos decir que la clase Suma tiene cinco mtodos (cuatro heredados y
unopropio)y3atributos(todosheredados)
LuegoenotraclasecreamosunobjetodelaclaseSuma:
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();
}
}

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.*;

La clase JFrame encapsula el concepto de una ventana. Luego para implementar


unaaplicacinquemuestreunaventanadebemosplantearunaclasequeheredede
laclaseJFrame:
publicclassFormularioextendsJFrame{

ConlasintaxisanteriorestamosindicandoquequelaclaseFormularioheredatodos
losmtodosypropiedadesdelaclaseJFrame.
Para mostrar un texto dentro de una ventana necesitamos requerir la colaboracin
delaclaseJLabel(quetieneporobjetivomostraruntextodentrodeunJFrame)
DefinimosluegocomoatributodelaclaseunobjetodelaclaseJLabel:
privateJLabellabel1;

En el constructor de la clase llamamos al mtodo heredado de la clase JFrame


llamado setLayout y le pasamos como parmetro un valor null, con esto estamos
informndolealaclaseJFramequeutilizaremosposicionamientoabsolutoparalos
controlesvisualesdentrosdelJFrame.
publicFormulario(){
setLayout(null);

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

Finalmente debemos codificar la main donde creamos un objeto de la clase


Formulario, llamamos al mtodo setBounds para ubicar y dar tamao al control y
medianteelmtodosetVisiblehacemosvisibleelJFrame:
publicstaticvoidmain(String[]ar){
Formularioformulario1=newFormulario();
formulario1.setBounds(10,10,400,300);
formulario1.setVisible(true);
}

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;

y luego en la main definimos y creamos un objeto de la clase JFrame (llamando


luegoalosmtodossetBoundsysetVisible):
publicstaticvoidmain(String[]ar){
JFramef=newJFrame();
f.setBounds(10,10,300,200);
f.setVisible(true);
}

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

En la main creamos un objeto de la clase y llamamos a los mtodos setBounds y


setVisible:

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;

En el constructor creamos las dos JLabel y las ubicamos llamando al mtodo


setBounds, no hay que olvidar de llamar al mtodo add que aade la JLabel al
JFrame:
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);
}

Por ltimo en la main creamos un objeto de la clase que acabamos de codificar,


llamamos al setBounds para ubicar y dar tamao al JFrame, llamamos al mtodo
setResizablepasandoelvalorfalseparanopermitirmodificareltamaodelJFrame
en tiempo de ejecucin y finalmente llamamos al mtodo setVisible para que se
visualiceelJFrame:
publicstaticvoidmain(String[]ar){
http://www.javaya.com.ar/detalleconcepto.php?codigo=105&inicio=20

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{

Con esto estamos diciendo que nuestra clase implementa la interface


ActionListener,luegoestamosobligadosacodificarelmtodoactionPerformed.
DefinimosunobjetodelaclaseJButton:
JButtonboton1;

En el constructor creamos el objeto de la clase JButton y mediante la llamada del


mtodo addActionListener le pasamos la referencia del objeto de la clase JButton
utilizando la palabra clave this (this almacena la direccin de memoria donde se
almacena el objeto de la clase JFrame, luego mediante dicha direccin podemos
llamaralmtodoactionPerformed):
publicFormulario(){
setLayout(null);
boton1=newJButton("Finalizar");
boton1.setBounds(300,250,100,30);
add(boton1);
boton1.addActionListener(this);
}

El mtodo actionPerformed (este mtodo de la interface ActionListener debe


implementarse obligatoriamente, en caso de no codificarlo o equivocarnos en su
nombre aparecer un mensaje de error en tiempo de compilacin de nuestro
programa.
ElmtodoactionPerformedseejecutarcadavezquehagamosclicsobreelobjeto
delaclaseJButton.
La interface ActionListener y el objeto de la clase ActionEvent que llega como
parmetroestndefinidosenelpaquete:
importjava.awt.event.*;

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

Cuando se presiona alguno de los tres botones se ejecuta el mtodo


actionPerformedymediantetresifverificamoscualdelosbotonessepresion:
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
setTitle("boton1");
}
if(e.getSource()==boton2){
setTitle("boton2");
}
if(e.getSource()==boton3){
setTitle("boton3");
}
}

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

Seguidamente creamos el objeto de la clase JScrollPane y le pasamos como


parmetroelobjetodelaclaseJTextArea:
scrollpane1=newJScrollPane(textarea1);
http://www.javaya.com.ar/detalleconcepto.php?codigo=108&inicio=20

3/6

2/25/2016

SwingJTextArea

Definimos la posicin y tamao del control de tipo JScrollPane (y no del control


JTextArea):
scrollpane1.setBounds(10,50,400,300);

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

Luego mediante el mtodo indexOf de la clase String verificamos si el String


"argentina"estcontenidoenlavariabletexto:
if(texto.indexOf("argentina")!=1){
setTitle("Sicontieneeltexto\"argentina\"");
}else{
setTitle("Nocontieneeltexto\"argentina\"");
}

Si queremos introducir una comilla doble dentro de un String de Java debemos


antecederle la barra invertida (luego dicho caracter no se lo considera parte del
String):
setTitle("Sicontieneeltexto\"argentina\"");

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

Para extraer el contenido del item seleccionado llamamos al mtodo


getSelectemItem()elcualretornaunobjetodelaclaseObjectporloquedebemos
indicarlequelotransformeenString:
Stringseleccionado=(String)combo1.getSelectedItem();

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

Implementaremos la interface ActionListener ya que tenemos que cambiar el color


delbotncuandoselopresioneynoharemosactividadescuandocambiemositems
deloscontrolesJComboBox:
publicclassFormularioextendsJFrameimplementsActionListener{

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

En el mtodo actionPerformed cuando detectamos que se presion el botn


procedemosaextraerlostresitemseleccionados:
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==boton1){
Stringcad1=(String)combo1.getSelectedItem();
Stringcad2=(String)combo2.getSelectedItem();
Stringcad3=(String)combo3.getSelectedItem();

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

y creamos finalmente un objeto de la clase Color, el constructor de la clase Color


requierequelepasemostresvaloresdetipoint:
Colorcolor1=newColor(rojo,verde,azul);

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.*;

Declaramos la clase Formulario, heredamos de la clase JFrame e indicamos que


implementaremoslainterfaceActionListener:
publicclassFormularioextendsJFrameimplementsActionListener{

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

Ahora comenzamos a crear los objetos de la clase JMenuItem y los aadimos al


objetodelaclaseJMenu(tambinmediantelallamadaalmtodoaddActionListener
indicamosalJMenuItemqueobjetoprocesarelclic):
mi1=newJMenuItem("Rojo");
mi1.addActionListener(this);
menu1.add(mi1);

LomismohacemosparalosotrosdosJMenuItem:
mi2=newJMenuItem("Verde");
mi2.addActionListener(this);
menu1.add(mi2);
mi3=newJMenuItem("Azul");
mi3.addActionListener(this);
menu1.add(mi3);

En el mtodo actionPerformed primero obtenemos la referencia al panel asociado


conelJFrame:
publicvoidactionPerformed(ActionEvente){

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;

Es importante notar el orden de creacin de los objetos y como los relacionamos


unosconotros.
PrimerocreamoselJMenuBaryloasociamosconelJFrame:
mb=newJMenuBar();
setJMenuBar(mb);
http://www.javaya.com.ar/detalleconcepto.php?codigo=110&inicio=20

6/9

2/25/2016

SwingJMenuBar,JMenu,JMenuItem

CreamoselprimerJMenuylopasamoscomoparmetroalJMenuBarmedianteel
mtodoadd:
menu1=newJMenu("Opciones");
mb.add(menu1);

Ahora creamos el segundo objeto de la clase JMenu y lo asociamos con el primer


JMenucreado:
menu2=newJMenu("Tamaodelaventana");
menu1.add(menu2);

EnformasimilarcreamoseltercerobjetodelaclaseJMenuyloasociamosconel
primerJMenucreado:
menu3=newJMenu("Colordefondo");
menu1.add(menu3);

Finalmente comenzamos a crear los objetos de la clase JMenuItem y los dos


primeroslosasociamosconelsegundoJMenu:
mi1=newJMenuItem("640*480");
menu2.add(mi1);
mi1.addActionListener(this);
mi2=newJMenuItem("1024*768");
menu2.add(mi2);
mi2.addActionListener(this);

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

Para cambiar de color de forma similar al problema anterior mediante el mtodo


getContentPaneobtenemoslareferenciaalobjetodelaclaseContaineryllamamos
almtodosetBackgroundparafijarunnuevocolordefondo:
if(e.getSource()==mi3){
getContentPane().setBackground(newColor(255,0,0));
}
if(e.getSource()==mi4){
getContentPane().setBackground(newColor(0,255,0));
}

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.*

Cuando declaramos la clase JFrame indicamos que implementaremos la interface


ChangeListener:
publicclassFormularioextendsJFrameimplementsChangeListener{

DefinimostresobjetosdelaclaseJCheckBox:
http://www.javaya.com.ar/detalleconcepto.php?codigo=111&inicio=20

2/8

2/25/2016

SwingJCheckBox

privateJCheckBoxcheck1,check2,check3;

En el constructor creamos cada uno de los objetos de la clase JCheckBox y


llamamos al mtodo addChangeListener indicando quien procesar el evento de
cambiodeestado:
check1=newJCheckBox("Ingls");
check1.setBounds(10,10,150,30);
check1.addChangeListener(this);
add(check1);

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.*;

Como debemos implementar dos interfaces las debemos enumerar despus de la


palabraimplementsseparadasporcoma:
publicclassFormularioextendsJFrameimplementsActionListener,ChangeListener{
Definimoslostresobjetos:
privateJLabellabel1;
privateJCheckBoxcheck1;
privateJButtonboton1;

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

Cuando se cambia el estado del control JCheckBox se ejecuta el mtodo


stateChangeddondeverificamossiestseleccionadoprocediendoaactivarelbotn
encasonegativolodesactivamos:
publicvoidstateChanged(ChangeEvente){
if(check1.isSelected()==true){
boton1.setEnabled(true);
}else{
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

Cuando se presione un botn mostrar en el ttulo del JFrame los programas


seleccionados.
importjavax.swing.*
importjava.awt.event.*
publicclassFormularioextendsJFrameimplementsActionListener{
privateJCheckBoxcheck1,check2,check3
privateJButtonboton1
publicFormulario(){
setLayout(null)
check1=newJCheckBox("Chrome")
check1.setBounds(10,10,150,30)
add(check1)
check2=newJCheckBox("FireFox")
check2.setBounds(10,50,150,30)
add(check2)
check3=newJCheckBox("Opera")
check3.setBounds(10,90,150,30)
add(check3)
boton1=newJButton("Confirmar")
boton1.setBounds(10,140,100,30)
boton1.addActionListener(this)
add(boton1)
}

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

En el mtodo stateChanged verificamos cual de los tres JRadioButton est


seleccionadoyprocedemosaredimensionarelJFrame:
publicvoidstateChanged(ChangeEvente){
if(radio1.isSelected()){
setSize(640,480);
}
if(radio2.isSelected()){
setSize(800,600);
}
if(radio3.isSelected()){
http://www.javaya.com.ar/detalleconcepto.php?codigo=112&inicio=20

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:

La informacin puede ser cualquier tipo de dato simple, estructura de datos o


inclusiveunoomsobjetos.
Ladireccinalsiguientenodoesunpuntero.
Representacingrficadeunalista:

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

En el constructor de la clase hacemos que raiz guarde el valor null. Tengamos en


cuentaquesiraiztienealmacenadonulllalistaestvaca,encasocontrariotienela
direccindelprimernododelalista.
publicvoidinsertar(intx){

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

}
}

Uno de los mtodos ms importantes que debemos entender en una pila es el de


insertarunelementoenlapila.
Al mtodo llega la informacin a insertar, en este caso en particular es un valor
entero.
Lacreacindeunnodorequieredospasos:
DefinicindeunpunterooreferenciaauntipodedatoNodo:

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;

el nodo que previamente estaba apuntado por raiz es eliminado automticamente


porlamquinavirtualdeJava,alnotenerningunareferencia.
Retornamoslainformacin:
returninformacion;

Encasodeestarvaca la pila retornamos el nmero entero mximo y lo tomamos


comocdigodeerror(esdecirnuncadebemosguardarelenteromayorenlapila)
returnInteger.MAX_VALUE;

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

Insertamos 3 enteros, luego imprimimos la pila, extraemos uno de la pila y


finalmenteimprimimosnuevamentelapila.

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.

Para la solucin de este problema la clase formula tendr un atributo de la clase


Pila.
Veamos como nos puede ayudar el empleo de una pila para solucionar este
problema.
PrimerocargaremoslafrmulaenunJTextField.
Ejemplodefrmula:(2+[312]*{8/3})
Elalgoritmodevalidacineselsiguiente:
Analizamoscaracteracaracterlapresenciadelosparntesis,corchetesyllaves.
Sivienensmbolosdeaperturalosalmacenamosenlapila.
Si vienen smbolos de cerrado extraemos de la pila y verificamos si est el mismo
smboloperodeapertura:encasonegativopodemosinferirquelafrmulanoest
correctamentebalanceada.
Sialfinalizarelanlisisdelltimocaracterdelafrmulalapilaestvacapodemos
http://www.javaya.com.ar/detalleconcepto.php?codigo=116&inicio=40

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;

Ya tenemos la lista correctamente enlazada (raiz apunta al primer nodo y fondo


continaapuntandoalltimonodo)

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

Cuando llega una persona al cajero primero verificamos si el cajero est


desocupado:
if(llegada==minuto)
{
if(estado==0){

Si est desocupado lo ocupamos cambiando el valor de la variable estado y


generandoenqueminutoestapersonadejarelcajero(unvaloraleatorioentre2y
4minutos):
estado=1;
salida=minuto+2+(int)(Math.random()*3);

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)

Extrae la informacin del nodo de la posicin indicada (pos). Se debe eliminar el


nodo.
intextraer(intpos)

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

En caso que exista verificamos si el nodo a extraer es el primero de la lista (este


anlisisdebehacerseyaquesieselprimerodelalistasemodificaelpunteroraiz):
if(pos==1){

Si es el primero guardamos en una variable auxiliar la informacin del nodo y


avanzamoselpunteroraiz:
informacion=raiz.info;
raiz=raiz.sig;

Si el nodo a extraer no est al principio de la lista avanzamos con una estructura


repetitivahastaelnodoanterioraextraer:
for(intf=1;f<=pos2;f++)
reco=reco.sig;

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;

El mtodo borrar es muy similar al mtodo extraer con la diferencia de que no


retornavalor:
http://www.javaya.com.ar/detalleconcepto.php?codigo=119&inicio=40

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

Definimos un puntero auxiliar llamado reco1, lo inicializamos con la direccin del


primernodoymedianteunforavanzamoshastalaposicinalmacenadaenpos1:
Nodoreco1=raiz;
for(intf=1;f<pos1;f++)
reco1=reco1.sig;

De forma similar con un segundo puntero auxiliar avanzamos hasta la posicin


indicadaporpos2:
Nodoreco2=raiz;
for(intf=1;f<pos2;f++)
reco2=reco2.sig;

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;

Se puede presentar las siguientes situaciones, si est vaca, lo insertamos


inmediatamente:
http://www.javaya.com.ar/detalleconcepto.php?codigo=120&inicio=40

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

Cuando salimos del while si la condicin (x>=reco.info) continua siendo verdadera


significaqueseinsertaalfinaldelalista,encasocontrarioseinsertaenmediodela
lista:
if(x>=reco.info){
reco.sig=nuevo;
}else{
nuevo.sig=reco;
atras.sig=nuevo;
}

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

Resolveremos algunos mtodos para administrar listas genricas empleando listas


doblementeencadenadasparaanalizarlamecnicadeenlacedenodos.
http://www.javaya.com.ar/detalleconcepto.php?codigo=121&inicio=40

1/18

2/25/2016

Estructurasdinmicas:Listasgenricasdoblementeencadenadas

Muchos de los mtodos, para listas simple y doblemente encadenadas no vara,


comoporejemplo:elconstructor,vacia,cantidad,etc.
Programa:

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

En caso que exista verificamos si el nodo a extraer es el primero de la lista (este


anlisisdebehacerseyaquesieselprimerodelalistasemodificaelpunteroraiz):
if(pos==1){

Si es el primero guardamos en una variable auxiliar la informacin del nodo y


avanzamos el puntero raiz, luego si raiz apunta a un nodo disponemos el puntero
antdedichonodoanull:
informacion=raiz.info;
raiz=raiz.sig;
if(raiz!=null)
raiz.ant=null;

Si el nodo a extraer no est al principio de la lista avanzamos con una estructura


repetitivahastaelnodoanterioraextraer:
for(intf=1;f<=pos2;f++)
reco=reco.sig;

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;

El mtodo borrar es muy similar al mtodo extraer con la diferencia de que no


retornavalor:
publicvoidborrar(intpos)
{
if(pos<=cantidad()){
if(pos==1){
raiz=raiz.sig;
if(raiz!=null)
raiz.ant=null;
}else{
Nodoreco;
reco=raiz;
for(intf=1;f<=pos2;f++)
reco=reco.sig;
Nodoprox=reco.sig;
prox=prox.sig;
reco.sig=prox;
if(prox!=null)
prox.ant=reco;
}
}
}

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

Definimos un puntero auxiliar llamado reco1, lo inicializamos con la direccin del


primernodoymedianteunforavanzamoshastalaposicinalmacenadaenpos1:
Nodoreco1=raiz;
for(intf=1;f<pos1;f++)
reco1=reco1.sig;

De forma similar con un segundo puntero auxiliar avanzamos hasta la posicin


indicadaporpos2:
Nodoreco2=raiz;
for(intf=1;f<pos2;f++)
reco2=reco2.sig;

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.

Plantear una clase para administrar una lista genrica doblemente


encadenadaimplementandolossiguientesmtodos:
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.

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

El algoritmo es idntico al mtodo que inserta al principio con la salvedad que no


desplazamosraizconladireccindelnodocreado(esdeciralinsertarenlaposicin
anteriordelprimernodoloqueestamoshaciendorealmenteesinsertaralfinaldela
lista):

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

Si la lista no est vaca disponemos un puntero en el primer nodo y utilizamos un


do/whilepararecorrerlalista.Lacondicindeldo/whileesqueserepitamientrasel
punterorecoseadistintoaraiz(esdecirquenohayadadotodalavueltaalalista):
if(!vacia()){
Nodoreco=raiz;
do{
System.out.print(reco.info+"");
reco=reco.sig;
}while(reco!=raiz);
System.out.println();
}
}

Paraborrarelnododeunadeterminadaposicin:

publicvoidborrar(intpos)

Debemos primero identificar si es el primero de la lista (ya que en este caso se


modificaelpunteroexternoraiz):
http://www.javaya.com.ar/detalleconcepto.php?codigo=122&inicio=40

6/7

2/25/2016

Estructurasdinmicas:Listasgenricascirculares

if(pos<=cantidad()){
if(pos==1){

Sieselprimeroyelnicodelalistahacemosqueraizapunteanull:
if(cantidad()==1){
raiz=null;

Si no disponemos un puntero al final de la lista, avanzamos raiz y enlazamos el


ltimonodoconelsegundodelalista:

}else{
Nodoultimo=raiz.ant;
raiz=raiz.sig;
ultimo.sig=raiz;
raiz.ant=ultimo;
}

En caso que queremos borrar un nodo que se encuentra en medio de la lista o


inclusivealfinaldebemosrecorrerconunforhastaelnodoquequeremosborrary
luego disponemos un puntero en el nodo anterior y otro puntero en el nodo
siguiente.Seguidamenteprocedemosaenlazarlosnodos:
Nodoreco=raiz;
for(intf=1;f<=pos1;f++)
reco=reco.sig;
Nodoanterior=reco.ant;
reco=reco.sig;
anterior.sig=reco;
reco.ant=anterior;

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.

Cuando llamamos desde la misma funcin le enviamos el valor de x menos 1 y la


memoriaquedadelasiguienteforma:

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:

Es importantsimo entender la liberacin del espacio de las variables locales y los


parmetrosenlassucesivasllamadasrecursivas.
Porltimolafuncinmainrecibe"valor",enestecasoelvalor24.

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

Cuando llamamos al mtodo recursivo le enviamos raiz y el parmetro reco recibe


esta direccin. Si reco es distinto a null llamamos recursivamente al mtodo
envindoleladireccindelpunterosigdelnodo.
Porloqueelparmetrorecorecibeladireccindelsegundonodo.

Podemos observar como en las distintas llamadas recursivas el parmetro reco


apuntaaunnodo.Cuandosevandesapilandolasllamadasrecursivasseimprime
primeramenteel10luegoel4yporltimoel5.
http://www.javaya.com.ar/detalleconcepto.php?codigo=124&inicio=40

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

Mediante un for recorremos todo el vector que contiene la lista de archivos y


directorios:
for(intf=0;f<dir.length;f++){

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

A la salida ubicarla en la componente de la fila 9 y columna 9 de la matriz. La


personacomienzaarecorrerellaberintoenlafila0ycolumna0.Loscerosyunos
http://www.javaya.com.ar/detalleconcepto.php?codigo=124&inicio=40

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)

Primero verificamos si la coordenada a procesar del laberinto se encuentra dentro


de los lmites correctos y adems no hayamos encontrado la salida hasta el
momento:
if(fil>=0&&fil<10&&col>=0&&col<10&&salida==false)

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

Para realizar una bsqueda debemos ir comparando la informacin a buscar y


descenderporelsubrbolizquierdooderechosegncorresponda.
Ej.Sienelrbolanteriornecesitamosverificarsiestalmacenadoel700,primero
verificamos si la informacin del nodo apuntado por raz es 700, en caso negativo
verificamossilainformacinabuscar(700)esmayoralainformacindedichonodo
(400) en caso afirmativo descendemos por el subrbol derecho en caso contrario
descendemosporelsubrbolizquierdo.
Este proceso lo repetimos hasta encontrar la informacin buscada o encontrar un
subrbolvaco.

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

Es importante analizar que el recorrido de rboles es recursivo. Recorrer un


subrbolessemejantearecorrerunrbol.
Esbuenaprcticadibujarelrbolenunpapelyhacerelseguimientodelrecorridoy
lasvisitasacadanodo.
Recorridoentreorden:

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

Creamos un nodo y disponemos los punteros izq y der a null, guardamos la


informacinquellegaalmtodoenelnodo.
Si el rbol est vaco, apuntamos raz al nodo creado en caso de no estar vaco,
dentro de una estructura repetitiva vamos comparando info con la informacin del
nodo,siinfoesmayoraladelnododescendemosporelsubrbolderechoencaso
contrariodescendemosporelsubrbolizquierdo.
Cuando se encuentra un subrbol vaco insertar el nodo en dicho subrbol. Para
estollevamosunpunteroanteriordentrodelwhile.
privatevoidimprimirPre(Nodoreco)
{
if(reco!=null)
{
System.out.print(reco.info+"");
imprimirPre(reco.izq);
imprimirPre(reco.der);
}
}
publicvoidimprimirPre()
{
imprimirPre(raiz);
System.out.println();
}
http://www.javaya.com.ar/detalleconcepto.php?codigo=127&inicio=40

4/13

2/25/2016

Estructurasdinmicas:ImplementacinenJavadeunrbolbinarioordenado

El mtodo imprimirPre(), es decir el no recursivo se encarga de llamar al mtodo


recursivopasandoladireccindelnodoraiz.
ElmtodorecursivovoidimprimirPre(Nodoreco)loprimeroqueverificaconunifsi
reco est apuntando a un nodo (esto es verdad si reco es distinto a null), en caso
afirmativoingresaalbloquedelifyrealiza:
Visitarlaraiz.
Recorrerelsubrbolizquierdoenpreorden.
Recorrerelsubrbolderechoenpreorden.

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

y por ltimo en el recorrido en postorden la visita la realizamos luego de las dos


llamadasrecursivas:
privatevoidimprimirPost(Nodoreco)
{
if(reco!=null)
{
imprimirPost(reco.izq);
imprimirPost(reco.der);
System.out.print(reco.info+"");
}
}

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.

Ahora seleccionamos el control JButton y en la ventana de propiedades presionamos el icono de la parte


superior:

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&&centavos==80)
l1.setText("Correcto")
else
if(radio2.isSelected()&&pesos==1&&centavos==2
l1.setText("Correcto")
else
if(radio3.isSelected()&&pesos==3&&centavo
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&&centavos==80)
l1.setText("Correcto");
else
if(radio2.isSelected()&&pesos==1&&centavos==20)
l1.setText("Correcto");
else
if(radio3.isSelected()&&pesos==3&&centavos==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);

De forma similar los mtodos fillRect, fillRoundRect, fillOval y fillPolygon son


similaresalosanterioresconladiferenciaquepintasuinteriorconelcoloractivode
laltimallamadaalmtodosetColor:
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);

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.

Luego de crear el proyecto debemos disponer un archivo en la carpeta raiz del


proyecto(elarchivodebellamarseimagen1.jpg)

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

Creamos un objeto de la clase Image llamando al mtodo getImage de la clase


http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40

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

Para implementar esta aplicacin con el WindowBuilder creamos la interfaz visual,


disponemos4objetosdelaclaseJLabel,dosJSpinner,unJButtonyunobjetodela
claseJComboBox.Eldibulodelahojaconlaslneasdemrgenessuperioreinferior
comoelgrficodeorientacindelahojasehacenenelmtodopaint.
Elcdigofuentequeresuelveestaaplicacines:

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

Para saber la orientacin de la hoja debemos extraer el valor seleccionado del


JComboBoxymedianteunifverificarsielStringseleccionadoes"Horizontal":
Stringdireccion=(String)comboBox.getSelectedItem();
if(direccion.equals("Horizontal"))
g.drawRect(320,120,200,100 );
else
http://www.javaya.com.ar/detalleconcepto.php?codigo=130&inicio=40

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.

Confeccionar un programa que permita configurar las caractersticas del


mouse.
Por un lado debemos seleccionar la velocidad de desplazamiento de la
flecha del mouse. Disponer un JSpinner para poder seleccionarse los
valores0,25,50,75y100.
Porotroladodebemospoderseleccionarcualdelosdosbotonesdelmouse
ser el principal, tenemos para esta funcin un JComboBox con dos
opciones:izquierdooderecho.
Cuando se selecciona el botn (cambio en el JComboBox) actualizar el
grfico mostrando el botn del mouse seleccionado (graficar en el mtodo
paintelmouseenpantalla)

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

Seguidamente calculamos los grados que le corresponde a cada trozo de tarta


(teniendoencuentaquetenemos360gradospararepartir):
Cadatrozodetartaloobtenemosmediantelaecuacin:
tamaotrozo=cantidaddevotosdelpartido/totaldevotos*360
siobservamoslaecuacinpodemosimaginarqueladivisin:
cantidaddevotosdelpartido/totaldevotos
generarunvalormenorauno(salvoqueelpartidohayaobtenidotodoslosvotos
delaeleccinencuyocasoladivisingeneraelvaloruno)
Estadivisinnosgeneraelporcentajedevotosquelecorrespondealpartidoyluego
dichoporcentajelomultiplicamosporlacantidaddegradosarepartir(queson360
grados)
Luegocomoladivisingenerarunvalormenoraunoyaltratarsededosvariables
enteras el resultado ser cero. Para evitar este problema procedemos primero a
multiplicarpor360yluegodividirporlavariablesuma:
intgrados1=v1*360/suma;
intgrados2=v2*360/suma;
intgrados3=v3*360/suma;

Si quisiramos primero dividir y luego multiplicar por 360 debemos proceder a


antecederacadaoperacineltipoderesultadoaobtener:
intgrados1=(int)((float)v1/suma*360);
intgrados2=(int)((float)v2/suma*360);
intgrados3=(int)((float)v3/suma*360);

Como podemos ver es ms complicado si queremos primero efectuar la divisin y


luegoelproducto.
Procedemos ahora a graficar los trozos de tarta y leyenda con el valor ingresado
(activamoselcolorrojoymedianteelmtodofillArccreamosuntrozodetartaque
se inicia en el grado 0 y avanza tantos trados como indica la variable grados1.
LuegomedianteelmtododrawStringmostramoslaleyendadelpartidorespectivo
conuncuadraditotambindecolorrojo):
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);

http://www.javaya.com.ar/detalleconcepto.php?codigo=131&inicio=40

6/15

2/25/2016

Grficosestadsticos

El segundo trozo comienza en grados1 y avanza tantos grados como lo indica la


variablegrados2.Activamoselcolorverdeparadiferenciardeltrozoanterior:
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);

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:

Seleccionamos la opcin "Java Build Path", de la parte central seleccionamos la pestaa


http://www.javaya.com.ar/detalleconcepto.php?codigo=133&inicio=40

1/8

2/25/2016

AltayConsultadeunatabladeMySQL

"Libraries" y procedemos a presionar el botn "Add External JARs...", donde procedemos a


buscarelarchivomysqlconnectorjava5.1.18bin.jar
Elcdigofuentedelaclaseformularioes:
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;
privateJLabellblIngreseCdigoDe;
privateJTextFieldtf3;
/**

La interfaz visual de la aplicacin a implementar es la siguiente (se solicita el ingrese de la


descripcin del artculo y su precio, cuando se presiona el botn "Alta" se procede a insertar
unafilaenlatablaarticulosdelabasededatosbd1):

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

Seguidamente definimos una variable de la clase ResultSet llamada registro y llamamos al


mtodoexecuteQuerydelaclaseStatementdelobjetoqueacabamosdecrearpreviamente:

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

Seleccionamos la opcin "Java Build Path", de la parte central seleccionamos la pestaa


"Libraries" y procedemos a presionar el botn "Add External JARs...", donde procedemos a
buscarelarchivomysqlconnectorjava5.1.18bin.jar
Elcdigofuentecompletoqueresuelveesteproblemaes:

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;
/**

El cdigo a implementar cuando se presiona el botn "Consulta por cdigo" es el visto en el


conceptoanterior:

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

También podría gustarte