Está en la página 1de 19

CursodeprogramacinJavaII

ArtculopublicadooriginalmenteenlarevistaSloProgramadores

EnelnmeroanteriorpresentamosbrevementequeslaplataformaJavayenquconsistencadauna
delastresedicionesdelaplataforma(JavaME,JavaSEyJavaEE).Vimosculeseranlos
componentesbsicosdelkitdedesarrolloJavayaprendimosamanejarlosdesdeunaconsola.
Finalmente,presentamosculessonlostiposdedatosprimitivosylosoperadoresaritmticos,
relacionalesylgicosbsicosdellenguaje.EnestasegundaentregadeestecursodeprogramacinJava
presentaremosbrevementelalibreramatemtica,introduciremosnuevostiposdedatosnoprimitivos
comocadenasdecaracteres,arraysyenumeraciones,ypresentaremoslasestructurasdecontrolde
flujo(buclesycondicionales)dellenguaje.Paratrabajarconloscdigosdeejemplodeesteartculoos
recomiendoquesigisusandoelJDKparafamiliarizarosconl.Enelnmerosiguiente
comenzaremosausarunentornodedesarrollo.

Lalibreramatemtica:laclaseMath
Lamayorpartedelasfuncionesmatemticasbsicas(racescuadradas,exponenciacin,logaritmos,
senos,cosenos,senoshiperblicos,etc.)estndisponiblesenJavaatravsdelaclaseMath.Hastael
siguientenmerodeestecursodeprogramacinJavanopresentaremosqusonlasclasesycmo
construirlas.Noobstante,noesnecesariotenerconocimientosdeprogramacinorientadaaobjetos
paraemplearestaclase:todossusmtodossonestticos,estoes,secomportancomofunciones.Por
tanto,podemosinvocarlosdirectamentesinnecesidaddecrearningnobjetodelaclase.Lasintaxisde
estosmtodoses:

Math.metodo(argumentos);

Dondemetodoeselnombredelmtodoconcretoquequeremosinvocar.Porejemplo,pararealizarun
senoemplearamosMath.sin(ngulo),yparacalcularx^yenemplearamosMath.pow(x,y).Enestos
momentosprobablementeteestsrealizandopreguntascomoTengoquesaberdememoriatodoslos
mtodosdelaclaseMath?Ytambintengoquesaberelordenenelqueselepasanlosargumentos?
y...aMath.sin(ngulo)elnguloselodebodepasarengradosoenradianes?.Tranquilo,noes
necesariosabersedememorialosmtodos,nilosargumentos.Tampocotienesquesabertedememoria
silosngulossepasanengradosoenradianes.Aunqueconlaprcticaacabarssabiendolarespuestaa
muchasdeestaspreguntas,nocreoquetenganingnsentidoqueteestudieslaclaseMathdememoria.

Javatieneunaslibrerasextensas(extenssimas).NingndesarrolladorJava,pormsgurquesea,se
lassabedememoria.Peroloquessabemoshacerlosgursesbuscarrpidamenteaquellascosasque
nosabemoseneljavadocdelaslibreras.LaslibrerasJavaestnformadasprincipalmenteporcdigo

fuenteJava.Eljavadocdeestaslibrerasnoesmsqueelresultadodeaplicarlaherramientajavadoc,
quepresentamosenelprimerartculodeestaserie,adichocdigofuente.

TodoprogramadorJavaquesepreciedebetenersiempreamanoeljavadocdelalibreraestndar.Este
javadocpuededescargarsedesdelamismapginadedescargadondeseobtieneelJDKdeSun.Siel
lectorsehainstaladoNetbeans,elentornodedesarrollotieneestadocumentacinintegradaypuede
accederseponiendoelcursorsobrelaclaseomtododelcualsequieraconsultareljavadocya
continuacinpulsandoAlt+F1.Estadocumentacintambinestdisponibleonlineen
http://java.sun.com/javase/6/docs/api/,aunquepersonalmenteprefierotenerladescargadaenmiequipo
yaqueaspuedonavegardeunmodomsrpidotravsdeellaynodependodetenerconectividadpara
poderconsultarla.

FIGURA1:Eljavadocdelalibreraestndaresunaherramientaindispensableparacualquier
programadorJava.
Comopodemosverenlafigura1,enelrecuadrosituadoenlaesquinainferiorizquierdadelapgina
principaldeladocumentacinhayunlistado,ordenadoalfabticamente,contodaslasclasesque
componenladocumentacindelalibreraestndardeJava.TrashacerclicenMathvemosla
documentacindeestaclase.Unadelasprimerascosasquenosencontraremosesunlistadodelos
mtodosdelaclase,juntoconunadescripcincortadesufuncionalidad.Cadamtodoesunenlace
quenosllevaaunadescripcinmsdetallada,situadamsabajoenlamismapginaweb.

VolviendoanuestrapreguntainicialaMath.sin(ngulo)elnguloselodebopasarengradosoen
radianes?.Notengointencinderesponderte.Antesdeseguirleyendoesteartculotmismodeberas
responderaesapreguntaconsultandoladocumentacindelaclaseMath.Esmuyimportante
acostumbrarseausareljavadocdelalibreraestndar;esunrecursoesencialparacualquier
programadorJava.Enelcdigodellistado1podemosverunprogramadondeseempleanvariosdelos
mtodosdelaclaseMath.

//LISTADO 1: Este cdigo muestra el funcionamiento de la clase Math


//cdigo Ejemplo6.java del CD

inti=45,j=2;
System.out.println("Cosi:"+Math.cos(i));//coseno
System.out.println("Seni:"+Math.sin(i));//seno
System.out.println("j^i:"+Math.pow(j,i));//exponenciacion
System.out.println("sqrt(j):"+Math.sqrt(j));//raizcuadrada
System.out.println("Númeroaleatorio:"+Math.random());//generaciondeunnumeroaleator
io
System.out.println("Valorabsoluto:"+Math.abs(5));//valorabsoluto

Cadenasdecaracteres:laclaseString

PararepresentarcadenasdecaracteresenJavaseempleaunaclase,String,queeslaqueproporciona
soporteparalasoperacionesqueserealizanmscomnmenteconcadenasdecaracteres.Ladefinicin
deunStringessimilaraladeuntipoprimitivo.Lascadenasdecaracteresquevayanincluidasenel
cdigoJavacomoliteralesdebenirrodeadasporcomillasdobles:

Stringe;//declaradoperonoinicializado
Stringe="";//cadenavacia
Stringe="Hola";//inicializacionyasignacion

LaconcatenacindedoscadenasdecaracteresenJavaesmuysencilla:serealizaconeloperador+,
esdecirsumandolascadenasdecaracteres.Loilustraremosconunejemplo:

Stringsaludo="hola";
Stringnombre="Pepe";
StringsaludaPepe="";
saludaPepe = saludo + nombre;// saludaPepe toma el valor "holaPepe"

Siunacadenalaintentamosconcatenarconotrotipodevariableautomticamenteseconviertelaotra
variableaString(enelcasodequelaotravariableseaunobjetopararealizarlaconversinseinvocar
elmtodotoString()dedichoobjeto),detalmodoqueenJavaesperfectamentevlidoelsiguiente
cdigo:

Stringsaludo="hola";
intn=5;
saludo = saludo + "" + n;// saludo toma el valor "hola 5"

AlgunosmtodostilesdelaclaseString

AdiferenciadeC,lasoperacionescomunessobrecadenasdecaracteres,comolacomparacinola
extraccindeunasubcadena,noserealizanatravsdefunciones(omtodosestticos),sinoquese
realizanatravsdemtodosdelapropiaclaseString.Porejemplo,enlaclaseStringhayunmtodo
quepermitelaextraccindeunasubcadenadecaracteresdeotra.Susintaxises:

cadena.substring(intposiciónInicial,intposiciónFinal);
dondeposicinInicialyposicinFinalson,respectivamente,laposicindelprimercarcterquese
deseaextraerydelprimercarcterqueyanosedeseaextraer.Veamosunejemplodeuso:

Stringsaludo="hola";
Stringsubsaludo=saludo.substring(0,2);//subsaludotomaelvalor"ho"

Tambinpuedeextraerseunchardeunacadena;paraelloseempleaelmtodocharAt(posicin),
siendoposicinlaposicindelcarcterquesedeseaextraer.Seempiezaacontaren0.Paracomparar
cadenasdecaracteresnopuedeemplearseeloperador==.Esteoperadorrealizaunacomparacinde
identidad,esdecir,nospermitiracomprobarsidosobjetosStringsonrealmenteunmismoobjeto.
PerononospermitecomprobarsidosobjetosStringdiferentescontienenelmismotexto.Elsegundo
casoeselquesecorrespondeconlasemnticade"igualdad"quehabitualmenteempleamoslosseres
humanos:nonosimportasisonelmismoobjeto,sinosisucontenidoeselmismo.Paracomparardos
cadenasdecaracteresdebeemplearseotromtododeString:equals.Susintaxises:

cadena1.equals(cadena2);

elmtododevuelvetruesilasdoscadenassonigualesyfalsesisondistintas.Esposiblepasaruna
cadenadecaracteresaminsculasoamaysculas?yreemplazaruncarcterporotro?Oencontrarla
primeraocurrenciadeuncarcterdeunacadena?.Larespuestaess,todasestasoperaciones,ymuchas
otras,sonposibles.Cmoserealizan?.EmpleandomtodosdelaclaseString.Qumtodos?.Aesta
pregunta,yameniegoaresponder.Recomiendoallectorqueantesdecontinuarleyendoelartculo
consulteeljavadocdelaclaseStringysefamiliariceconlasoperacionesquesoporta.Enellistado2
vemosuncdigoquedemuestravariasoperacionesqueserealizanconStrings.Estecdigotambin
permitemostrarcomoenJavasedistingueentremaysculasyminsculas,detalmodoque"Hola"no
eslamismacadenaquecaracteresque"hola".

//LISTADO 2: Operaciones frecuentes con cadenas de caracteres

//cdigo Ejemplo7.java del CD

Stringsaludo="Hola";
Stringsaludo2="hola";
intn=5;
//Imprime por consola la subcadena formada por los caracteres
//comprendidos entre el caractero 0 de saludo y hasta el

carcter 2

System.out.println(saludo.substring(0,2));
//ejemplo de concatenacion

System.out.println(saludo+""+n);
//Imprime el resultado del test de igualdad entre saludo y saludo2.

System.out.println("saludo==saludo2"+saludo.equals(saludo2));

Enumeraciones

EstacaractersticadellenguajesloestdisponibleenJava5ysuperior.SiestsutilizandoJava1.4.Xo
inferiornopodrsemplearla.LaversinactualdeJavaesla6.

Lostiposdedatosenumeradossonuntipodedatodefinidoporelprogramador(nocomoocurrecon
lostiposdedatosprimitivos).Sirvenpararepresentarvariablesquetomanvalorenunconjuntofinitoy,
normalmente,pequeodedatos.Algunosejemplospodranserlospalosdelabarajaespaola,olos
dasdelasemana.Podramosrepresentarunpalodelabarajamedianteunnmeroentero;porejemplo,
podramosasignarel1alosoros,el2alosbastos,el3alascopasyel4alasespadas.Estaestrategia
tienedosproblemas:siunavariabletipointesusadapararepresentarunpalodelabaraja,nadame
impideasignarleelvalor"143",aunquenotenganingnsentido.Elsegundoproblemaesquedentro
deunmesnomevoyaacordarqupalorepresentabael2,osicomencaenumeraren0oen1.

Lasenumeracionesproporcionanunasolucineleganteaesteproblemaeincrementanlalegibilidaddel
programa.Paradefinirlaselprogramadordebeindicarunconjuntodevaloresfinitossobreloscuales
lasvariablesdetipoenumeracindeberntomarvalor.Lamejorformadecomprenderqusones
vindolo;paradefiniruntipodedatoenumeradoseemplealasintaxis:

modificadores enum NombreTipoEnumerado{ VALOR1,VALOR2,.. }

Losposiblesvaloresdemodificadoressernvistosenelsiguientecaptulodeestaserie.Elcasoms
habitual,yelqueemplearemosporladeahora,esquemodificadorestomeelvalorpublic.Elnombre
puedesercualquiernombrevlidodentrodeJava.Entrelasllavesseponenlosposiblesvaloresque
podrntomarlasvariablesdetipoenumeracin,valoresquehabitualmenteseescribenenletras
maysculas.Unejemplodeenumeracinpodraser:

publicenumSemana{LUNES,MARTES,MIERCOLES,JUEVES,VIERNES,SABADO,
DOMINGO}

Lasdefinicionesdelostiposenumeradosdebenrealizarsefueradelmtodomainy,engeneral,fuera
decualquiermtodo;esdecir,debenrealizarsedirectamentedentrodelcuerpodelaclase.Paradefinir
unavariabledelaanteriorenumeracinseemplearalasiguientesintaxis:

Semana variable;

yparadarleunvaloralasvariablesdetipoenumeracinstasdebenasignarseaunodelosvalores
creadosensudefinicin.Elnombredelvalordebeirprecedidodelnombredelapropiaenumeracin:

variable=Semana.DOMINGO;

AdiferenciadelasenumeracionesdeCoC++,lasenumeracionesdeJavason"typesafe",estoes,es
imposibleasignarleunavariabledeunaenumeracinunvalordistintodeaquellosquesedeclararonal
definirlaenumeracin.EnClasenumeracionesinternamenteserepresentancomonmerosenteros,
porloquenadanosimpideasignarleaunavariabledeunaenumeracinunvalorenterofueradelrango
delasconstantessimblicasqueseemplearonensudefinicin.EnJavacadaunodelosvaloresdelas
enumeracionesserepresentamedianteunainstanciadelaclasedelaenumeracinyelcompilador
garantizaquecadavezqueseinicialiceunaenumeracinseinicializaobligatoriamenteaunodelos
valoresquesedeclararonensudefinicin,yaqueestosvaloressontodaslasinstanciasqueexistende
dichaclase.

Enellistado3podemosverunejemplodeusodeenumeraciones.

//LISTADO 3: Ejemplo de uso de enumeraciones.


//codigo Ejemplo8.java del CD
public enum Semana {LUNES, MARTES, MIERCOLES, JUEVES, VIERNES, SABADO, DOMINGO};

publicstaticvoidmain(String[]args){
Semana hoy = Semana.MARTES;
//observa como gracias a la enumeracin el programa es mas facil de leer
if(hoy == Semana.DOMINGO

|| hoy == Semana.SABADO){

System.out.println("Hoytocadescansar");
} else{

System.out.println("Hoytocatrabajar");
}
}

Arrays

Unarrayesunacoleccindevariablesdelmismotipo,quetienenunnombrecomnyestndispuestos
enposicionesconsecutivasdelamemoriadelordenador.Cadaelementodelarraysedistinguedelos
demsporsundice(nmerodeordendentrodelarray).Unarraysecaracterizaporsutipobase(eltipo
decadaelemento),elnmerodedimensionesdelmismoylalongitudencadadimensin.

EnJavalosarrayssonunobjeto.Comotalessecreanmedianteeloperadordenew(enelsiguiente
captuloveremoselusodeesteoperadordeunmododetallado).Quitandoesadiferencia,laformade
crearelarrayylaformadetrabajarconellosesidnticaalaformaenlaquesetrabajaconlosarraysen
C.Lasintaxisenladefinicindeunarraydeunadimensineslasiguiente:

Tipo_datos[] nombreArray = new Tipo_datos[tamaoArray];

Tipo_datoseseltipodelosdatosquesealmacenarnenelarray(int,char,String...ocualquier
objeto).TamaoArrayeseltamaoquelequeremosdaraestearray.Porejemplo,lasentencia:

int[]array=newint[10];

creaunarrayllamadoarray,enelquepodremosalmacenar10datostipoentero.Paracrearunamatriz,
estoes,unarraydedosdimensiones,emplearemoselsiguientecdigo:

int[][]matriz=newint[3][9];

Comosemuestraenlafigura2,elprimerelementodeunarraysesitaenlaposicin0,exactamente
igualqueenC.Unavezdefinido,paraaccederaloselementosdeunarrayusaremoselnombredel
arrayyacontinuacin,entrecorchetes,elndicedelelementoalcualqueremosacceder.Porejemplo,la
instruccin:

array[5] = array[0] + array[3];

hacequelasextaposicindelarraytomeelvalordelasumadelaprimeraposicindelarraymsla
cuarta(unavezms,hagamosnfasisenquesecomienzaacontarencero).Enelcasodelasmatrices,
opoliedrosengeneral,deberemosemplearunndiceporcadadimensindelpoliedro.

FIGURA2:EnJavaelprimerndicedetodaslasdimensionesdeunarraycomienzaacontaren
0.

Ellistado4muestrauncdigodondeseinicializaunarrayconnmerosaleatoriosentre0y80ya
continuacinsecalculalasumadedichosnmeros.

//LISTADO 4: Codigo de ejemplo que muestra el uso de arrays en Java.


//codigo Ejemplo9.java del CD

int[]edades=newint[10];
for(inti=0;i<10;i++){
edades[i]=(int)Math.random()%80;
System.out.println("Elemento"+i+edades[i]);

intsum=0;
for(inti=0;i<10;i++){
sum

= sum + edades[i];

System.out.println("Suma"+sum);

ElcontroldeflujoenJava

ElmododeejecucindeunprogramaJavaenausenciadeelementosdecontroldeflujoessecuencial,
esdecir,lasinstruccionessevanejecutandounadetrsdeotra,seejecutantodas,ysloseejecutanuna
vez.Estonospermitehacerprogramasmuylimitados;paraevitarloJavaemplealamismasolucin
queempleanlainmensamayoradeloslenguajesdeprogramacin:estructurasdecontroldeflujo.
Estasestructurasdecontroldeflujosedividenendosgrupos:loscondicionales,quepermitenejecutar
onounbloquedecdigodependiendodequesecumplaunadeterminadacondicin;ylosbucles,que
permitenrepetirlaejecucindeunbloquedecdigomientrassecumplaunadeterminadacondicin.

AquelloslectoresfamiliarizadosconCcomprobarncmoel90%delasintaxisdeJavareferentea
estructurasdeflujoesidnticaaladeestelenguaje.

Estructurasdecontroldeflujocondicionales

Lasestructurasdecontroldeflujodetipocondicionalejecutanuncdigouotroenfuncindequese
cumplaonounadeterminadacondicin.EnJavaexistendostiposdecondicional:ifyswitch.

Condicionaltipoif

Lasintaxismssencillaparaelcondicionalifes:

if(condicion) {
Grupo de sentencias;}


condiciontienequeserunvalortipoboolean;estevalorpuedeobtenerseevaluandounaexpresin
indicadaporcondicin,peroelvalordeevaluardichaexpresintienequeserobligatoriamenteun
boolean(adiferenciadeC,nosepuedenemplearnmerosenteroscomocondiciones).Elgrupode
sentenciasqueseencuentraentrellavesseejecutaslosilacondicintomaunvalortrue.Encaso
contrarioseignoraelgrupodesentencias.Sielcondicionalafectaaunanicasentencialasllavesson
opcionales.

Unifpuedeiracompaadodeunbloqueelse:

if(condicion) {
Grupo de sentencias;}
else{
Grupo2 de sentencias;}

SicondiciontomaelvalortrueseejecutaGrupodesentencias,encasocontrarioseejecutaGrupo2
desentencias.Entreelifyelelsenopuedeirningunasentencia.

Esposibleanidarvarioscondicionalestipoif:

if(condicion) {
Grupo de sentencias;}
else if (condicion2){
Grupo2 de sentencias;}
else if (condicion3){
Grupo3 de sentencias;}
...
else{
Grupo_n de sentencias;}

SicondiciontomaelvalortrueseejecutaGrupodesentenciasyseignorantodoslosdems
condicionalesyelelse.Encasocontrario,sicondicion2tomaelvalortrueseejecutaGrupo2de
sentencias...yassucesivamentehastaacabarsetodaslascondiciones.Sinosecumpleningunase
ejecutaelgrupodesentenciasasociadasconelelse.Esteltimoelseesopcional.

Enellistado5mostramosunejemplodeusodecondicionaltipoif.Esteeselprimerejemplodonde
usamosotromtodoademsdelmain,elmtodostaticinttest(intval,intval2).Unmtodoestticoes
equivalenteaunafuncin;esdecir,puedeinvocarsedirectamentesinnecesidaddecrearninguna
instanciadelaclase.Elnombredelmtodoestestyrecibedosparmetros(valyval2)detipoentero.
Elmtododevolvercomoresultadodesuejecucinunvalorentero;dichovalordebeindicarse
empleandolasentenciaalreturn.Enelsiguienteartculodeestaseriepresentaremosendetallela
sintaxisparadeclararmtodosenJava.

Elmtodotestesinvocadovariasvecesdesdeelmain.Estemtododevuelve1sielprimer
argumentoesmenorqueelsegundo,+1sielprimerargumentoesmayorqueelsegundoy0siambos
soniguales.

//LISTADO 5: Ejemplo de uso del condicional tipo if.


//codigo Ejemplo8.java del CD

staticinttest(intval,intval2){
intresult=0;
if(val > val2)
result = +1;
else if(val < val2)
result = -1;
else
result = 0;
return result;
}

publicstaticvoidmain(String[]args){
System.out.println(test(10,5));
System.out.println(test(5,10));
System.out.println(test(5,5));
}


Switch

Estaestructuradecontroldeflujopermiteelegirentrevariosbloquesdecdigoculessedeben
ejecutaryculesno.Veamossusintaxis:

switch(selector) {
case valor1 : Grupo de sentencias1; break;
case valor2 : Grupo de sentencias2; break;
case valor3 : Grupo de sentencias3; break;
case valor4 : Grupo de sentencias4; break;
case valor5 : Grupo de sentencias5; break;
// ...
default: statement;
}

alejecutarselasentenciaswitchcomparaelvalordeselectorconvalorX.Sielvalorcoincidese
ejecutasurespectivogrupodesentencias.Sinoseencuentraningunacoincidenciaseejecutanlas
sentenciasdeldefault.Sinosepusieranlosbreakunavezhubieseunacoincidenciaentreunvalory
elselectorseejecutarantodoslosgruposdesentencias,incluidaladeldefault.Enlagranmayorade
loscasos,stenoeselcomportamientoquesedeseadelasentenciaswitch,deahquecadaunodelos
casehabitualmentetermineconunbreak,esdecir,conunsaltoincondicionalfueradelaestructurade
controldeflujo.

Lavariableselectorslopuedeserdetipocharocualquiertipodevalorenteromenoslong(siests
empleandoJava5oposteriortambinsepuedenemplearenumeraciones).Nopodemosemplearningn
tipodenmeroreal,Strings,uobjetosengeneral.

Enellistado6mostramosunejemplodeusodelasentenciaswitch.Enestecaso,tomamosventajade
queunavezquehayunacoincidenciaentrelavariablequehacelasvecesdeselectoryunodelos
valoresdeloscaseseejecutantodoslosbloquesdecdigodetodosloscasequehayaacontinuaciny
elbloquedecdigodeldefault.Elprogramageneraunaletraaleatoriadelalfabetoyempleaunswitch
paracomprobarsilaletraesunavocalounaconsonante;siesunavocalimprime"vocal"porla
consola,ysiesunaconsonanteimprime"consonante".Elprincipiocdigosopromotoresswitchse
empleaparacomprobarsielcarcteresunadelascincovocalesdelalfabeto,portantohayquehacer
cincocomparacionesdiferentes.Perolaaccinarealizarenloscincocasoseslamisma:imprimir

"vocal".Deahquepodamostomarventajadelparticularcomportamientodelswitch.

//LISTADO 6: Ejemplo de la estructura de control de flujo switch.


//codigo Ejemplo11.java del CD
//Bucle for. Ejecutar 100 veces el codigo que tiene dentro.

for(inti=0;i<100;i++){
//generamos un carcter aleatorio
char c = (char)(Math.random() * 26 + 'a');

System.out.print(c+":");
switch(c) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
//Si el caracter es a, e, i, o o u imprimimos vocal.

System.out.println("vocal");
break;
default:
//Si no era ninguna de las anterioes imprimos consonate.

System.out.println("consonante");
}
}
}

Bucles

Soninstruccionesquenospermitenrepetirunbloquedecdigomientrassecumplaunadeterminada
condicin.EnJavaexistencuatrotiposdiferentes:while,dowhile,for,y(enJava5)"foreach".

Buclewhile

Cuandoenlaejecucindeuncdigosellegaaunbuclewhilesecompruebasiseverificalacondicin
asociadaconl,siseverificaseejecutaelbloquedecdigoasociadoconelbucleysevuelvea
comprobarlacondicin;mientrasdichacondicinsigaverificndoseseseguirejecutandoelcdigo
delbucle.Susintaxises:

while(condicin){
Grupo de sentencias;}

Ellistado7muestraelfuncionamientodeestebucle.Enlseempleaelmtodorandomdelalibrera
matemticadeJavaparagenerarunnmeroaleatorio.Mientraselnmeroaleatorioquesegenerasea
menorque0.99(vercondicindelbucle)sevuelveagenerarotronmeroaleatorioyseimprimedicho
nmeroporconsola.

//LISTADO 7: Ejemplo de bucle tipo while.


//codigo Ejemplo12.java del CD

doubler=0;
//Mientras que r < 0.99 sigue ejecutando el cuerpo del bucle.
while(r < 0.99) {
//Genera un nuevo r aleatario entr 0 y 1.
r = Math.random();

System.out.println(r);
}

Elbucledowhile

Sucomportamientoessemejantealbuclewhile,sloqueaqulacondicinvaalfinaldelcdigodel

bucle,porloqueelcdigosevaaejecutaralmenosunavez.Comonormageneral,debemosemplear
unbucletipowhilecuandohayaunconjuntodeinstruccionesquesepuedanrepetirde0anveces,y
unbucledowhilecuandotengamosunconjuntodeinstruccionesquesepuedanrepetirde1anveces.
Lasintaxisdedowhilees:

do {
Grupo de sentencias;
}while(condicin);

Enellistado8podemosverelcdigodelistado7implementadomedianteunbucledowhile.

//LISTADO 8: Ejemplo de bucle tipo do while.


//cdigo Ejemplo13.java del CD

doubler;
do {
r = Math.random();

System.out.println(r);
} while(r < 0.99d);
}

Buclefor

Lasintaxisdeestebucleeslasiguientesiguiente:

for(expresion1;expresion2;expresion3){
Grupo de sentecias;}

Expresion1esunaexpresincualquiera,enlacualesposibledeclarary/oasignarvaloraunavariable,
lavariablecondicindelbucle.Expresion2eslacondicindelbucle.Mientrasdichacondicintome
elvalortrueelbucleserepetirunayotravez.Habitualmente,estaexpresincompruebaalguna
condicinsobreunavariabledeclaradaoasignadaenlaprimeraexpresin.Expresion3indicauna
operacinqueserealizaencadaiteracinapartirdelaprimera(enlaprimeraiteracinelvalordela
variabledelbucleeselqueseleasignaenexpresion1);nuevamente,lomshabitualesqueesta
operacinserealicesobrelavariabledelbucle.Elbucleforanteriorescompletamenteequivalenteal
siguientecdigo:

expresion1;
while (expresion2)
{
Grupo de sentecias;
expresion3;
}

Enellistado9seempleaunbucleforparaimprimirporconsolaloscaracteresdelatablaASCII.
Cuandoelcarcterseimprimehacindoleuncastaintsemostrarelvalorenterocorrespondiente,y
cuandoseimprimecomocarctersemostrarelcarcterasociadoadichovalorenteroenlatabla
ASCII.

//LISTADO 9: Este pequeo cdigo imprime por consola la tabla ASCII empleando un
bucle tipo for.
//cdigo Ejemplo14.java del CD
for( char c = 0; c < 128; c++)

System.out.println("valor:"+(int)c+"caracter:"+c);
}

Bucleforeach

EstacaractersticasloestdisponibleenJava5yversionesposteriores.Setratadeunbuclediseado
conelpropsitoderecorrerunconjuntodeobjetos.Porlodeahoralanicaestructuraquehemosvisto

quepermitealmacenarunconjuntodeobjetossonlosarrays,peroennmerosposterioresdeestaserie
deartculosintroduciremoselframeworkdecoleccionesdedatosdeJava.Estaestructuraresulta
particularmentetilparatrabajarcondichascolecciones(listas,pilas,mapas...).Lasintaxisdeeste
buclees:

for(Tipo elemento: coleccinElementos){


Grupo de sentecias;}

Tipoeseltipodedatodeloselementosdelconjunto;elementoesunavariableauxiliarquelaprimera
vezqueseejecuteelbucletomarelvalordelprimerelementodelconjunto,lasegundaveztomarel
valordelsegundoelementodelconjuntoyassucesivamente.LacoleccinElementoseselconjuntode
elementossobreloscualesqueremositerar(porlodeahora,unarray).Elbucleserepetirunavezpara
cadaelementodelacoleccin.

Estebucle"foreachsellama"for",aunquehubiesesidomejoremplearelprimernombreporsimilitud
conotroslenguajesdeprogramacinqueposeenunbuclesimilar,porhabersidointroducidoenel
lenguajedeprogramacinaposteriori.foreachnoesunapalabrareservadadentrodeJava;sicuandose
diseJava5sehubieseempleadoestapalabraparaestetipodebuclepodranproducirse
incompatibilidadesconcdigofuenteJavaescritoantesdeesemomento.

Enellistado10podemosvercmoseempleaestetipodebucleparacalcularlasumadeloselementos
deunarray.

//LISTADO 10: Ejemplo de bucle "foreach" en Java.


//cdigo Ejemplo15.java del CD

intarray[]=newint[10];
intsuma=0,contador=0;
//con este bucle damos valores a los elementos del array

for(inti=0;i<array.length;i++){
array[i]= 2*i;
}

for(inte:array){//paracadaelementodelarray
suma = suma + e;
}

System.out.println(suma);
}

breakycontinue

Estasdosinstruccionesnosonniunbucleniuncondicional,perossonsentenciasntimamente
relacionadaconestasestructurasdecontroldeflujo.Elencontrarseunasentenciadebreakenel
cuerpodecualquierbucledetienelaejecucindesucuerpoyproduceunsaltoincondicionalala
sentenciaqueseencuentrainmediatamentedespusdelbucle.Comoyahemosmostradoeneste
artculo,estasentenciatambinsepuedeusarparaforzarlasalidadelbloquedecdigoasociadocon
unodeloscasedeunainstruccintiposwitch.

continuetambindetienelaejecucindelcuerpodelbucle,peroenestaocasinnosesaledelbucle,
sinoqueseignoraelrestodelcuerpodelbuclequequedaseporejecutarysevuelvealprincipio.

Enellistado11podemosverunejemplodeusodeestassentencias.Enelprimerbuclefor,continue
seempleaparaignorartodoslosnmerosenterosquenoseanmltiplosde9.Enelsegundobucle,
breakseempleaparasalirdeunbucleinfinito.

//LISTADO 11: Ejemplo de uso de las sentencias break y continue.


//codigo Ejemplo16.java del CD

for(inti=0;i<100;i++){
//Salto a la siguiente iteracion si i no es divisible entre 9
if(i % 9 != 0) continue;
//Si i es divisible entre 9 se imprime

System.out.println(i);
}

inti=0;
// Lazo infinito del cual se sale con break:
while(true) {
i++;
if(i == 120) break; // Salimos del lazo

System.out.println(i);
}

Conclusiones

EnestesegundoartculodelaseriehemospresentadolalibreramatemticadeJava,variostiposde
datosnoprimitivoscomoarrays,cadenasdecaracteresyenumeraciones,yloselementosbsicosde
controldeflujo(buclesycondicionales)dellenguaje.

Enelsiguienteartculodelaseriecomenzaremosaintroducirlaprogramacinorientadaaobjetosen
Java.Explicaremosquesunaclase,cmotrabajarconellas,yenquconsistelaherencia.Tambin
comenzaremosemplearunentornodedesarrollo,BlueJ,paratrabajarconloscdigosdeejemplo.Os
esperoatodoselmesqueviene.

Descargas

Cdigosdelartculo

Cpitulosanterioresdelcurso:

CursodeprogramacinJavaIAbrahamOtero

También podría gustarte